Shell指令碼配合iptables屏蔽來自某個國家的IP訪問_linux shell

來源:互聯網
上載者:User

星期六我們一位客戶受到攻擊,我們的網路監測顯示有連續6小時的巨大異常流量,我們立即聯絡了客戶,沒有得到回應,我們修改和限制了客戶的 VPS,使得個別 VPS 受攻擊不會對整個伺服器和其他 VPS 使用者造成任何影響,我們一直保持這個 VPS 為開通狀態(儘管一直受攻擊),攻擊又持續了24小時,星期天攻擊仍在繼續,我們忍無可忍,但是仍然無法連絡到客戶,我們向客戶網站的另一負責人詢問是否需要我們介入來協助解決,這位負責人答應後我們立即投入到與 DDoS 的戰鬥中(我們動態掃描屏蔽壞 IP,現在客戶網站已恢複。整個過程很有意思,以後有時間再寫一篇部落格來描述)。登入到客戶 VPS 第一件事情就是查當前串連和 IP,來自中國的大量 IP 不斷侵佔80連接埠,典型的 DDoS. 所以第一件事是切斷攻擊源,既然攻擊只攻80連接埠,那有很多辦法可以切斷,直接關閉網站伺服器、直接用防火牆/iptables 切斷80連接埠或者關閉所有串連、把 VPS 網路關掉、換一個 IP,⋯,等等。因為攻擊源在國內,所以我們決定切斷來自國內的所有訪問,這樣看上去網站好像是被牆了而不是被攻擊了,有助於維護客戶網站的光輝形象,那麼如何屏蔽來自某個特定國家的 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,訪問者也無法訪問網站:

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.