먹수의 개발일지

웹 서버 보안 체크 리스트 본문

back-end/보안

웹 서버 보안 체크 리스트

icandle 2024. 11. 15. 17:46

웹 서버 보안 체크 사이트

https://observatory.mozilla.org/

https://securityheaders.com/ → 요청한 서버의 헤더 정보를 더 잘 보여준다. 

 

웹서버 보안 체크리스트

  1. HTTPS 사용: SSL 인증서를 구매하거나 무료로 얻어서 HTTPS를 사용하는 것이 중요합니다. 이를 통해 데이터의 암호화와 통신의 보안성을 강화할 수 있습니다. Nginx 설정에서 SSL을 활성화하고 HTTPS로 트래픽을 전송하도록 설정해야 합니다.
  2. CSRF(Cross-Site Request Forgery) 방어: Django에서는 기본적으로 CSRF 보호 기능을 제공합니다. 이를 활성화하여 웹 어플리케이션의 사용자 세션을 보호할 수 있습니다.
  3. CORS(Cross-Origin Resource Sharing) 설정: React와 Django가 서로 다른 도메인에서 실행될 경우, CORS 정책을 설정하여 허용되는 도메인만 리소스에 접근할 수 있도록 합니다.
  4. 보안 헤더 설정: Nginx 설정에서 보안 헤더를 추가하여 Clickjacking, XSS 등과 같은 공격을 방어합니다. 이러한 헤더에는 Content-Security-Policy, X-Frame-Options, X-XSS-Protection 등이 있습니다.
  5. 정적 파일 서빙 및 리버스 프록시 설정: Nginx를 사용하여 정적 파일을 제공하고 Django 애플리케이션을 리버스 프록시로 설정하여 보안을 강화할 수 있습니다.
  6. 서버 보안 업데이트: 운영 체제, Nginx, Django 등의 소프트웨어를 최신 버전으로 유지하고 보안 패치를 적용하는 것이 중요합니다.
  7. SSH 접근 제어: 서버에 대한 SSH 접근을 보호하기 위해 비밀번호보다는 SSH 키를 사용하고, SSH 포트 번호를 변경하거나 필요한 경우 IP 주소를 허용 목록에 추가합니다.
  8. 보안 그룹 및 방화벽 설정: 클라우드 환경에서는 보안 그룹이나 방화벽 설정을 통해 서버에 접근을 제한하고 필요한 포트만 열어둡니다.
  9. 접근 권한 관리: Django, Nginx, 그리고 서버 파일에 대한 접근 권한을 관리하여 불필요한 접근을 방지합니다.
  10. 로그 모니터링: 로그를 모니터링하고 비정상적인 활동을 식별하여 적절한 대응을 취합니다.

 

보안 헤더 설정

1) Directory Listing

autoindex off;

: 생략 가능

index 파일이 없을 경우 호출된 경로에 있는 파일 List를 보여주는 Directory Listing을 막기 위해서 아래와 같이 설정해주면 된다. Default값이 OFF기 때문에 생략해도 된다.

        location / {
                .....
                autoindex off;
        }

 

2) 서버 정보 보안

Nginx의 버전 정보를 응답 헤더에서 숨기려면 nginx.conf 파일에 다음과 같이 설정하면 된다:

server_tokens off;

 

3) 클릭재킹(clickjacking) 보안 설정

웹 페이지가 다른 도메인의 웹 페이지 안에서 <iframe> 요소를 통해 로드되는 것을 방지하기 위한 HTTP 응답 헤더이다. 클릭재킹(clickjacking)과 같은 공격으로부터 보호하기 위한 중요한 보안 메커니즘이다.

X-Frame-Options "SAMEORIGIN";

SAMEORIGIN : 페이지가 동일한 출처에서 로드된 **<iframe>**에서만 볼 수 있습니다. 다른 출처의 페이지에서는 이 페이지를 **<iframe>**으로 래핑하여 표시할 수 없습니다.

→ 그 외에 DENY, ALLOW_-FROM uri 등의 옵션으로 지정해줄 수 있다.

 

4) 크로스사이트 스크립팅(XSS) 공격 방어 보안

브라우저가 페이지를 렌더링할 때 XSS 공격으로부터 자동으로 보호되도록 설정할 수 있다.

X-XSS-Protection "1; mode=block";

1; mode=block : 브라우저에서 XSS 필터링을 활성화하고, XSS 공격이 감지되면 페이지 렌더링을 차단하도록 설정된다.

 

5) MIME 타입 스니핑(mime type sniffing) 방어

라우저가 서버에서 제공한 **Content-Type**을 무시하고 리소스의 실제 내용을 바탕으로 MIME 타입을 추론하지 않도록 한다.

X-Content-Type-Options nosniff;

 

5) HSTS (HTTP Strict Transport Security)

Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";

 

Nginx header 보안 적용 예시

nginx.conf

server {

        server_name test.com;

        location / {
                .......
                autoindex off;
        }

    server_tokens off;
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options nosniff;
	add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
		
}
Comments