iptables刪除命令中的相關問題

最近在作一個V**N中間件的配置工做,在配置iptables的時候,當用戶想刪除EIP(即釋放當前鏈接),發現使用iptables的相關命令會提示錯誤。iptables: Bad rule (does a matching rule exist in that chain?)。
我就納悶了,怎麼會出現這個問題,按照官方的文檔也有錯?如下是我針對iptables刪除命令的解決辦法。

解決方法:html

1. 按行刪除python

若是按照行號刪除,就不會有這篇文章了,固然若是你刪除前就知道了行號,那麼就可使用一下命令linux

iptables -t $table -D POSTROUTING 2

-t: 後面接的是要操縱的表。表包括四個,注意默認的可能不是你的table,具體看官方文檔地址post

-D: 表明刪除htm

POSTROUTING: 用於源地址轉換(SNAT),這裏須要填你的規則鏈接。中間件

而後後面接行號接口

iptables -t $table -L -n --line-numbers

2. 根據匹配規則刪除ip

官方文檔中採用的的精確匹配刪除。因此你不能只制定一個篩選條件。必須給出規則的每個細節,和你當初添加該規則時同樣,和添加動做惟一不一樣的是,你要把-A改爲-D。這種精確匹配刪除的成功依賴的就是用戶提供的全部match字段,target字段必須和內核中保存的如出一轍,精確到字節級別的匹配。若是哪怕有一個字節不匹配,就會有二義性,刪除失敗。文檔

3. 整表整鏈刪除get

這個太極端了,慎用

iptables -t $table -F

4. 使用Python-iptables進行操做

原本我這接口就是用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

相關文章
相關標籤/搜索