iptables的删除命令中的相关问题
2024-08-28 11:47:25
最近在做一个VPN中间件的配置工作,在配置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
最新文章
- 埃尔米特插值问题——用Python进行数值计算
- db2服务端安装图解
- AFNetworking 基本使用
- TCP状态转换图详解
- iOS开发UI篇—transframe属性(形变)
- linux下core文件设置(转)
- Java学习第一周
- 批处理(Batch)---批处理脚本。
- ArrayList循环遍历并删除元素的几种情况
- MySQL的SQL_Mode修改小计
- springmvc 学习资料
- vue2.0中使用sass
- 无法找到“XXX.exe”的调试信息,或者调试信息不匹配。未使用调试信息生成二进制文件
- 多线程学习笔记六之并发工具类CountDownLatch和CyclicBarrier
- Raid介绍
- open-falcon之alarm、sender、links说明.md
- linux常用命令:netstat 命令
- SpringDaoSupport
- C语言各种存储模式的区别?最常用的存储模式有哪些?
- 搜索框请输入关键字 onfocus 和 onblur
热门文章
- 浅谈IDEA集成SSM框架(SpringMVC+Spring+MyBatis)
- 编程使用c#连接到IBM db2的两种方式
- Python RPC 之 gRPC
- 如何:从 bool? 安全地强制转换为 bool(C# 编程指南)
- 关于selenium自动化对窗口句柄的处理
- Liunx学习总结(三)--用户和用户组管理
- ajax调用免费的天气API
- tf.control_dependencies
- window下 局域网内使用mysql,mysql 开启远程访问权限
- Java连载25-方法讲解