iptables删除命令中的相关问题

发布时间:2020-08-08 05:49:45 作者:安全剑客
来源:ITPUB博客 阅读:165
最近在做一个V*P*N中间件的配置工作,在配置iptables的时候,当用户想删除EIP(即释放当前连接),发现使用iptables的相关 命令会提示错误。iptables: Bad rule (does a matching rule exist in that chain?)。
我就纳闷了,怎么会出现这个问题,按照官方的文档也有错?以下是我针对iptables删除 命令的解决办法。
解决方法:
1. 按行删除

如果按照行号删除,就不会有这篇文章了,当然如果你删除前就知道了行号,那么就可以使用一下命令

iptables -t $table -D POSTROUTING 2

-t: 后面接的是要操纵的表。表包括四个,注意默认的可能不是你的table,具体看官方文档地址

-D: 代表删除

POSTROUTING: 用于源地址转换(SNAT),这里需要填你的规则连接。

然后后面接行号

iptables -t $table -L -n --line-numbers
2. 根据匹配规则删除

官方文档中采用的的精确匹配删除。所以你不能只制定一个筛选条件。必须给出规则的每一个细节,和你当初添加该规则时一样,和添加动作唯一不同的是,你要把-A改成-D。这种精确匹配删除的成功依赖的就是用户提供的所有match字段,target字段必须和内核中保存的一模一样,精确到字节级别的匹配。如果哪怕有一个字节不匹配,就会有二义性,删除失败。

3. 整表整链删除

这个太极端了,慎用

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

推荐阅读:
  1. Linux中IPtables命令的使用方法
  2. iptables 基本命令

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

iptables 中的 删除

上一篇:oracle RAC开启归档模式

下一篇:如何三招帮你排查Linux中的硬件问题

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》