리눅스
Nginx에서 특정 IP 주소를 차단하는 방법
변군이글루
2025. 9. 17. 09:20
반응형
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
반응형