Linux 用 netstat 偵測 DDOS 攻擊
Linux 用 netstat 偵測 DDOS 攻擊
資料來源: https://www.opencli.com/linux/linux-netstat-detect-ddos
當主機回應很慢時,除了可能是因為系統的負荷過大,或者系統設定錯誤外,另一個可能性是遭受 DDOS 攻擊。
對於小規模 DDOS 攻擊, 使用 Linux 內建的工具偵測來源 IP 及阻擋可以達到一定的效果, 以下會示範用 netstat 及其他 Linux 內建指令,檢測系統是否遭受 DDOS 攻擊。
用 netstat 列出所有連線, 可以用以下指令:
netstat -an
以上指令列出相當多的連線, 我們先用 grep 過濾出我們想要的資訊, 然後用 sort 將 ip 排序, 例如我想查看 port 80 的連線, 並將 ip 排序:
netstat -an | grep :80 | sort
配合 awk, cut, sort, uniq 指令, 可以印出每個 ip 的連線數量, 並用連線數量排序, 以下會針對 ESTABLISHED 連線檢查:
netstat -ntu | grep ESTAB | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
針對 port 80 的連線, 將每個 ip 的連線數量印出並進行排序:
netstat -ntu | grep :80 | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
另一個有用的偵測方法, 是過濾出 SYN_REC 連線, 一般上 SYN_REC 的連線數量很低, 如果過高可能遭受攻擊, 以下指令可以列出當前 SYN_REC 連線數量:
netstat -np | grep SYN_REC | wc -l
當發現 SYN_REC 連線數量高時, 可以改用 “sort” 將 ip 排序, 而不是列出連線數:
netstat -np | grep SYN_REC | sort -u
如果連線數量很大, 可以這樣將每個 ip 只印出一次:
netstat -np | grep SYN_REC | awk '{print $5}' | awk -F: '{print $1}'
透過以上方法找到來源 ip 後, 例如 ip 是 x.x.x.x, 可以用 route 或 iptables 阻擋攻擊:
route: route delete x.x.x.x iptables: iptables -A INPUT -s x.x.x.x -j DROP