9.5. HTTP 서버 보안
9.5.1. httpd.conf의 보안 개선 사항
/etc/httpd/conf/httpd.conf
파일에서 보안 옵션을 구성하여 Apache HTTP 서버의 보안을 강화할 수 있습니다.
프로덕션에 저장하기 전에 항상 시스템에서 실행 중인 모든 스크립트가 올바르게 작동하는지 확인합니다.
스크립트 또는 공통 게이트웨이 인터페이스(CGI)가 포함된 디렉터리에 대한 쓰기 권한만 있으면 됩니다. 쓰기 권한이 있는 디렉터리 소유권을
root
로 변경하려면 다음 명령을 입력합니다.
# chown root <directory_name> # chmod 755 <directory_name>
/etc/httpd/conf/httpd.conf
파일에서 다음 옵션을 구성할 수 있습니다.
FollowSymLinks
- 이 지시문은 기본적으로 활성화되어 있으며 디렉터리의 심볼릭 링크를 따릅니다.
Indexes
- 이 지시문은 기본적으로 활성화되어 있습니다. 사용자가 서버에서 파일을 검색하지 못하도록 이 지시문을 비활성화합니다.
UserDir
-
이 지시문은 시스템에 사용자 계정이 있는지 확인할 수 있으므로 기본적으로 비활성화되어 있습니다.
/root/
이외의 모든 사용자 디렉터리 검색을 활성화하려면UserDir enabled
및UserDir disabled
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
9.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-type 스니핑을 방지합니다.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; }
스니펫은
GET
및HEAD
를 제외한 모든 메서드에 대한 액세스를 제한합니다.예를 들어 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 서버 테스트를 사용하여 구성이 최신 보안 요구 사항을 충족하는지 확인할 수도 있습니다.
추가 리소스