Hướng dẫn sử dụng psad (Port Scan Attack Detector) phối hợp iptables để phát hiện quét cổng, traffic đáng ngờ và tự động chặn IP tấn công DoS/DDoS.
⚠️ CẢNH BÁO: psad mạnh nhưng nguy hiểm nếu cấu hình sai – có thể chặn chính bạn hoặc traffic hợp pháp. Test kỹ trên môi trường staging trước. Hiện nay, fail2ban phổ biến hơn cho application-layer (SSH, HTTP), còn psad chuyên về network-layer (port scan, SYN flood).
Cài đặt psad
# Ubuntu/Debian: sudo apt install psad
# RHEL/CentOS/Fedora: sudo dnf install psad (có thể cần EPEL)
# Nếu không có trong repo: tải source từ https://cipherdyne.org/psad/download/
Cấu hình syslog cho psad (Ubuntu/Debian)
Mở /etc/rsyslog.conf (hoặc /etc/syslog.conf trên hệ cũ), thêm:
kern.info |/var/lib/psad/psadfifo
Hoặc lệnh nhanh:
# echo -e 'kern.info\t|/var/lib/psad/psadfifo' >> /etc/rsyslog.conf
Khởi động lại syslog:
# systemctl restart rsyslog
# systemctl restart klogd # nếu có
Tạo danh sách IP an toàn (Whitelist) – BẮT BUỘC
# vim /etc/psad/auto_whitelist
# hoặc file tùy chỉnh:
# vim /home/user/safeiplist.cfg
# Nội dung:
127.0.0.0/8
192.168.0.0/16
10.0.0.0/8
YOUR_OFFICE_IP/32
YOUR_VPN_IP/32
Script cấu hình iptables tích hợp psad (tham khảo)
#!/bin/bash
WORKDIR="/home/user"
SAFEIPLIST="safeiplist.cfg"
INTERVAL=5 # giây
HITCOUNT=5 # số gói tin
cd $WORKDIR
iptables -F
if [ -f $SAFEIPLIST ]; then
IPS=$(grep -Ev "^#" $SAFEIPLIST)
for i in $IPS; do
iptables -A INPUT -s $i -j ACCEPT
done
fi
# Log kết nối mới vượt ngưỡng
iptables -A INPUT -m state --state NEW -m recent --set
iptables -A INPUT -m state --state NEW -m recent --update --seconds $INTERVAL --hitcount $HITCOUNT -j LOG --log-prefix "PSAD: "
# Lưu rule
iptables-save > /etc/iptables/rules.v4
Cấp quyền và chạy:
# chmod +x ipblock.sh
# ./ipblock.sh
Cấu hình psad (/etc/psad/psad.conf)
EMAIL_ADDRESSES admin@yourdomain.com;
HOSTNAME yourserver.yourdomain.com;
HOME_NET NOT_USED; # Nếu chỉ 1 interface
IGNORE_PORTS udp/80,udp/8080,udp/53; # Bỏ qua DNS, HTTP UDP noise
ENABLE_AUTO_IDS Y; # Tự động chặn IP nghi ngờ
AUTO_IDS_DANGER_LEVEL 3; # Mức nguy hiểm tự chặn (1-5)
AUTO_BLOCK_TIMEOUT 3600; # Thời gian chặn (giây) – 1 giờ
IPT_SYSLOG_FILE /var/log/kern.log;
Khởi động và kiểm tra
# systemctl enable --now psad
# psad -S # Xem báo cáo trạng thái
# psad -F # Xóa IP bị chặn tự động (flush)
So sánh psad vs fail2ban
| Đặc điểm | psad | fail2ban |
|---|---|---|
| Phân tích | iptables log (kernel/network layer) | Application log (auth.log, nginx access.log...) |
| Phát hiện | Port scan, SYN flood, OS fingerprint | Failed login, brute force, 404 scan, custom regex |
| Hành động | iptables block (kernel) | iptables, nftables, firewall-cmd, route, custom action |
| Cấu hình | Phức tạp, rủi ro cao | Module-based, dễ tùy biến, an toàn hơn |
Khuyến nghị hiện đại
- Dùng fail2ban cho SSH, HTTP, SMTP, Docker...
- Dùng CrowdSec (thay thế fail2ban thế hệ mới – community threat intelligence).
- Dùng Cloudflare/WAF cho DDoS layer 7.
- Chỉ dùng psad nếu cần phát hiện port scan/network anomaly chuyên sâu.