用 iptables 屏蔽來自某個國家的 IP
星期六我們一位客戶受到攻擊,我們的網絡監測顯示有連續6小時的巨大異常流量,我們立即聯系了客戶,沒有得到回應,我們修改和限制了客戶的 VPS,使得個別 VPS 受攻擊不會對整個服務器和其他 VPS 用戶造成任何影響,我們一直保持這個 VPS 為開通狀態(盡管一直受攻擊),攻擊又持續了24小時,星期天攻擊仍在繼續,我們忍無可忍,但是仍然無法聯系到客戶,我們向客戶網站的另一負責人詢問是否需要我們介入來幫助解決,這位負責人答應后我們立即投入到與 DDoS 的戰斗中(我們動態掃描屏蔽壞 IP,現在客戶網站已恢復。整個過程很有意思,以后有時間再寫一篇博客來描述)。登錄到客戶 VPS 第一件事情就是查當前連接和 IP,來自中國的大量 IP 不斷侵占80端口,典型的 DDos. 所以第一件事是切斷攻擊源,既然攻擊只攻80端口,那有很多辦法可以切斷,直接關閉網站服務器、直接用防火墻/iptables 切斷80端口或者關閉所有連接、把 VPS 網絡關掉、換一個 IP,?,等等。因為攻擊源在國內,所以 VPSee 決定切斷來自國內的所有訪問,這樣看上去網站好像是被墻了而不是被攻擊了,有助于維護客戶網站的光輝形象。那么如何屏蔽來自某個特定國家的 IP 呢?
方法很容易,先到?IPdeny 下載以國家代碼編制好的 IP 地址列表,比如下載 cn.zone:
# wget http://www.ipdeny.com/ipblocks/data/countries/cn.zone
有了國家的所有 IP 地址,要想屏蔽這些 IP 就很容易了,直接寫個腳本逐行讀取 cn.zone 文件并加入到 iptables 中:
#!/bin/bash
# Block traffic from a specific country
# written by vpsee.com
COUNTRY="cn"
IPTABLES=/sbin/iptables
EGREP=/bin/egrep
if [ "$(id -u)" != "0" ]; then
echo "you must be root" 1>&2
exit 1
fi
resetrules() {
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F
$IPTABLES -X
}
resetrules
for c in $COUNTRY
do
country_file=$c.zone
IPS=$($EGREP -v "^#|^$" $country_file)
for ip in $IPS
do
echo "blocking $ip"
$IPTABLES -A INPUT -s $ip -j DROP
done
done
exit 0
好 IP 和壞 IP 都被屏蔽掉了,這種辦法當然不高明,屏蔽 IP 也沒有解決被攻擊的問題,但是是解決問題的第一步,屏蔽了攻擊源以后我們才有帶寬、時間和心情去檢查 VPS 的安全問題。公布一份我們客戶被攻擊的網絡流量圖,在18點到0點所有帶寬都被攻擊流量占用,這時候客戶無法登錄 VPS,訪問者也無法訪問網站:
轉載自:http://www.vpsee.com/2010/08/block-traffic-from-a-specific-country-using-iptables/
>>轉載請注明出處:VPS偵探 本文鏈接地址:http://www.0794baidu.com/security/iptables-block-countries-ip.html











@Masterfan, -A 換成 -D 就行了,這是基本知識,可以去
http://www.0794baidu.com/security/linux-iptables.html 查看iptables教程
請教下軍哥,如何反向操作,也就是通過腳本解除添加的iptables規則?
@星空IT, 這個腳本會清空原來的所有iptables規則并屏蔽中國ip段的訪問
對不起,新手,直接把腳本文件復制到SSH里了,現在我SSH和網站都進不去了,求解決辦法!!
兩個不同IP封禁規則不同當然可以實現,iptables還有destination這個選項
軍哥不行啊。我不是怕被攻擊什么的 我是想禁止某個國家訪問的.我在兩臺服務器上都試過了。
太有良心了吧
被攻擊不空路由就算了
還主動幫忙防護
哪家VPS這么給力?介紹一下吧
好帥!!!
@Pajamas, 無法實現
我的VPS有多個IP,安裝的是軍哥的Lnmp。現在繼續提問。能否在軍哥的LNMP下,實現如下功能:IP1綁定的網站對所有中國IP屏蔽;IP2安裝VPN;最后我自己通過IP2的VPN訪問IP1 的網站。
@pajamas, 不能,你可以把你的ip加入允許里。
我想問一下,我的VPS如果屏蔽了來自中國的所有IP,那這樣的話,我自己也被屏蔽了。如果我想訪問則需要VPN才行。請問:我在我的同一個VPS上建一個VPN,那這個VPN我能用嗎?