重复的 iptable 规则

Lea*_*cia 21 ubuntu iptables

我有这个 iptable 规则:

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N fail2ban-ssh
-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh
-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -j DROP
-A fail2ban-ssh -s xx.xxx.xx.xx/32 -j REJECT --reject-with icmp-port-unreachable
-A fail2ban-ssh -j RETURN
-A fail2ban-ssh -j RETURN
Run Code Online (Sandbox Code Playgroud)

线条

-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh
Run Code Online (Sandbox Code Playgroud)

-A fail2ban-ssh -j RETURN
Run Code Online (Sandbox Code Playgroud)

似乎被复制或写了两次。如何删除重复项?

Bri*_*ian 18

列出行号并按编号删除。

iptables --line-numbers --list
Run Code Online (Sandbox Code Playgroud)

然后使用它的行号删除一个规则。然后重复(当删除一个时,行号会根据以下规则更改,因此在删除另一个之前重新列出)。

iptables -D INPUT 6
Run Code Online (Sandbox Code Playgroud)

  • 谢谢这位朋友!将在几分钟内接受这一点。 (2认同)

小智 16

iptables-save | uniq | iptables-restore
Run Code Online (Sandbox Code Playgroud)

这就是你真正需要的。

  • AFAICT,这只会删除相邻的重复项。它将无法删除不相邻的重复项。 (5认同)
  • @SkippyleGrandGourou,你需要小心地对所有东西进行排序。在上面的示例中,是否不会将“-j RETURN”重新排序到“-s xx.xxx.xx.xx/32 -j REJECT”规则*之前,这意味着后一个规则永远不会被看到? (3认同)
  • @mwfearnley 哈!你说得对,确实如此。 (2认同)

rub*_*o77 5

如果只想删除直接连在一起的双行,可以导出、统一并重新导入

mkdir ~/tmp
iptables-save > ~/tmp/iptables.conf
uniq /tmp/iptables.conf > ~/tmp/iptables_new.conf
iptables-restore < ~/tmp/iptables_new.conf
Run Code Online (Sandbox Code Playgroud)

如果要删除其他行,请在以相同方式重新导入之前使用 ~/tmp/iptables.conf 上的编辑器。

检查您的新规则

iptables-save
Run Code Online (Sandbox Code Playgroud)