當我們的 Linux 服務器受到少量攻擊時,這時候我們可以使用 iptables 來手動封禁這些攻擊者的IP。
如果攻擊比較大時,有時我們根本無法響應過來,iptables 基本也就無能為力了,那我們就只能與機房聯系讓他們想想辦法了。
對於少量攻擊處理的步驟應該是:獲取IP --> 封IP
獲取攻擊者 IP
通過 netstat 獲取
如果攻擊者攻擊的是你的 Web 服務的話,默認是80端口,我們就可以使用下面的代碼!
如果攻擊的不是80端口的話,將下面的兩個數字80改為你被攻擊的端口即可!
如果你需要顯示多條記錄,請自己手動將 head -n20
調大即可
netstat -anlp|grep 80|grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n20 | netstat -ant |awk '/:80/{split($5,ip,":");++A[ip[1]]}END{for(i in A) print A[i],i}' |sort -rn|head -n20
通過 tcpdump 獲取
在使用之前,請確保您的系統已經安裝了 tcpdump 。
Debian / Ubuntu 系列快速安裝如下
apt-get install -y tcpdump
安裝后,使用下面的代碼即可。
需要注意的是, -i eth0
指的是你主網卡,如果你是 OpenVZ 的虛擬機的話,就改成您的網卡名venet0
同樣你需要設置的是, port 80
設置你被攻擊的端口, -c 1000
指 tcpdump 需要統計的記錄數,他會在達到這個數之后顯示結果。 head -20
設置你要顯示的記錄條數
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr |head -20
封禁 IP
通過上面的步驟,我們已經知道是誰在攻擊我們了,現在我們就可以將他們拉入 iptables
禁止他們連接到服務器了。
封禁單個 IP
iptables -I INPUT -s 211.1.2.1 -j DROP
封禁一個 IP 段
iptables -I INPUT -s 211.1.2.0/16 -j DROP
如果需要更多關於 iptables 的教程,由於不在本帖需要講述的內容當中,請自行 Google 答案。