iptable规则重复


18

我有这个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

线

-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh

-A fail2ban-ssh -j RETURN

似乎重复或写过两次。如何删除重复项?


在您喜欢的编辑器中打开文件,转到有问题的行,按住Delete键,直到所有字符都消失。我难道不知道为什么很难做到这一点吗?
Ladadadada 2014年

Answers:


17

列出行号并按编号删除。

iptables --line-numbers --list

然后使用其行号删除一条规则。然后重复(删除一个规则后,行号将更改为遵循以下规则,因此请在删除另一个规则之前重新列出)。

iptables -D INPUT 6

2
感谢这个伙伴!几分钟后就会接受。
Leandro Garcia

重新启动后,此设置是否仍然有效?
Native Coder


4

如果只想删除另一行之后的双行,则可以导出,统一并重新导入

mkdir ~/tmp
iptables-save > ~/tmp/iptables.conf
uniq /tmp/iptables.conf > ~/tmp/iptables_new.conf
iptables-restore < ~/tmp/iptables_new.conf

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

检查您的新规则

iptables-save

如果您要剥离相邻的重复项,那么Ricky Neff的答案会更安全,因为它避免了将防火墙规则暴露给有权访问的其他用户/tmp
sampablokuper

1
谢谢,您是对的,您不应该使用/ tmp,因为它是世界可读的。我将其更改为~/tmp
rubo77 '18

2

对fail2ban的评论:fail2ban似乎自己添加了iptables规则。因此,您不应将这些规则与iptables-save一起存储。然后,重新引导后,规则将翻倍(您保存的规则+ fail2ban添加的规则)。



0

我正在使用通过cron运行的小型bash脚本。

     #!/bin/bash 
         readarray -t tabl_lines <<< "$(iptables -nL INPUT --line-number | grep "fail2ban-ssh")"
            i=''
            for tline in "${tabl_lines[@]}"
            do 
            #skip the first result
            if [ -n "$i" ]; then
            sudo iptables -D INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh
            # if necessary, you can erase and other rules, 
            # because they usually repeat the same number of times
            # sudo iptables -D INPUT -p tcp -m multiport --dports 21 -j fail2ban-vsftpd
save_iptables=yes
            else 
            i=start_remove
            fi
            done
if [ "$save_iptables" == "yes" ]; then
/sbin/service iptables save
fi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.