防 ssh 暴力破解
一直以來,面對 Vim 顯示的 auth.log 裡滿屏的紅色 ssh 登入失敗記錄,要麼容忍,要麼換端口号,要麼是fail2ban。換端口号顯然會造成很多不便,尤其是使用者比較多的時候。fail2ban以前也用得挺好的,但是需要手工編輯配置檔案,閱讀其中長長的注釋并且小心翼翼地修改參數。配置好之後還會經常收到 fail2ban發出的郵件。這些都可以忍受。直到有一天,某位使用者不小心登入失敗多次以後,那個 IP 被封掉了。我從 /etc/hosts.deny中删除了對應的項目,但是沒有用,因為 fail2ban 會去檢查 auth.log,然後把那個 IP 給加回去……
前兩天本來是尋找限速的指令的,卻無意之中看到了防 ssh 暴力破解的指令,如下:
iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
第一句是說,對于外來資料,如果是 TCP 協定,目标端口号是 22,網絡接口是eth0,狀态是新連接配接,那麼把它加到最近清單中。第二句是說,對于這樣的連接配接,如果在最近清單中,并且在 60秒内達到或者超過四次,那麼丢棄該資料。其中的-m是子產品的意思。
也就是說,如果有人從一個 IP 一分鐘内連接配接嘗試四次 ssh登入的話,那麼它就會被加入黑名單,後續連接配接将會被丢棄。這是對付 ssh 暴力破解的絕佳規則了。不用修改openssh,也不用另啟一個容易招麻煩的服務。不過不知道多久以後那個 IP 才能重新連接配接上。
我實際使用時正有一北京 IP 在嘗試 ssh 登入。指令執行後,auth.log裡的紅色失敗消息又出現了四次,然後就沒有了。後來再檢視時,雖然還是能看到不少紅色,但是沒有以前那麼密集了。更重要的是,每四條登入失敗消息間的時間間隔比較大了。可謂效果顯著啊。
網絡限速
這是我這次搜尋 iptables相關資訊的本意。起因是這樣子的,在本地測試的時候,經常會發現本地連接配接的速度實在是太快了。對于網站,不能反映其真實的使用體驗;對于網絡程式,無法測試其在網絡不良時的表現,由于測試的規模小,一些真實使用時容易出現的競态也由于操作完成得太快而無法重制。
很早就知道 iptables 能夠對轉發流量進行限速。既然是 iptables而不是某些商業軟體,它就沒理由隻能對外部流量而不對本地接口 lo 進行限速。于是最後弄到如下指令:
iptables -A INPUT -s 127.0.0.1 -p tcp -d 127.0.0.1 --dport 6900:6901 -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -s 127.0.0.1 -p tcp -d 127.0.0.1 --dport 6900:6901 -j DROP
這兩條規則組合起來是說,對于所有從 127.0.0.1 到同樣的位址的 6900 到 6901 端口的 TCP連接配接,每秒隻接受一個資料包,多餘的丢棄。後邊那句是必要的,如果不寫的話就沒作用了,因為預設政策是接受。
要注意的是,如果使用域名localhost的話,很可能會使用 IPv6 位址::1而不是127.0.0.1了。
本文轉自 326647452 51CTO部落格,原文連結:http://blog.51cto.com/svsky/1672571,如需轉載請自行聯系原作者