Linux

在 CentOS 6.2 上重啟後 iptables 不存在

  • November 25, 2015

我嘗試在我的 iptables 中添加一些規則,但它們似乎沒有保存。為了保存它們,我嘗試執行iptables-saveservice iptables save. 每次我執行這些命令中的任何一個時,它都表示它已成功保存。以下是我要插入的規則:

iptables -A INPUT -j REJECT -p tcp --destination-port 3306
iptables -A INPUT -j REJECT -p tcp --destination-port 25

這些規則有效,並且在我輸入它們後將保留在原位,但是當我重新啟動系統時,它們在執行時從列表中消失iptables -L並且埠再次打開(使用 nmap 檢查)。

查看我的 /etc/sysconfig/iptables 文件時,規則就在那裡(在底部),所有“已完成”時間戳都來自我保存似乎正確的規則時。此外,在我的 /etc/sysconfig/iptables-config 文件中,所有設置都是預設設置,就從不同位置或其他位置載入 iptable 規則而言,似乎沒有任何改變。

如果重新啟動後更改不可見iptables -L,則表明:

  • 規則未保存

    • 您建議它們是,但同時說“完成的時間戳”-複數。這可能意味著您在同一個文件中有多個規則副本,並且僅應用了第一組。

      • 將 iptables-save 的輸出重定向到上述文件(不要附加):
      iptables-save > /etc/sysconfig/iptables
      
      或者,只需將現有文件移動到其他位置,然後保存。
      
  • 規則被保存到錯誤的文件中

    • 您的配置可能設置為載入與您保存的文件不同的文件 - 確保載入的文件與您保存的文件匹配。

      • 該文件通常是 /etc/sysconfig/iptables
      • 如果您查看 /etc/init.d/iptables,您應該會發現以下幾行決定將載入哪個文件:
      IPTABLES=iptables
      IPTABLES_DATA=/etc/sysconfig/$IPTABLES
      
  • 規則有錯誤

    • 這通常不是問題——iptables 通常只是忽略錯誤的規則;而且您不是手動編寫它們(您正在保存一個可能工作的規則集)。
  • iptables 未在啟動時啟動

    chkconfig --list iptables
    

    檢查載入了哪些執行級別 iptables。如果未在正確的執行級別中啟用,請添加

    chkconfig --level 2345 iptables on
    

您應該能夠通過重新啟動 iptables 來測試您的設置(而不是重新啟動機器):

service iptables restart

標準 iptables 免責聲明:以防萬一出現問題……

  • 備份您現有的規則集:
cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak
  • 設置一個 cron 作業,幾分鐘後刷新你的 iptables(當然,一旦一切正常,就刪除它)。

引用自:https://serverfault.com/questions/355096