본문 바로가기

리눅스

Nginx에서 특정 IP 주소를 차단하는 방법

반응형

Nginx에서 특정 IP 주소를 차단하는 방법

Nginx에서 특정 IP 주소(예: 190.97.237.68, 203.0.113.55)를 차단하면서 해당 IP의 요청이 로그(액세스 로그 또는 에러 로그)에 기록되지 않도록 설정하려면 access_log off와 deny 지시어를 조합하여 특정 IP에 대해 로깅을 비활성화할 수 있습니다.

Nginx 설정

sudo vim /etc/nginx/nginx.conf
### nginx.conf
user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    # 블랙리스트 정의
    geo $blocked {
        default 0;
        include /etc/nginx/blocked_ips.conf;
    }

    # 로그 기록 여부를 위한 매핑
    map $blocked $loggable {
        1 0;   # 차단된 IP → 로그 기록 안 함
        0 1;   # 정상 IP → 로그 기록 함
    }

    include /etc/nginx/conf.d/*.conf;
}

Nginx 가상 호스트 설정

sudo vim /etc/nginx/conf.d/default.conf
### default.conf
server {
    listen       80;
    server_name  localhost;

    root   /usr/share/nginx/html;
    index  index.html index.htm;
    
    # 블랙리스트면 로그 끄기, 아니면 main 포맷으로 기록
    access_log /var/log/nginx/host.access.log main if=$not_blocked;

    # 블랙리스트 먼저 처리
    if ($blocked) {
        #access_log off;	# 액세스 로그 기록 안 함
        return 444;		# Nginx 고유 코드: 연결 끊음 (로그 남지 않음)
    }

    location / {
        try_files $uri $uri/ =404;
    }

    error_page  404              /404.html;

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

IP 차단 설정

vim /etc/nginx/blocked_ips.conf
190.133.69.224  1;
190.97.237.68   1;
203.0.113.55    1;
198.51.100.23   1;

Nginx 설정 테스트

sudo nginx -t

Nginx 재시작

sudo systemctl restart nginx
728x90

차단 IP 추가

맨 아래에 추가

echo -e "157.230.40.53\t1;" | sudo tee -a /etc/nginx/blocked_ips.conf
더보기

---

기존 파일을 백업하면서 파일 맨 위에 차단 IP 추가

sudo sed -i.bak '1i 157.230.40.53\t1;' /etc/nginx/blocked_ips.conf

---

변경 내용 확인

colordiff /etc/nginx/blocked_ips.conf /etc/nginx/blocked_ips.conf.bak

Nginx 설정 유효성 검사

sudo nginx -t

reload 적용

sudo nginx -s reload

차단 IP 삭제

기존 파일을 백업하면서 차단 IP를 찾아 제거

sudo sed -i.bak -E '/^\s*157\.230\.40\.53\s+1;\s*$/d' /etc/nginx/blocked_ips.conf

변경 내용 확인

colordiff /etc/nginx/blocked_ips.conf /etc/nginx/blocked_ips.conf.bak

Nginx 설정 유효성 검사

sudo nginx -t

reload 적용

sudo nginx -s reload

 

728x90
반응형