8.5. HTTP 서버 보안

8.5.1. httpd.conf의 보안 강화

/etc/httpd/conf/httpd.conf 파일에 보안 옵션을 구성하여 Apache HTTP 서버의 보안을 강화할 수 있습니다.

프로덕션에 배치하기 전에 시스템에서 실행 중인 모든 스크립트가 올바르게 작동하는지 항상 확인하십시오.

root 사용자만 스크립트 또는 공통 게이트웨이 인터페이스(CGI)가 포함된 디렉터리에 쓰기 권한이 있는지 확인합니다. 쓰기 권한을 사용하여 디렉터리 소유권을 root 사용자로 변경하려면 다음 명령을 입력합니다.

# chown root directory-name
# chmod 755 directory-name

/etc/httpd/conf/httpd.conf 파일에서 다음 옵션을 구성할 수 있습니다.

FollowSymLinks
이 지시문은 기본적으로 활성화되어 있으며 디렉터리에 있는 심볼릭 링크를 따릅니다.
Indexes
이 지시문은 기본적으로 활성화되어 있습니다. 사용자가 서버에서 파일을 검색하지 못하도록 이 지시문을 비활성화합니다.
UserDir
이 지시문은 시스템에 사용자 계정이 있는지 확인할 수 있으므로 기본적으로 비활성화되어 있습니다. 사용자 디렉터리 검색 /root/ 가 아닌 모든 사용자 디렉터리를 검색하려면 UserDir이 활성화된 상태에서 UserDir비활성화된 root 지시문을 사용합니다. 비활성화된 계정 목록에 사용자를 추가하려면 UserDir disabled 줄에 공백으로 구분된 사용자 목록을 추가합니다.
ServerTokens

이 지시문은 클라이언트에 다시 전송되는 서버 응답 헤더 필드를 제어합니다. 다음 매개변수를 사용하여 정보를 사용자 지정할 수 있습니다.

ServerTokens Full

웹 서버 버전 번호, 서버 운영 체제 세부 정보, 설치된 Apache 모듈 등 사용 가능한 모든 정보를 제공합니다. 예를 들면 다음과 같습니다.

Apache/2.4.37 (Red Hat Enterprise Linux) MyMod/1.2
ServerTokens Full-Release

릴리스 버전과 함께 사용 가능한 모든 정보를 제공합니다. 예를 들면 다음과 같습니다.

Apache/2.4.37 (Red Hat Enterprise Linux) (Release 41.module+el8.5.0+11772+c8e0c271)
ServerTokens Prod / ServerTokens ProductOnly

웹 서버 이름을 제공합니다. 예를 들면 다음과 같습니다.

Apache
ServerTokens Major

웹 서버 주요 릴리스 버전을 제공합니다. 예를 들면 다음과 같습니다.

Apache/2
ServerTokens Minor

웹 서버 마이너 릴리스 버전을 제공합니다. 예를 들면 다음과 같습니다.

Apache/2.4
ServerTokens Min / ServerTokens Minimal

웹 서버 최소 릴리스 버전을 제공합니다. 예를 들면 다음과 같습니다.

Apache/2.4.37
ServerTokens OS

웹 서버 릴리스 버전과 운영 체제를 제공합니다. 예를 들면 다음과 같습니다.

Apache/2.4.37 (Red Hat Enterprise Linux)

ServerTokens Prod 옵션을 사용하여 공격자가 시스템에 대한 중요한 정보를 얻을 위험을 줄일 수 있습니다.

중요

IncludesNoExec 지시문을 제거하지 마십시오. 기본적으로 Server Side Includes (SSI) 모듈은 명령을 실행할 수 없습니다. 이를 변경하면 공격자가 시스템의 명령을 입력할 수 있습니다.

httpd 모듈 제거

httpd 모듈을 제거하여 HTTP 서버의 기능을 제한할 수 있습니다. 이 작업을 수행하려면 /etc/httpd/conf.modules.d/ 또는 /etc/httpd/conf.d/ 디렉터리에서 구성 파일을 편집합니다. 예를 들어 프록시 모듈을 제거하려면 다음을 수행합니다.

echo '# All proxy modules disabled' > /etc/httpd/conf.modules.d/00-proxy.conf

8.5.2. Nginx 서버 구성 보안

Nginx는 고성능 HTTP 및 프록시 서버입니다. 다음 구성 옵션을 사용하여 Nginx 구성을 강화할 수 있습니다.

절차

  • 버전 문자열을 비활성화하려면 server_tokens 구성 옵션을 수정합니다.

    server_tokens off;

    이 옵션을 사용하면 서버 버전 번호와 같은 추가 세부 정보가 표시되지 않습니다. 이 구성은 Nginx에서 제공하는 모든 요청에 서버 이름만 표시합니다. 예를 들면 다음과 같습니다.

    $ curl -sI http://localhost | grep Server
    Server: nginx
  • 특정 /etc/nginx/ conf 파일의 특정 알려진 웹 애플리케이션 취약점을 완화하는 보안 헤더를 추가합니다.

    • 예를 들어 X-Frame-Options 헤더 옵션은 도메인 외부의 모든 페이지를 거부하여 Nginx에서 제공하는 콘텐츠를 프레임하고 클릭재킹 공격을 완화합니다.

      add_header X-Frame-Options "SAMEORIGIN";
    • 예를 들어 x-content-type 헤더는 이전 브라우저의 MIME 유형 스니핑을 방지합니다.

      add_header X-Content-Type-Options nosniff;
    • 예를 들어 X-XSS-Protection 헤더는 XSS(Cross-Site Scripting) 필터링을 활성화하여 브라우저에서 Nginx에 의해 응답에 포함된 잠재적으로 악의적인 콘텐츠를 렌더링하지 못하도록 합니다.

      add_header X-XSS-Protection "1; mode=block";
  • 일반 대중에게 노출되는 서비스를 제한하고 자신이하는 것을 제한하고 방문자로부터 수락 할 수 있습니다. 예를 들면 다음과 같습니다.

    limit_except GET {
        allow 192.168.1.0/32;
        deny  all;
    }

    스니펫은 GETHEAD 를 제외한 모든 메서드에 대한 액세스를 제한합니다.

  • HTTP 메서드를 비활성화할 수 있습니다. 예를 들면 다음과 같습니다.

    # Allow GET, PUT, POST; return "405 Method Not Allowed" for all others.
    if ( $request_method !~ ^(GET|PUT|POST)$ ) {
        return 405;
    }
  • Nginx 웹 서버에서 제공하는 데이터를 보호하도록 SSL을 구성할 수 있으며 HTTPS를 통해서만 서비스를 제공하는 것이 좋습니다. 또한 Mozilla SSL 구성 생성기를 사용하여 Nginx 서버에서 SSL을 활성화하기 위한 보안 구성 프로파일을 생성할 수 있습니다. 생성된 구성을 사용하면 알려진 취약한 프로토콜(예: SSLv2 및 SSLv3), 암호 및 해시 알고리즘(예: 3DES 및 MD5)이 비활성화됩니다. SSL 서버 테스트를 사용하여 구성이 최신 보안 요구 사항을 충족하는지 확인할 수도 있습니다.