眾所周知,Linux可以通過編寫iptables規則對進出Linux主機的數據包進行過濾等操作,在一定程度上可以提升Linux主機的安全性,在新版本內核中,新增了recent模塊,該模塊可以根據源地址、目的地址統計最近一段時間內經過本機的數據包的情況,並根據相應的規則作出相應的決策,詳見:http://snowman.net/projects/ipt_recent/
1、通過recent模塊可以防止窮舉猜測Linux主機用戶口令,通常可以通過iptables限制只允許某些網段和主機連接Linux機器的22/TCP端口,如果管理員IP地址經常變化,此時iptables就很難適用這樣的環境了。通過使用recent模塊,使用下面這兩條規則即可解決問題:
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --name SSH --rsource -j DROP
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name SSH --rsource -j ACCEPT
應用該規則後,如果某IP地址在一分鐘之內對Linux主機22/TCP端口新發起的連接超過4次,之後的新發起的連接將被丟棄。
2、通過recent模塊可以防止端口掃描。
-A INPUT -m recent --update --seconds 60 --hitcount 20 --name PORTSCAN --rsource -j DROP
-A INPUT -m recent --set --name PORTSCAN --rsource -j DROP
應用該規則後,如果某個IP地址對非Linux主機允許的端口發起連接,並且一分鐘內超過20次,則系統將中斷該主機與本機的連接。
詳細配置如下:
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [458:123843]
-A INPUT -i lo -j ACCEPT
-A INPUT -i tap+ -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -m recent --update --seconds 60 --hitcount 20 --name PORTSCAN --rsource -j DROP
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --name SSH --rsource -j DROP
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name SSH --rsource -j ACCEPT
-A INPUT -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 53 -m state --state NEW -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -m state --state NEW -j ACCEPT
-A INPUT -m recent --set --name PORTSCAN --rsource -j DROP
COMMIT
以上配置說明,本機開放可供服務的端口有22/TCP(有連接頻率限制),53/TCP/UDP, 80/TCP, 443/TCP,所有發往本機的其他ip報文則認為是端口掃描,如果一分鐘之內超過20次,則封禁該主機,攻擊停止一分鐘以上自動解封。
在這只是取個拋磚引玉的作用,通過recent模塊還可以實現很多更復雜的功能,例如:22/TCP端口對所有主機都是關閉的,通過順序訪問23/TCP 24/TCP 25/TCP之後,22/TCP端口就對你一個IP地址開放等等。