[nginx] 서버 응답에서 nginx 버전 정보 감추기

해킹을 하기 위해서 가장 먼저 하는 시도가 접속하는 서비스의 종류와 버전를 알아내는 것입니다. 그래야 해당 버전의 보안 취약점을 파고들 수 있기 때문입니다.

nginx는 기본 설정으로 웹 응답시 nginx의 서버 버전 정보를 함께 출력합니다.

웹서버 정보는 curl로 확인할 수 있습니다. "I" 옵션은 서버 정보만을 가져오는 옵션입니다.

curl -I https://apost.dev

표준적인 nginx의 서버 응답 정보는 다음과 같습니다. 운영체제, 웹서버 종류, 버전 정보를 알 수 있습니다.

HTTP/1.1 200 OK
Server: nginx/1.18.0 (Ubuntu)
Date: Sat, 06 Jan 2024 07:45:51 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 38672
Connection: keep-alive
X-Powered-By: Express
Cache-Control: public, max-age=0
ETag: W/"9710-dLMY+l6+ubFY8HqiCmIFooSztBI"
Vary: Accept-Encoding

버전 정보와 운영체제를 감추려면 nginx 환경 설정 파일을 수정해야 합니다. 편집기로 열어서 nginx 환경 설정 값을 수정해야 합니다.

vi /etc/nginx/nginx.conf

환경 설정 값은 "server_token off"입니다. 값을 "off"로 설정해야 하고, nginx 기본 설정으로는 해당 설정 값이 코멘트 처리되어 있습니다. 줄 앞의 # 표시를 지우고 저장합니다.

nginx를 재 기동합니다.

sudo nginx -s reload

curl로 다시 접속해서 확인하면 서버 정보에서 버전과 운영체제 정보가 보이지 않게 됩니다.

HTTP/1.1 200 OK
Server: nginx
Date: Sat, 06 Jan 2024 08:12:35 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 38672
Connection: keep-alive
X-Powered-By: Express
Cache-Control: public, max-age=0
ETag: W/"9710-dLMY+l6+ubFY8HqiCmIFooSztBI"
Vary: Accept-Encoding

nginx로 웹서버를 구성할 때 보안을 위해 기본 적용하는 환경 값입니다.