본문 바로가기
개발이야기/Etc.

nginx 서버 버전 정보 노출, 왜 막아야 할까?

by hyung12 2025. 4. 9.

프로젝트 중 보안 설정 점검을 하다가,
nginx 응답 헤더에 서버 버전 정보가 그대로 노출되고 있는 걸 확인하게 됐습니다.

 

Server: nginx/1.24.0

 

처음엔 단순한 정보처럼 느껴졌지만,

이게 실제로는 보안상 취약점이 될 수 있는 정보라는 걸 알게 됐고,

 

ISMS 대응 항목 중 하나로 이 부분을 수정하게 되었습니다.

해당 설정은 ISMS 대응 항목 중 하나로,

 

서버 버전 정보를 숨김으로써 보안 취약점 노출 가능성을 줄이고,
인증 기준을 충족하기 위한 목적이 있었습니다.

 


 

nginx 서버 버전 정보, 왜 숨겨야 할까요?

nginx는 기본 설정 상태에서 위처럼 서버 버전까지 그대로 노출합니다.

이런 정보는 공격자 입장에서 보면 꽤 유용한 힌트가 될 수 있습니다.

 

예를 들어, nginx 1.20 버전에 알려진 취약점이 있다면,
그 버전 정보를 기반으로 공격 시도를 해볼 수 있기 때문이죠.

 

보안 인증에서도 서버 버전 노출은 감점 요인 또는 수정 권고 대상이 되곤 합니다.

 


 

해결 방법은 간단합니다.

nginx 설정에서 server_tokens off; 한 줄만 추가하면 됩니다.
이 설정은 nginx가 응답 시 서버 버전 정보를 헤더에 포함시키지 않도록 하는 옵션이에요.

 

http {
  include       /etc/nginx/mime.types;
  default_type  application/octet-stream;
  server_tokens off;  # 서버 버전 정보 노출 방지
}

 

설정을 추가한 후에는 아래 명령어로 문법을 체크하고, 적용해줍니다.

nginx -t       # 설정 문법 확인
sudo nginx -s reload  # 설정 반영

 

보통 운영 환경에서는 reload는 인프라팀이나 운영 자동화 스크립트에서 처리합니다.

 


 

설정이 적용되면 어떻게 보일까요?

 

개발자 도구 > 네트워크 > 응답 헤더에서 확인해보면,

 

이렇게 버전 정보 없이 nginx만 뜨게 됩니다.
또는 환경에 따라 Server: 헤더 자체가 아예 사라지는 경우도 있어요.

 


 

 

설정을 적용하면서 테스트 서버에서는 server_tokens off; 설정 덕분에
응답 헤더에 버전 정보가 보이지 않는 걸 확인했는데요.

 

재미있게도, 운영 서버는 이 설정을 따로 적용하지 않았는데도
처음부터 서버 버전이 노출되지 않고 있었습니다.

 

보통 아래와 같은 경우에 버전 정보가 숨겨지는 경우가 있다고 합니다.

 

  1. 이미 설정이 다른 곳(conf.d 파일 등)에 포함돼 있었을 수 있음
  2. 서버 앞단에 WAF나 로드밸런서가 있어서 헤더를 필터링하고 있을 수 있음
  3. nginx가 커스텀 빌드되어 헤더를 아예 출력하지 않게 구성됐을 가능성

 

이 경험을 통해, 보안 설정은 단순히 "설정했는지 여부"보다는
실제 서비스 구조 전반을 이해하고 있어야 정확히 판단할 수 있다는 걸 느꼈습니다.

 


 

 

마무리하며

server\_tokens off; 설정은 작지만, 보안에 있어 꽤 중요한 역할을 합니다.

 

보안 인증 대응뿐 아니라, 기본값 그대로 쓰는 습관을 되돌아보게 만든 작업이었습니다.

 

운영 환경에서는 구조나 구성에 따라 이미 적용되어 있을 수도 있지만,

내가 관리하는 환경에서 명시적으로 설정하는 습관은 꼭 들여두면 좋다고 생각합니다.

 

 

 

반응형