您好,登錄后才能下訂單哦!
最近在做一個V*P*N中間件的配置工作,在配置iptables的時候,當用戶想刪除EIP(即釋放當前連接),發現使用iptables的相關
命令會提示錯誤。iptables: Bad rule (does a matching rule exist in that chain?)。
我就納悶了,怎么會出現這個問題,按照官方的文檔也有錯?以下是我針對iptables刪除 命令的解決辦法。 |
如果按照行號刪除,就不會有這篇文章了,當然如果你刪除前就知道了行號,那么就可以使用一下命令
iptables -t $table -D POSTROUTING 2
-t: 后面接的是要操縱的表。表包括四個,注意默認的可能不是你的table,具體看官方文檔地址
-D: 代表刪除
POSTROUTING: 用于源地址轉換(SNAT),這里需要填你的規則連接。
然后后面接行號
iptables -t $table -L -n --line-numbers
官方文檔中采用的的精確匹配刪除。所以你不能只制定一個篩選條件。必須給出規則的每一個細節,和你當初添加該規則時一樣,和添加動作唯一不同的是,你要把-A改成-D。這種精確匹配刪除的成功依賴的就是用戶提供的所有match字段,target字段必須和內核中保存的一模一樣,精確到字節級別的匹配。如果哪怕有一個字節不匹配,就會有二義性,刪除失敗。
這個太極端了,慎用
iptables -t $table -F
本來我這接口就是用python寫的,所以自然就想到使用python-iptables來進行規則的刪除。這樣就可以不用精確匹配了。但問題是無法在阻塞態的時候使用
==但是可以重啟一個單獨的 腳本運行==
python-iptables的官方文檔
import iptc table = iptc.Table(iptc.Table.NAT) table.autocommit = False # 不加亦可,會自動提交,此處是手動 chain = iptc.Chain(table, "POSTROUTING") for rule in chain.rules: if rule.src == f"{network_segment}/255.255.255.0": chain.delete_rule(rule) table.commit() table.autocommit = True
原文地址: https://www.linuxprobe.com/iptables-post-table.html
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。