보안 강화 (Hardening)
Rate Limiting과 Fail2ban을 통해 무차별 대입 공격 및 DDoS 공격을 방어합니다.
Rate Limiting
요청 속도를 제한하여 과도한 트래픽으로부터 서버를 보호합니다.
설정 옵션
| 옵션 | 설명 | 기본값 |
|---|---|---|
| 초당 요청 수 (RPS) | 허용되는 초당 최대 요청 | 10 |
| 버스트 크기 | 순간 트래픽 허용량 | 20 |
| 제한 방식 | IP, URI, IP+URI | IP |
| 응답 코드 | 제한 초과 시 응답 | 429 |
제한 방식
| 방식 | 설명 | 사용 시기 |
|---|---|---|
| IP 기반 | 클라이언트 IP별 제한 | 일반적인 사용 |
| URI 기반 | 요청 경로별 제한 | API 엔드포인트 보호 |
| IP+URI | IP와 URI 조합 | 세밀한 제어 |
화이트리스트 IP
Rate Limiting을 우회하는 IP를 설정합니다.
- 신뢰할 수 있는 내부 IP
- 모니터링 시스템 IP
- 파트너사 IP
Fail2ban 통합
실패한 요청을 기반으로 자동으로 IP를 차단합니다.
설정 옵션
| 옵션 | 설명 | 기본값 |
|---|---|---|
| 최대 재시도 | 차단까지 허용 실패 횟수 | 5 |
| 탐지 시간 | 실패 집계 기간 | 600초 |
| 차단 시간 | IP 차단 유지 시간 | 3600초 |
| 트리거 상태 코드 | 실패로 간주할 상태 코드 | 401, 403 |
동작 방식
- 클라이언트가 설정된 상태 코드의 응답을 받음
- 탐지 시간 내에 실패 횟수 집계
- 최대 재시도 초과 시 자동 차단
- 차단 시간 후 자동 해제
차단 유형
| 유형 | 설명 |
|---|---|
| 임시 차단 | 설정된 시간 후 자동 해제 |
| 영구 차단 | 수동 해제 필요 |
IP 차단 관리
차단된 IP 목록
- 현재 차단된 모든 IP 조회
- 차단 소스 (Fail2ban, WAF, 수동)
- 차단 시간 및 만료 시간
- 차단 사유
수동 IP 차단
- 개별 IP 또는 CIDR 범위 차단
- 영구 차단 옵션
- 차단 메모 기록
IP 차단 이력
모든 차단/해제 이벤트가 기록됩니다.
| 필드 | 설명 |
|---|---|
| 시간 | 이벤트 발생 시간 |
| IP | 대상 IP 주소 |
| 액션 | ban 또는 unban |
| 소스 | fail2ban, waf_auto_ban, manual, api, expired |
| 사유 | 차단 사유 |
차단 통계
- 총 차단 수
- 소스별 차단 분포
- 시간대별 차단 추이
- 특정 IP의 차단 이력
URI 차단
특정 URI 패턴에 대한 접근을 차단합니다.
호스트별 URI 차단
각 프록시 호스트별로 독립적인 URI 차단 규칙을 설정합니다.
- 정규식 패턴 지원
- 와일드카드 지원
- 우선순위 설정
전역 URI 차단
모든 호스트에 공통으로 적용되는 URI 차단 규칙입니다.
- 보안 취약점 경로 차단
- 관리자 페이지 보호
- 민감한 파일 접근 차단
URI 차단 예시
# WordPress 관리자 보호
/wp-admin/*
/wp-login.php
# 민감한 파일 차단
/.env
/.git/*
/config/*
# API 엔드포인트 보호
/api/internal/*
Exploit 차단
일반적인 공격 패턴을 자동으로 차단합니다.
규칙은 카테고리별로 묶여 있으며, 카테고리/규칙 단위로 켜고 끌 수 있습니다.
차단 카테고리
| 카테고리 | 패턴 예시 |
|---|---|
| SQL Injection | UNION SELECT, ' OR '1'='1 |
| XSS / Code Injection | <script>, javascript: |
| Remote File Inclusion (RFI) | http://, php:// 등 원격 포함 |
| Path Traversal | ../, ..%2f |
| Scanner / Tool Detection | 알려진 스캐너/공격 도구 탐지 |
| HTTP Method | 위험한 HTTP 메서드 차단 |
특정 URI에서 오탐이 발생하면, 규칙별로 URI 범위를 지정한 예외(URI-scoped exception)를 추가해 해당 경로에서만 규칙을 우회시킬 수 있습니다.
고급 설정 보안
위험한 지시어 차단
Nginx 고급 설정에서 보안상 위험한 지시어를 차단합니다.
load_module- 외부 모듈 로드lua_*- Lua 스크립트 실행perl_*- Perl 스크립트 실행js_*- JavaScript 실행proxy_pass내 쉘 명령어
설정 검증
- Nginx 설정 문법 검사
- 보안 취약점 패턴 탐지
- 위험한 설정 경고
설정 자동 롤백 (Config Rollback)
Nginx 설정 변경 시 안전하게 적용하기 위한 자동 롤백 메커니즘을 제공합니다.
동작 방식
- 백업 생성: 설정 변경 전 기존 설정 파일을 자동 백업
- 새 설정 생성: 변경된 설정으로 새로운 Nginx 설정 파일 생성
- 설정 테스트:
nginx -t로 문법 및 유효성 검사 - 조건부 적용: 테스트 통과 시에만
nginx -s reload실행 - 자동 롤백: 테스트 실패 시 백업된 설정으로 즉시 복원
롤백 대상
| 파일 | 설명 |
|---|---|
| 도메인.conf | 프록시 호스트 설정 파일 |
| host_.conf | WAF 설정 파일 (ModSecurity) |
| banned_ips.conf | IP 차단 목록 |
| default.conf | 기본 서버 설정 |
안전 보장
- Atomic Write: 임시 파일 → fsync → rename으로 중간 상태 없는 파일 쓰기
- Global Mutex: 모든 Nginx 작업은 뮤텍스로 직렬화되어 동시 변경 방지
- Fail-Safe:
nginx -t실패 시 Nginx reload 절대 실행하지 않음
보안 헤더
보안 헤더 프리셋 (Security Header Presets)
보안 수준에 따라 미리 정의된 보안 헤더 프리셋을 제공합니다.
| 프리셋 | 보안 수준 | 설명 |
|---|---|---|
| Strict | 최고 | HSTS preload 포함, CSP 제한적, X-Frame-Options DENY |
| Moderate | 균형 | HSTS includeSubdomains, SAMEORIGIN, 적절한 CSP |
| Relaxed | 호환성 | 기본적인 보안 헤더만, 호환성 우선 |
Strict 프리셋
- HSTS: 1년, includeSubDomains, preload 활성화
- X-Frame-Options: DENY
- Content-Security-Policy: self 소스만 허용
- Permissions-Policy: 카메라, 마이크 등 비활성화
Moderate 프리셋
- HSTS: 1년, includeSubDomains, preload 비활성화
- X-Frame-Options: SAMEORIGIN
- Referrer-Policy: strict-origin-when-cross-origin
Relaxed 프리셋
- HSTS: 1일, includeSubDomains 비활성화
- X-Frame-Options: SAMEORIGIN
- Referrer-Policy: no-referrer-when-downgrade
커스텀 헤더
프리셋 외에도 개별 헤더를 커스텀할 수 있습니다.
HSTS (HTTP Strict Transport Security)
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
콘텐츠 보안
| 헤더 | 설명 |
|---|---|
| X-Content-Type-Options | nosniff - MIME 스니핑 방지 |
| X-Frame-Options | DENY 또는 SAMEORIGIN - 클릭재킹 방지 |
| X-XSS-Protection | 1; mode=block - XSS 필터 |
| Referrer-Policy | strict-origin-when-cross-origin |
| Permissions-Policy | 브라우저 기능 접근 제어 |
Content-Security-Policy
- 스크립트 소스 제한
- 스타일 소스 제한
- 프레임 소스 제한
- 폼 액션 제한
TLS 보안
프로토콜 버전
- TLS 1.2 이상만 허용
- SSL 2.0/3.0, TLS 1.0/1.1 비활성화
암호화 스위트
- 강력한 암호화 알고리즘만 허용
- 취약한 암호화 비활성화
- Forward Secrecy 지원
OCSP Stapling
- 인증서 상태 확인 최적화
- 클라이언트 프라이버시 보호