Blog chia sẻ về công nghệ ...
Published on

Kết hợp NGINX Rate Limiting và Fail2Ban để tự động chặn IP xấu

Authors

🛡️ 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

  1. Mô hình hoạt động
  2. Cấu hình rate limit NGINX
  3. Ghi log lỗi 503 vào file riêng
  4. Cấu hình Fail2Ban
  5. Kiểm thử và xác minh
  6. 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ử

  1. Restart dịch vụ:
sudo systemctl restart fail2ban
  1. Gửi nhiều request:
ab -n 50 -c 10 http://localhost/api/
  1. Kiểm tra IP có bị ban không:
sudo fail2ban-client status nginx-ratelimit

📚 Tài liệu tham khảo


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.