nginx 배포 중 악성 요청이 많이 들어와서 nginx.conf에 악성요청을 막는 코드를 작성했더니 403 forbidden 이 뜨며 접속이 안되기 시작했다...
현재 작성된 악성 요청을 차단하는 코드는 다음과 같았다
# 악성 IP 차단 설정
geo $bad_guys {
default 0;
66.240.205.34 1; # Shodan 스캐너
185.247.137.44 1; # InternetMeasurement 스캔
175.149.193.224 1; # Mozi 봇넷
80.82.77.202 1; # SSL/TLS 프로빙
109.205.183.151 1; # 악성 스캐너
59.127.188.139 1; # 악성 봇
45.83.64.195 1; # 악성 요청
}
# 악성 User-Agent 차단 설정
map $http_user_agent $bad_agent {
default 0;
"~*InternetMeasurement" 1;
"~*Mozi" 1;
"~*malware-hunter" 1;
"~*shodan" 1;
"~*censys" 1;
"~*LG-L160L" 1;
}
upstream vita_gunicorn {
server vita_gunicorn:8000;
}
upstream daphne {
server unix:/app/daphne_socket/daphne.sock;
}
server {
listen 80;
server_name api.vita.diannn.xyz;
# 악성 요청 차단
if ($bad_guys) {
return 403;
}
if ($bad_agent) {
return 403;
}
# 민감한 파일 접근 차단
location ~ /\.(env|git|ssh|aws|docker|vscode|config) {
deny all;
return 403;
}
# PHP 파일 접근 차단
location ~ \.php$ {
deny all;
return 403;
}
...
처음에는 이 코드 때문인줄 모르고 권한 문제를 해결하려고 이것저것 해봤는데 그대로여서 악성요청을 차단하는 코드들을 하나씩 주석처리하고 다시 실행해보니
user-agent를 차단하는 부분때문에 문제가 있었다
원인은 "~*Mozi" 1; 이 부분 때문이었는데
Mozi는 악성 봇으로 알려져 있으므로 차단 대상이 맞지만
~*Mozi는 대소문자를 무시하는 정규식이기때문에 Mozilla/5.0이라는 정상적인 User-Agent도 차단되었던 것이었다
따라서 Mozi만 정확히 차단하기 위해 "Mozi(?!lla)"로 수정했고 403 에러가 해결됐다