我尝试使用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}等都填写了有效的详细信息。
答案 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