重新封装一个iptables防止规则重复
2014-01-05 17:19
821 查看
相信很多人都遇到过iptables规则重复的问题,即iptables规则在添加的时候并不会检查该规则是否已经存在,即便已经存在,它还时会再次添加一遍,这一点和添加路由是完全不同的。很多基于iptables的管理系统都会面对规则的增删该查的触发时机问题,稍不注意,后台iptables-save查看的时候,就会发现一大堆重复的规则。然后你就会绞尽脑汁思考到底在哪个触发点上该删除规则却没有删除规则...
我本来想修改一下iptables的代码来订正这个问题,在添加规则之前,首先检查一下是否已经存在,若存在就不再添加了。但是最终还是决定用脚本封装,把iptables重新封装一下,它的逻辑如下:
1.使用iptables -C命令先检查一下是否已经有这个规则;
2.如果返回非0,说明没有这个规则,添加之;
3.如果返回0,直接exit 0。
脚本很简单:
有了上述脚本,就可以非常放心地执行任意iptbales命令了,要说明的是,上述的脚本还十分粗糙!
我本来想修改一下iptables的代码来订正这个问题,在添加规则之前,首先检查一下是否已经存在,若存在就不再添加了。但是最终还是决定用脚本封装,把iptables重新封装一下,它的逻辑如下:
1.使用iptables -C命令先检查一下是否已经有这个规则;
2.如果返回非0,说明没有这个规则,添加之;
3.如果返回0,直接exit 0。
脚本很简单:
#!/bin/bash check=$(echo $@ | sed -e 's/-A/-C/g') echo $check xtables-multi iptables $check ;ret=$? if [ "$ret" -eq 0 ]; then exit 0; else xtables-multi iptables $@; fi唯一值得注意的是,系统中的iptables是一个指向iptables-multi的链接,而且它的执行是基于main函数中的argv[0]来识别子命令的,如果你将iptables的名字改为了aaa,由于aaa并不是一个正规的子命令,因此将不会执行。
有了上述脚本,就可以非常放心地执行任意iptbales命令了,要说明的是,上述的脚本还十分粗糙!
相关文章推荐
- 重新封装一个iptables防止规则重复
- 【安卓-自定义布局】安卓App开发思路 一步一个脚印(十四)实现Fragment的缓冲视图和数据,防止重复加载
- java Arrays.sort(T[] a, Comparator<? super T> c)调用一个已经封装好的排序规则进行排序
- 一个表单加密;防止重复提交问题
- 一个简单的防止同一ID重复登陆的方法
- 一个JavaScript防止表单重复提交的实例
- 服务器端防止重复提交的一个实现
- 防止重复启动同一个程序
- VC++防止重复运行同一个程序
- 修改和重新封装了一个GHOST XP
- 关于弱网络情况下,如何防止用户重复购买一个商品
- 每天一个JavaScript实例-防止重复表单提交
- C++ 关于声明,定义,类的定义,头文件作用,防止头文件在同一个编译单元重复引用,不具名空间
- 一个JavaScript防止表单重复提交的实例
- windows内核编程之如何防止一个相同的程序重复运行
- 一个封装好的dialog工具类,减少重复的代码,简洁又方便使用!
- 防止一个没有窗体的WINDOWS程序的重复运行
- 用Jquery简单封装一个可重复调用的省市级联动插件
- 现在还在学习中,试着重新做了一个AJAX原生的封装
- 【python】实例-把两个无规则的序列连接成一个序列,并删除重复的元素,新序列按照升序排序