nginx 악의적인 요청 탐지 및 보안 설정

AFDB·2024년 9월 14일

갑자기 nginx 로그에 나타난 에러 코드

이상한 요청 발견

  • 클라이언트가 존재하지 않는 경로로 POSTGET 요청을 보내왔고, 서버가 404 오류를 반환

  • 들어온 요청:

    • /hello.world?ADd+allow_url_include=1+ADd+auto_prepend_file=php://input
    • /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php
    • /vendor/phpunit/phpunit/Util/PHP/eval-stdin.php
    • /Core/Skin/Login.aspx
  • 분석:

    • PHP 및 PHPUnit의 취약점을 노린 악의적인 스캔 시도로 판단된다고 한다.
    • ASP.NET 웹 애플리케이션을 탐색하려는 시도도 발견

민감한 파일 접근 시도

  • 아래와 같은 숨김 파일 및 디렉토리에 대한 접근 시도 로그도 찍힘.

    • /.env
    • /.git/config
    • /favicon.ico

보안 설정

nginx 설정에서 PHP 및 숨김 파일에 대한 접근 차단

  • PHP 파일에 대한 외부 접근 차단:

    location ~ \.php$ {
        deny all;
    }

✅ Fail2Ban 설치 및 구성
1. Fail2Ban 설치

sudo apt-get update
sudo apt-get install fail2ban
  1. 커스텀 필터 생성
    /etc/fail2ban/filter.d/nginx-block.conf 파일 생성 및 다음 내용 추가
[Definition]
failregex = ^<HOST> -.*"(GET|POST).*(/\.env|/\.git/config).*HTTP.*"
  1. Jail 설정
    /etc/fail2ban/jail.local 파일에 다음 내용 추가
[nginx-block]
enabled = true
filter = nginx-block
action = iptables[name=NGINX-BLOCK, port=http, protocol=tcp]
logpath = /var/log/nginx/access.log
maxretry = 1
bantime = -1
# 1시간 차단의 경우 bantime = 3600
설명:
enabled = true: Jail 활성화
filter = nginx-block: 앞서 생성한 필터 사용
maxretry = 1: 1회 감지 시 즉시 차단
bantime = -1: 영구 차단
  1. Fail2Ban 서비스 재시작 및 상태 확인
sudo systemctl restart fail2ban
sudo systemctl status fail2ban
  1. Fail2Ban 동작 확인
sudo fail2ban-client status nginx-block

0개의 댓글