Computer >> Hướng Dẫn Máy Tính >  >> Điện Thoại Thông Minh >> Linux

Cách phát hiện và chặn tấn công DDoS/DoS trong Linux với psad

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ểmpsadfail2ban
Phân tíchiptables log (kernel/network layer)Application log (auth.log, nginx access.log...)
Phát hiệnPort scan, SYN flood, OS fingerprintFailed login, brute force, 404 scan, custom regex
Hành độngiptables block (kernel)iptables, nftables, firewall-cmd, route, custom action
Cấu hìnhPhức tạp, rủi ro caoModule-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.