일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- golang
- 티스토리챌린지
- kotlin coroutine
- kotlin querydsl
- go
- AWS EKS
- Kubernetes
- Elasticsearch
- 공부
- aws
- tucker의 go 언어 프로그래밍
- Spring
- Java
- 오블완
- APM
- kotlin
- PETERICA
- CKA 기출문제
- CloudWatch
- mysql 튜닝
- 정보처리기사 실기 기출문제
- 기록으로 실력을 쌓자
- minikube
- 코틀린 코루틴의 정석
- AI
- docker
- Pinpoint
- CKA
- Linux
- 정보처리기사실기 기출문제
- Today
- Total
피터의 개발이야기
[Nginx] NGINX 보안 강화를 위한 기본 설정 본문
ㅁ 들어가며
회사에서 보안검수를 수행하는데, 본 프로그램에 대한 사항보다 nginx에 대한 점검사항이 많았다. Nginx의 보안 강화를 위한 기본적인 설정에 대해서 잘 모르고 있었다. 보안은 웹 서버를 안전하게 운영하기 위해 필수적이다. 이 글에서는 Nginx 보안을 강화하기 위한 주요 설정 사항들을 정리해 보았다.
ㅁ 보안 체크리스트
ㅇ Nginx 버전 정보 숨기기 (server_tokens off;)
ㅇ 보안 헤더 추가 (X-Frame-Options, XSS Protection 등)
ㅇ 불필요한 HTTP 메서드 차단 (limit_except GET POST)
ㅇ 디렉토리 리스팅 비활성화 (autoindex off;)
ㅇ 파일 업로드 크기 제한 (client_max_body_size 10M;)
ㅇ 민감한 파일 접근 차단 (location ~* /\. { deny all; })
ㅇ SSL/TLS 적용 및 강력한 암호화 설정 (ssl_protocols TLSv1.2 TLSv1.3;)
ㅇ 요청 속도 제한 (limit_req_zone)
ㅇ 로그 분석 및 모니터링 (access_log, error_log)
ㅁ Nginx 버전 정보 숨기기
server_tokens off;
ㅇ 기본적으로 Nginx는 에러 페이지와 응답 헤더에서 버전 정보를 노출함.
ㅇ 공격자가 서버 정보를 쉽게 알 수 있으므로 버전 정보를 숨겨야 함.
ㅇ nginx.conf에 적용하면 Server: nginx 헤더에서 버전 정보가 제거됨.
ㅁ 보안 헤더 추가 (Strict-Transport-Security, X-Frame-Options, XSS Protection)
add_header X-Frame-Options DENY;
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options nosniff;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
ㅇ 웹 보안 강화를 위해 주요 HTTP 헤더를 추가해야 함.
ㅇ nginx.conf에 적용하면 브라우저가 보안 정책을 준수하도록 강제할 수 있음.
ㅁ 불필요한 HTTP 메서드 차단 (PUT, DELETE 등)
server {
location / {
limit_except GET POST {
deny all;
}
}
}
ㅇ 위 설정을 적용하면 GET과 POST 이외의 모든 요청이 차단됨.
ㅇ 일반적으로 GET, POST만 허용하면 충분함. 기본적으로 PUT, DELETE 같은 메서드는 차단하는 것이 좋음.
ㅁ 디렉토리 리스팅 비활성화
autoindex off;
ㅇ 위 설정을 적용하면 Nginx가 디렉토리 목록을 표시하지 않음.
ㅇ 디렉토리 목록이 노출되면 민감한 파일이 유출될 수 있음.
ㅁ 파일 업로드 크기 제한
client_max_body_size 10M;
ㅇ 위 설정을 적용하면 최대 10MB까지만 업로드 가능함.
ㅇ 악성 파일을 무분별하게 업로드하지 못하도록 크기를 제한해야 함.
ㅁ 특정 파일 접근 차단 (.git, .env 등 민감한 파일 보호)
location ~* /\. {
deny all;
access_log off;
log_not_found off;
}
ㅇ 위 설정을 적용하면 .git, .env, .htpasswd 같은 파일에 직접 접근할 수 없음.
ㅇ .git, .htpasswd, .env 같은 파일이 노출되면 보안 취약점이 발생할 수 있음.
ㅁ SSL/TLS 설정 강화 (HTTPS 적용)
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/example.com.crt;
ssl_certificate_key /etc/nginx/ssl/example.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
}
ㅇ TLS 1.0, 1.1은 보안 취약점이 존재하므로 비활성화하는 것이 좋음.
ㅇ HTTPS를 사용하여 데이터 암호화를 강화해야 함.
ㅇ Let’s Encrypt 무료 SSL 인증서를 적용하는 것도 좋은 방법.
ㅁ 요청 속도 제한 (Rate Limiting)
limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;
server {
location /login {
limit_req zone=one burst=10 nodelay;
}
}
ㅇ 위 설정을 적용하면 같은 IP에서 초당 5개 이상의 요청을 보내면 제한됨.
ㅇ DDoS 공격 및 무차별 대입 공격을 방지하려면 요청 속도를 제한해야 함.
ㅇ 특히 로그인 페이지(/login) 같은 민감한 경로에 적용하면 보안 강화 가능.
ㅁ 로그 설정 및 모니터링 (보안 로그 분석)
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log warn;
ㅇ 로그를 분석하면 보안 위협을 감지할 수 있음.
ㅇ 로그는 /var/log/nginx/access.log, /var/log/nginx/error.log에 저장됨.
ㅇ 공격 패턴을 감지하려면 로그를 모니터링하는 것이 중요함.
ㅇ fail2ban 같은 도구를 활용하면 자동으로 악성 IP를 차단할 수도 있음.
ㅁ 함께 보면 좋은 사이트
ㅇ AI가 알려주는 Nginx - 서버 관리자를 위한 필수 가이드
ㄴ 4.1 Nginx 보안 강화를 위한 기본 설정
'DevOps > nginx' 카테고리의 다른 글
[Nginx] Nginx 가상 호스팅 설정 (0) | 2025.03.20 |
---|---|
[Nginx] Nginx 설정을 외부 파일로 관리하는 효율적인 방법 (0) | 2025.03.19 |
[Nginx] Nginx의 기본 이해와 주요 기능 (0) | 2025.03.18 |
[Nginx] NGINX으로 HLS(HTTP Live Streaming) 스트리밍 캐싱설정 (0) | 2025.03.14 |
[Nginx] NGINX에서 정적 파일 캐시 설정하는 방법 (0) | 2025.03.11 |