眾所周知,Linux可以通過編寫iptables規(guī)則對進出Linux主機的數(shù)據(jù)包進行過濾等操作,在一定程度上可以提升Linux主機的安全性,在新版本內(nèi)核中,新增了recent模塊,該模塊可以根據(jù)源地址、目的地址統(tǒng)計最近一段時間內(nèi)經(jīng)過本機的數(shù)據(jù)包的情況,并根據(jù)相應(yīng)的規(guī)則作出相應(yīng)的決策,詳見:http://snowman.net/projects/ipt_recent/
1、通過recent模塊可以防止窮舉猜測Linux主機用戶口令,通??梢酝ㄟ^iptables限制只允許某些網(wǎng)段和主機連接Linux機器的 22/TCP端口,如果管理員IP地址經(jīng)常變化,此時iptables就很難適用這樣的環(huán)境了。通過使用recent模塊,使用下面這兩條規(guī)則即可解決問題:
-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
應(yīng)用該規(guī)則后,如果某IP地址在一分鐘之內(nèi)對Linux主機22/TCP端口新發(fā)起的連接超過4次,之后的新發(fā)起的連接將被丟棄。
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
應(yīng)用該規(guī)則后,如果某個IP地址對非Linux主機允許的端口發(fā)起連接,并且一分鐘內(nèi)超過20次,則系統(tǒng)將中斷該主機與本機的連接。
詳細配置如下:
*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
以上配置說明,本機開放可供服務(wù)的端口有22/TCP(有連接頻率限制),53/TCP/UDP, 80/TCP, 443/TCP,所有發(fā)往本機的其他ip報文則認為是端口掃描,如果一分鐘之內(nèi)超過20次,則封禁該主機,攻擊停止一分鐘以上自動解封。
在這只是取個拋磚引玉的作用,通過recent模塊還可以實現(xiàn)很多更復(fù)雜的功能,例如:22/TCP端口對所有主機都是關(guān)閉的,通過順序訪問23/TCP 24/TCP 25/TCP之后,22/TCP端口就對你一個IP地址開放等等。