Linux
在 CentOS 6.2 上重啟後 iptables 不存在
我嘗試在我的 iptables 中添加一些規則,但它們似乎沒有保存。為了保存它們,我嘗試執行
iptables-save
和service 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(當然,一旦一切正常,就刪除它)。