
要清除 iptables 中的所有規則,我使用這個
#!/bin/bash
echo "clearing iptables ... "
sudo iptables -F
sudo iptables -X
sudo iptables -t nat -F
sudo iptables -t nat -X
sudo iptables -t mangle -F
sudo iptables -t mangle -X
sudo iptables -P INPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
只要 iptables 中不再有任何條目,就可以使用此方法進行檢查
sudo iptables -L
或者
sudo iptables -S
但是,已轉送至不同目標的流量仍會路由至該目標。
看來清除的 iptables 在清除後仍然有效!
到目前為止,我擺脫這些規則的唯一方法是重新啟動系統,這不是很優雅。
在德班iptables 似乎不會作為服務運行,因此啟動或停止該服務不起作用。
如何完全清除或重設 iptables,從而停用先前定義的規則?
答案1
iptables 規則的刷新不會影響已建立的連線(這些連線已使用 重定向)
DNAT
。這是相關的,因為 UDP 封包的 conntrack 條目包含重定向訊息,該訊息與 iptables 規則一起使用。使用指令檢查現有的 conntrack 條目
conntrack -L
並監視 conntrack 事件conntrack -E
。使用該
conntrack -F
指令清除 conntrack 條目。新的 UDP 封包將不再被重定向。若要將 iptables 規則作為服務進行管理,請使用
netfilter-persistent
和iptables-persistent
套件。最好使用
iptables-save
/iptables-restore
命令而不是手動運行iptables
.它更加安全和原子。若要管理遠端主機上的 iptables 規則,請使用該
iptables-apply
命令,該命令允許在尚未確認的情況下回滾規則集。
答案2
sudo ufw status verbose; sudo iptables -L;
也許有 ufw 正在運行?嘗試停下來。
您能否詳細介紹一下您的系統、網路以及哪些流量仍在路由?
1-2 個例子就可以了,包括。初始防火牆規則。
編輯:
透過我的一些腳本進行了檢查......也刷新了鏈條。
sudo iptables -F INPUT
sudo iptables -F FORWARD
sudo iptables -F OUTPUT
答案3
您用於清除 iptables 規則的腳本足以刷新所有規則並將預設策略設為接受。這有效地禁用了防火牆,因為沒有規則並且一切都是允許的。
從您的評論中我們知道您正在發送 UDP 資料包。您可能會感覺舊規則在一段時間內仍然有效,尤其是當有連續的 UDP 封包流通過您的防火牆電腦時。這主要是因為 UDP 沒有辦法關閉連接,因此防火牆不知道當前活動流何時結束。唯一的方法是在看不到更多資料包時使用空閒逾時來刷新活動「連線」。
您有兩個選擇:
- 等待一段時間後再重試。這需要停止任何當前活動的「連接」。您可以在 中找到 UDP 逾時
/proc/sys/net/netfilter/nf_conntrack_udp_timeout
。 - 使用
conntrack
工具手動刪除現有的「連線」。
請注意,即使 UDP 是無連線協議,Linux 防火牆也會追蹤 TCP/UDP 的活動套接字。