iptables删除命令中的相关问题
2019-09-20 00:00
731 查看
最近在做一个V*P*N中间件的配置工作,在配置iptables的时候,当用户想删除EIP(即释放当前连接),发现使用iptables的相关命令会提示错误。
iptables: Bad rule (does a matching rule exist in that chain?).
我就纳闷了,怎么会出现这个问题,按照官方的文档也有错?
解决方法:
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来进行规则的删除。这样就可以不用精确匹配了。但问题是无法在阻塞态的时候使用
==但是可以重启一个单独的脚本运行==
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
相关文章推荐
- userdel命令_Linux userdel 命令用法详解:用于删除给定的用户以及与用户相关的文件
- JVM - 内存溢出问题排查相关命令jcmd jmap
- GridVieW控件自定义删除按钮-解决多级相关中删除问题
- linux系统防火墙相关问题及常用命令介绍
- 解决hbase shell中无法删除命令的问题
- exec 命令的相关问题,包括空格的文件名
- Linux裸设备相关命令(如何删除裸设备)
- Ubuntu软件安装与删除相关命令
- centos7.5防火墙(iptables和firewall)的相关操作命令
- 这次项目用到mysql,而有频繁使用到权限问题,所以在此记录下相关的命令
- conda常用命令:更新,创建,激活,关闭,查看,卸载,删除,清理,重命名,问题
- struts2 如何实现批量删除? (checkBox批量删除 的相关问题)
- 解决gedit中文乱码问题,采用命令行输入相关命令,简单实用的解决方法
- hadoop 相关问题: put命令报错WARN hdfs.DFSClient: DataStreamer Exception
- Linux 目录结构、相关命令(创建、删除、拷贝、移动、更名)
- 解决sqlplus中输错命令时的删除、光标键不能使用问题
- 删除oracle的相关问题
- Linux中文件和文件夹的创建、删除相关命令
- [linux]死锁问题查找问题的相关命令
- Ubuntu软件安装与删除相关命令