在我們的Web伺服器上,系統的預設政策是INPUT為DROP,OUTPUT;FORWARD鍊為ACCEPT,DROP則設定得比較寬松,因為我們知道出去的資料包比較安全。
準備工作
為了驗證腳本的通用性,我特地檢視了伺服器的核心及iptables版本:
大家可以發現,這台伺服器的系統、核心和iptables版本是比較老的。本文中介紹的腳本涉及到recent安全子產品,這對系統核心有要求(recent子產品在主機防護腳本中也經常用到)。是以,如果大家要采用iptables作為主機防火牆時,建議用CentOS 5.6 x86_64或更進階版本,不然系統會有如下提示錯誤資訊:
在tail -f /var/log/messages時會有如下出錯提示:
另外,在生産環境下進行iptables腳本的調試之前,強烈建議編寫crontab任務,每5分鐘關閉一次iptables腳本,防止操作失誤而将自己的SSH用戶端鎖在外面:
準備工作就是這些,下面是iptables腳本内容。
腳本内容
儲存腳本檔案後用
執行腳本。運作腳本之後最好檢查一下:
腳本說明
由于此Web伺服器是置于負載均衡器後面,是以我們要允許資料源位址為負載均衡器的資料包通過:
如果配置了Nagios等監控系統的話在這裡也要加上,如果監控和LB都沒做的話,這行可以不用。
另外,我的許多基于LNMP的小網站上面也部署了此腳本,由于Web服務和MySQL資料庫同時安裝在一台機器上,是以沒有開放3306端口。
在本腳本中,我們配置了一些安全措施,以防止外部的ping和SYN洪水攻擊,并且考慮到外部的瘋狂端口掃描軟體可能會影響伺服器的入口帶寬,是以在這裡也做了限制:
上面的指令每秒鐘最多允許100個新連接配接。請注意這裡的新連接配接指的是state為New的資料包,在後面我們也配置了允許狀态為ESTABLISHED和RELATED的資料通過;另外,100這個閥值則要根據伺服器的實際情況來調整,如果是并發量不大的伺服器這個數值就要調小,如果是通路量非常大且并發數不小的伺服器,這個值則還需要調大。
這是為了防止ping洪水攻擊,限制每秒的ping包不超過10個。
上面的指令防止各種端口掃描,将SYN及ACK SYN限制為每秒鐘不超過200個,免得把數務器帶寬耗盡了。
後續加強工作
iptables防火牆運作後,運作nmap工具進行掃描:
在這裡,我們發現一個1014端被某個程序打開了,用lsof -i:1014檢視發現是rpc.statd打開的,這服務每次用的端口都不一樣啊!本來想置之不理的,但是如果rpc.statd不能正确處理SIGPID信号,遠端攻擊者可利用這個漏洞關閉程序,進行拒絕服務攻擊,是以還是得想辦法解決掉。我們發現rpc.statd是由服務nfslock開啟的,進一步查詢得知它是一個可選的程序,它允許NFS用戶端在伺服器上對檔案加鎖。這個程序對應于nfslock服務,于是我們關掉了此服務:
最後想說的是,如果沒有硬體防火牆保護的話,請盡量在每一台有公網IP的機器上部署iptables防火牆吧!
本文轉自yzy121403725 51CTO部落格,原文連結:http://blog.51cto.com/lookingdream/1765774,如需轉載請自行聯系原作者