我正在安装带有时间戳值的 iptable 规则:
$ iptables -A INPUT -i eth0 -s 10.0.0.3 -m comment --comment "Timestamp=`date +%Y/%m/%d-%H:%M:%S`" -j DROP
这会产生以下 iptable 规则:
$ iptables -A INPUT -i eth0 -s 10.0.0.3 -m comment --comment "Timestamp=2018/02/26-22:34:15" -j DROP
现在我无法找到测试现有规则的方法:
$ iptables -C INPUT -i eth0 -s 10.0.0.3 -j DROP
我尝试过使用 cut 命令和egrep,但似乎没有任何效果。
$ iptables -S INPUT | cut -d' ' --complement -s -f7-10
我应该如何测试包含时间戳值的现有 iptables 规则?
答案1
该-C
功能仅适用于精确的与规则相匹配。
也就是说,如果我添加的规则是iptables -A INPUT -i eth0 -p tcp --dport 22 -m comment "DropSSH" -j DROP
,那么iptables -C INPUT -i eth0 -p tcp --dport 22 -m comment "DropSSH" -j DROP
就会匹配,并且-C
不会出错。然而,有不是完全匹配,iptables -C INPUT -i eth0 -p tcp --dport 22 -j DROP
因此它将无法删除。
真正了解您正在寻找的规范是否存在的唯一方法和考虑到部分规则匹配将是分段grep
过滤。
这样:
iptables -S INPUT | grep -i '-p tcp' | grep -i '--dport 22' | grep -i '-j DROP'
可能会匹配任何允许通过 TCP 端口 22 的规则。然而,正如您所看到的,这并不简单,并且可能会导致问题。 cut
调整数据也没有多大帮助。棘手的部分是,您必须将要搜索的内容分成各个部分才能执行grep
.
在中添加时间戳的另一种选择评论是对规则进行版本控制iptables
,以便每次更新和保存规则时,您都可以使用单独的修订来更新规则集的版本控制副本,以便您可以随着时间的推移查看更改的内容。并由不是注释中有时间戳,您可以正确使用-C
,如果您需要查看谁进行了更改,您可以返回到版本控制数据以查看谁在何时进行了哪些更改。