IPTables按IP和端口删除规则

时间:2016-06-19 01:38:33

标签: linux networking iptables

我尝试使用bash脚本自动创建和删除规则。

目前,我有这样的规则:

iptables -t nat -I PREROUTING -p udp -d {IPDESTINATION} --dport {PORTDESTINATION} -m u32 --u32  '0>>22&0x3C@8=0xFFFFFFFF && 0>>22&0x3C@12=0x54536F75 && 0>>22&0x3C@16=0x72636520 && 0>>22&0x3C@20=0x456E6769 && 0>>22&0x3C@24=0x6E652051 && 0>>22&0x3C@28=0x75657279' -j REDIRECT --to-port {REDIRECTPORT}

我需要通过指定IP目的地和端口目的地来删除此规则。我试过类似下面的事情:

iptables -D PREROUTING -s {IPDESTINATION} -t nat

即使没有提供端口目的地,我也无法删除此规则,因为它以错误响应

iptables: Bad rule (does a matching rule exist in that chain?).

这可以用nat规则吗? {IPDESTINATION}等都填写了有效的详细信息。

2 个答案:

答案 0 :(得分:0)

如果您无法通过执行以下操作删除此规则:     iptables -t nat -D PREROUTING 1

解决方法是创建一个包含所有规则的文件:

1)创建一个像'rulesFW.sh'

这样的bash文件
#!/bin/bash
iptables -F -t nat

2)在您的脚本中,每次向iptables添加规则时,请使用命令附加bash文件。

3)如果要删除规则,请删除与您的规则匹配的行(使用目标IP和其他参数...)

4)重启脚本

答案 1 :(得分:0)

只需将ip替换为ip并将端口替换为。这仅应删除具有匹配IP地址的规则。我确定其他人可以使命令更有效,但这目前对我有用。作为单个命令行运行,因此如果需要,可以在脚本中通过for循环执行

rulenumber=`/sbin/iptables -L -n --line-number | grep <x.x.x.x> | grep <portnumber>| awk '{print $1}'` &&  [ -n "$rulenumber" ] && [ $rulenumber -gt 0 ] && /sbin/iptables -D INPUT $rulenumber