- Published on
Kết hợp NGINX Rate Limiting và Fail2Ban để tự động chặn IP xấu
- Authors
- Name
- Bạch Đăng Tuấn
- Occupation
- Kỹ sư công nghệ thông tin
- Zalo: 0934.01.07.04
🛡️ Kết hợp NGINX Rate Limiting và Fail2Ban để tự động chặn IP xấu
Bạn có thể kết hợp NGINX với Fail2Ban để tự động:
- Phát hiện các IP vượt quá giới hạn truy cập
- Ghi log lỗi trong NGINX (503 vì quá giới hạn)
- Fail2Ban đọc log, xác định IP vi phạm
- Chặn IP đó bằng iptables/firewalld trong vài phút
📑 Mục Lục
- Mô hình hoạt động
- Cấu hình rate limit NGINX
- Ghi log lỗi 503 vào file riêng
- Cấu hình Fail2Ban
- Kiểm thử và xác minh
- Tài liệu tham khảo
📦 Mô hình hoạt động
[Client xấu]
↓
Gửi > 10 req/s
↓
[NGINX] → trả lỗi 503 + ghi vào access.log
↓
[Fail2Ban] đọc log, thấy nhiều lỗi 503 từ 1 IP
↓
iptables DROP IP đó trong 10 phút
🔧 Bước 1: Cấu hình giới hạn trong NGINX
http {
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
server {
listen 80;
access_log /var/log/nginx/ratelimit.log main;
location /api/ {
limit_req zone=api_limit burst=5 nodelay;
proxy_pass http://localhost:3000;
}
}
}
✅ Mỗi IP vượt 10 request/giây sẽ bị trả lỗi
503
.
📝 Bước 2: Ghi log lỗi vào file riêng
Đảm bảo bạn có định nghĩa log format trong nginx.conf:
log_format main '$remote_addr - $status - $request_uri';
Tạo file log riêng cho lỗi giới hạn:
sudo touch /var/log/nginx/ratelimit.log
sudo chmod 644 /var/log/nginx/ratelimit.log
🚓 Bước 3: Cấu hình Fail2Ban
1. Tạo file jail local:
# /etc/fail2ban/jail.local
[nginx-ratelimit]
enabled = true
port = http,https
filter = nginx-ratelimit
logpath = /var/log/nginx/ratelimit.log
maxretry = 5
findtime = 60
bantime = 600
2. Tạo filter custom:
sudo nano /etc/fail2ban/filter.d/nginx-ratelimit.conf
Nội dung:
[Definition]
failregex = ^<HOST> - 503 -
🔬 Bước 4: Kiểm thử
- Restart dịch vụ:
sudo systemctl restart fail2ban
- Gửi nhiều request:
ab -n 50 -c 10 http://localhost/api/
- Kiểm tra IP có bị ban không:
sudo fail2ban-client status nginx-ratelimit
📚 Tài liệu tham khảo
- https://nginx.org/en/docs/http/ngx_http_limit_req_module.html
- https://www.fail2ban.org/wiki/index.php/Main_Page
- https://www.digitalocean.com/community/tutorials/how-to-protect-nginx-with-fail2ban-on-ubuntu
✅ Tóm lại:
Kết hợp NGINX + Fail2Ban giúp bạn tự động phát hiện IP "phá hoại" – không chỉ giới hạn truy cập mà còn chặn IP hoàn toàn tạm thời, giúp bảo vệ API và tài nguyên hệ thống một cách thông minh.