서버 운영 중 가장 자주 마주치는 보안 이벤트 중 하나가 브루트포스(무차별 대입) 공격입니다. 공격자는 자동화 도구를 이용해 짧은 시간 안에 수천 번의 로그인 시도를 반복하며, 이 흔적은 Nginx 액세스 로그에 그대로 남습니다.
Nginx의 기본 Combined Log Format에서 브루트포스는 다음과 같은 패턴으로 나타납니다.
`` 203.0.113.42 - - [10/May/2024:03:21:05 +0000] "POST /wp-login.php HTTP/1.1" 401 152 "-" "python-requests/2.28.0" 203.0.113.42 - - [10/May/2024:03:21:06 +0000] "POST /wp-login.php HTTP/1.1" 401 152 "-" "python-requests/2.28.0" 203.0.113.42 - - [10/May/2024:03:21:07 +0000] "POST /wp-login.php HTTP/1.1" 401 152 "-" "python-requests/2.28.0" `
주목해야 할 특징:
, curl, Nikto 등 자동화 도구`bash grep 'POST /wp-login.php' /var/log/nginx/access.log | grep ' 401 ' \ | awk '{print $1}' | sort | uniq -c | sort -rn | head -20 `
출력 예시:
` 3241 203.0.113.42 87 198.51.100.7 12 192.0.2.100 `
한 IP에서 수천 건이 나온다면 브루트포스로 판단할 수 있습니다.
`bash grep '203.0.113.42' /var/log/nginx/access.log \ | awk '{print $4}' | cut -d: -f1-3 | sort | uniq -c `
정상 사용자는 분당 수 건이지만, 봇은 분당 수백 건이 기록됩니다.
`bash grep -v 'Mozilla\|Chrome\|Safari\|Firefox' /var/log/nginx/access.log \ | awk '{print $12}' | sort | uniq -c | sort -rn | head -20 `
브루트포스 공격은 특정 경로에 집중됩니다.
| 경로 | 공격 유형 |
|---|---|
| ------ | ----------- |
/wp-login.php | WordPress 관리자 계정 탈취 |
/admin, /administrator | 관리자 패널 무단 접근 |
/api/auth, /api/login | API 인증 엔드포인트 공격 |
/xmlrpc.php | WordPress XML-RPC 악용 |
/.env, /config.php | 설정 파일 노출 시도 |
/etc/nginx/nginx.conf 또는 사이트 설정 파일에 추가:
`nginx geo $blocked_ip { default 0; 203.0.113.42 1; 198.51.100.7 1; }
server { if ($blocked_ip) { return 403; } } `
`nginx location = /wp-login.php { allow 192.168.1.0/24; deny all; } `
`nginx http { limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m; }
server { location = /wp-login.php { limit_req zone=login burst=3 nodelay; } } `
분당 5회를 초과하는 요청은 503으로 자동 차단됩니다.
/etc/fail2ban/filter.d/nginx-bruteforce.conf:
`ini [Definition] failregex = ^`
/etc/fail2ban/jail.local:
`ini [nginx-bruteforce] enabled = true filter = nginx-bruteforce logpath = /var/log/nginx/access.log maxretry = 10 findtime = 60 bantime = 3600 ``
1분 내 10회 이상 시도한 IP를 1시간 차단합니다.
커맨드라인 없이 로그 파일만 업로드하면 위 분석을 자동으로 수행합니다.
브루트포스 공격은 자동화 도구로 진행되기 때문에 로그에 매우 규칙적인 패턴을 남깁니다. 핵심은 같은 IP에서 짧은 시간 내 반복되는 고정 경로 요청을 탐지하는 것입니다. Nginx Rate Limiting과 Fail2Ban을 조합하면 대부분의 자동화 공격을 사전에 차단할 수 있습니다.