프로젝트 중 보안 설정 점검을 하다가,
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; 설정 덕분에
응답 헤더에 버전 정보가 보이지 않는 걸 확인했는데요.
재미있게도, 운영 서버는 이 설정을 따로 적용하지 않았는데도
처음부터 서버 버전이 노출되지 않고 있었습니다.
보통 아래와 같은 경우에 버전 정보가 숨겨지는 경우가 있다고 합니다.
- 이미 설정이 다른 곳(conf.d 파일 등)에 포함돼 있었을 수 있음
- 서버 앞단에 WAF나 로드밸런서가 있어서 헤더를 필터링하고 있을 수 있음
- nginx가 커스텀 빌드되어 헤더를 아예 출력하지 않게 구성됐을 가능성
이 경험을 통해, 보안 설정은 단순히 "설정했는지 여부"보다는
실제 서비스 구조 전반을 이해하고 있어야 정확히 판단할 수 있다는 걸 느꼈습니다.
마무리하며
server\_tokens off;
설정은 작지만, 보안에 있어 꽤 중요한 역할을 합니다.
보안 인증 대응뿐 아니라, 기본값 그대로 쓰는 습관을 되돌아보게 만든 작업이었습니다.
운영 환경에서는 구조나 구성에 따라 이미 적용되어 있을 수도 있지만,
내가 관리하는 환경에서 명시적으로 설정하는 습관은 꼭 들여두면 좋다고 생각합니다.
'개발이야기 > Etc.' 카테고리의 다른 글
React 모듈화, 왜 하고 언제 해야 할까? (실무 예시 포함) (0) | 2025.04.08 |
---|---|
SQL이란 무엇인가? SQL 이해하기 (0) | 2024.08.06 |
데이터베이스란 무엇인가? SQL 학습의 첫걸음 (0) | 2024.07.26 |
왜 SQL을 배워야 하는가? - 서론 (1) | 2024.07.23 |
프론트엔드 개발자가 SQL을 공부하는 이유 (0) | 2024.07.22 |