Hướng dẫn chặn IP truy cập vào máy chủ Linux bằng tường lửa iptables – biện pháp cơ bản chống brute-force, DDoS, bot quét lỗ hổng.
Chặn 1 IP đơn lẻ
# iptables -I INPUT -s 122.174.12.228 -j DROP
- -I INPUT: Chèn (Insert) vào đầu chain INPUT (ưu tiên cao nhất).
- -s 122.174.12.228: IP nguồn cần chặn.
- -j DROP: Hành động DROP (thả rác im lặng – không phản hồi). Thay bằng
REJECTđể gửi ICMP port unreachable.
Lưu ý bài gốc có lỗi in IP: 122.172.9.222 vs 122.174.12.228.
Chặn dải IP (CIDR)
# iptables -I INPUT -s 192.168.1.0/24 -j DROP
Chặn IP trên interface cụ thể
# iptables -I INPUT -i eth1 -s 122.174.12.228 -j DROP
Chặn IP cho port cụ thể (ví dụ: SSH port 22)
# iptables -I INPUT -p tcp --dport 22 -s 122.174.12.228 -j DROP
Tự động chặn nhiều IP từ file danh sách
Tạo file banned_IPs.cfg (mỗi dòng 1 IP/CIDR):
122.174.12.228
129.122.10.23
111.154.84.130
192.168.1.0/24
Script banned_IPs.sh:
#!/bin/bash
# Đọc từng dòng từ file, bỏ qua dòng trống và comment
while IFS= read -r ip || [[ -n "$ip" ]]; do
[[ -z "$ip" || "$ip" =~ ^# ]] && continue
iptables -I INPUT -s "$ip" -j DROP
done < banned_IPs.cfg
Cấp quyền và chạy:
# chmod +x banned_IPs.sh
# ./banned_IPs.sh
Xem danh sách rule đã chặn
# iptables -L INPUT -n -v --line-numbers | grep DROP
Xóa rule chặn (unban)
# iptables -D INPUT -s 122.174.12.228 -j DROP
# Hoặc xóa theo số dòng:
# iptables -L INPUT --line-numbers
# iptables -D INPUT 5
Lưu rule vĩnh viễn
# Debian/Ubuntu: iptables-save > /etc/iptables/rules.v4 (cần iptables-persistent)
# RHEL/CentOS: service iptables save hoặc iptables-save > /etc/sysconfig/iptables
Giải pháp tự động hóa hiện đại (Khuyến khích)
- fail2ban: Tự đọc log (SSH, Apache, Nginx, Postfix...), chặn IP vi phạm qua iptables/nftables. Cài:
sudo apt install fail2ban. - CrowdSec: Threat intelligence cộng đồng, agent nhẹ, quyết định chặn tập trung.
- UFW (Uncomplicated Firewall): Frontend dễ dùng cho iptables:
ufw deny from 1.2.3.4. - nftables: Thay thế iptables (Linux 3.13+), cú pháp thống nhất, hiệu năng tốt hơn.