iptables的規則ssh登入限制
-m state –state NEW ,這個是TCP包的狀態,匹配TCP包狀態為NEW,類似狀態還有ESTABLISHED等
iptables -P INPUT ACCEPT
iptables -A SSH_LIMIT -s 10.7.100.146 -j RETURN
iptables -F SSH_LIMIT
iptables -A SSH_LIMIT -m state --state NEW -m recent --set --name SSH
#iptables -A SSH_LIMIT -m state --state NEW -m recent --update --seconds 60 --hitcount 2 --name SSH
iptables -A SSH_LIMIT -m state --state NEW -m recent --rcheck --seconds 60 --hitcount 2 --name SSH -j DROP
iptables -I INPUT -p tcp --dport 22 -m state --state NEW -j SSH_LIMIT
iptables -N ICMP_LIMIT
iptables -I INPUT -j ICMP_LIMIT
iptables -F ICMP_LIMIT
iptables -A ICMP_LIMIT -p icmp -m recent --name PINGPOOL --update --seconds 30 --hitcount 5 -j DROP
iptables -A ICMP_LIMIT -p icmp -m recent --name PINGPOOL --set -j ACCEPT
iptables命令如下可以達到效果,以下命令好像要裝個iptables的recent擴充套件模組。
設定時間內限制SSH的連線次數,超過次數之後直接丟棄該包。一次連線的允許的密碼錯誤嘗試次數在另外的SSH SERVER設定檔案裡。
這種做法的風險是如果入侵者知道白名單的IP的話那就完了,如果源IP可以偽裝的話。
實現的效果:
白名單的IP享有無限制的連線次數,非白名單的IP在設定時間內有限制SSH的連線次數,超過次數則無法連線。
以下命令都已自測過。
簡單版:
iptables -P INPUT ACCEPT #設定策略為ACCEPT
iptables -N SSH_LIMIT #新建chain
iptables -A INPUT -p tcp --dport 22:23 -m state --state NEW -j SSH_LIMIT #匹配tcp埠為目的埠為22的包並且state為NEW的包
###以上內容開機後執行一次,不能重複###
iptables -F SSH_LIMIT #清除鏈SSH_LIMIT中的所有內容
#iptables -A SSH_LIMIT -s 10.7.100.147 -j RETURN #白名單的源IP地址,這樣的規則可以增加多條如下
iptables -A SSH_LIMIT -m recent --name SSHPOOL --rcheck --seconds 80 --hitcount 2 -j DROP #非白名單的成員從第一次連線開始300秒內可以嘗試連線最多2次
iptables -A SSH_LIMIT -m recent --name SSHPOOL --set -j ACCEPT
複雜版(增加用來防止SSH的某些攻擊的功能,詳細見參考資料網頁):
iptables -P INPUT ACCEPT
iptables -N SSH_LIMIT
iptables -I INPUT -p tcp --dport 22 -j SSH_LIMIT
iptables -F SSH_LIMIT
iptables -A SSH_LIMIT -p tcp --tcp-flags ALL SYN -m state --state NEW -j LOG --log-prefix "[SSH Login]:" --log-level debug
iptables -A SSH_LIMIT -s 10.7.100.147 -j RETURN
iptables -A SSH_LIMIT -p tcp --tcp-flags ALL SYN -m state --state NEW -m recent --name SSHPOOL --rcheck --seconds 60 --hitcount 2 -j DROP
iptables -A SSH_LIMIT -p tcp --tcp-flags ALL SYN -m state --state NEW -m recent --name SSHPOOL --set -j ACCEPT
iptables -A SSH_LIMIT -p tcp --tcp-flags ALL ACK -m state --state ESTABLISHED -j ACCEPT
iptables -A SSH_LIMIT -p tcp --tcp-flags ALL ACK,PSH -m state --state ESTABLISHED -j ACCEPT
iptables -A SSH_LIMIT -p tcp --tcp-flags ALL ACK,FIN -m state --state ESTABLISHED -j ACCEPT
iptables -A SSH_LIMIT -p tcp --tcp-flags ALL RST -m state --state ESTABLISHED -j ACCEPT
iptables -A SSH_LIMIT -p tcp --tcp-flags ALL ACK,RST -m state --state ESTABLISHED -j ACCEPT
iptables -A SSH_LIMIT -p tcp --tcp-flags ALL ACK,URG -m state --state ESTABLISHED -j ACCEPT
iptables -A SSH_LIMIT -j DROP
iptables -N ICMP_LIMIT
iptables -I INPUT -p icmp -j ICMP_LIMIT
iptables -F ICMP_LIMIT
iptables -A ICMP_LIMIT -p icmp --icmp-type echo-request -i eth0.2 -j DROP
iptables -A ICMP_LIMIT -p icmp --icmp-type echo-request -i pppoe-wan_1 -j DROP
參考資料:
http://www.cnblogs.com/hiloves/archive/2011/07/19/2109899.html
http://www.cnblogs.com/hiloves/archive/2010/07/24/1784396.html