重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
最近在做一个V*P*N中间件的配置工作,在配置iptables的时候,当用户想删除EIP(即释放当前连接),发现使用iptables的相关
命令会提示错误。iptables: Bad rule (does a matching rule exist in that chain?)。 我就纳闷了,怎么会出现这个问题,按照官方的文档也有错?以下是我针对iptables删除 命令的解决办法。 |
如果按照行号删除,就不会有这篇文章了,当然如果你删除前就知道了行号,那么就可以使用一下命令
10年的鹤山网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。成都全网营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整鹤山建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。成都创新互联公司从事“鹤山网站设计”,“鹤山网站推广”以来,每个客户项目都认真落实执行。
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