[nginx] 403 forbidden 에러

다연·2024년 12월 17일

문제상황

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 에러가 해결됐다

0개의 댓글