![編輯 iptables 設定檔與透過 iptables 指令新增規則有何優缺點](https://rvso.com/image/50586/%E7%B7%A8%E8%BC%AF%20iptables%20%E8%A8%AD%E5%AE%9A%E6%AA%94%E8%88%87%E9%80%8F%E9%81%8E%20iptables%20%E6%8C%87%E4%BB%A4%E6%96%B0%E5%A2%9E%E8%A6%8F%E5%89%87%E6%9C%89%E4%BD%95%E5%84%AA%E7%BC%BA%E9%BB%9E.png)
我正在使用 CentOS 上的一個產品,偶爾需要自動在 iptables 設定中新增和刪除規則。例如,在更新期間,我們希望明確拒絕入站服務流量,直到更新完成。目前,更新程式碼中使用的方法是使用sed
其他文字處理公用程式註解掉設定檔中的相關行,iptables
使用新設定檔重新啟動服務,然後在更新結束時反轉該過程,然後再次重新啟動服務。
在我看來,更好的方法是iptables -D table rule-specification
在進程開始時使用該命令,然後iptables -A table rule-specification
在更新結束時使用該命令。
我看到自動操作配置文件的最大問題是脆弱性:有一些系統工具會重寫配置文件,並且可能會重新排序參數等,可能會破壞文字解析(service iptables save
是一個例子)。
從程式碼中進行此類系統配置更改的建議方法是什麼?
答案1
大多數遇到這種情況的人都會用一些抽象的方法來處理它。
例如。與其使用包含規則集的單一文件,為什麼不建立包含規則的一組文件並將它們連接在一起。
例如,您可以將單獨的規則新增至這樣命名的檔案中。
/etc/iptables-rules/00_flush_drop
/etc/iptables-rules/20_permitotherstuff
/etc/iptables-rules/10_permitssh
/etc/iptables-rules/99_drop
然後只需運行規則集即可run-parts /etc/iptables-rules
。如果需要新增另一組規則,只需暫時插入新增一個檔案即可。然後根據需要刪除。
您還應該強烈注意在配置中設定和使用 CHAINS。鍊有點像子程式。例如,您可以在防火牆的最頂部新增一條規則以跳入一條鏈。鏈有一個預設的 RETURN 策略。因此,當您需要新增臨時規則時,只需將其插入該鏈中即可。當您不再需要它時,只需沖洗該特定鏈條即可。