Regras duplicadas de iptable


18

Eu tenho estas regras 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

As linhas

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

e

-A fail2ban-ssh -j RETURN

parece estar duplicado ou escrito duas vezes. Como posso remover a duplicata?


Abra o arquivo no seu editor favorito, vá para a linha em questão, mantenha pressionada a tecla Delete até que todos os caracteres desapareçam. Estou perdendo algo óbvio sobre por que isso é difícil?
Ladadadada 15/09/14

Respostas:


17

Liste com números de linha e exclua por número.

iptables --line-numbers --list

Em seguida, exclua uma regra usando o número da linha. Em seguida, repita (os números de linha mudam para as seguintes regras quando um é excluído, faça uma nova lista antes de excluir outro).

iptables -D INPUT 6

2
Obrigado por este amigo! Aceitará isso em questão de minutos.
Leandro Garcia

Isso permanecerá persistente após uma reinicialização?
Native Coder

10
iptables-save | uniq | iptables-restore

Isso é tudo o que você realmente precisa.


2
AFAICT, isso removerá apenas duplicatas adjacentes. Falha ao remover duplicatas não adjacentes.
precisa saber é o seguinte

4

Se você deseja excluir apenas linhas duplas diretamente uma após a outra, você pode exportar, unificar e reimportá-lo com

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

Se você deseja excluir outras linhas, use um editor em ~ / tmp / iptables.conf antes de reimportá-lo da mesma maneira.

Verifique suas novas regras com

iptables-save

Se a remoção de duplicatas adjacentes é o que você procura, a resposta de Ricky Neff é mais segura, porque evita expor as regras do firewall a outros usuários que têm acesso /tmp.
precisa saber é o seguinte

11
thx, você está certo, não deve usar / tmp porque é legível para o mundo. Eu mudei para~/tmp
rubo77

2

Um comentário para fail2ban: fail2ban parece adicionar suas próprias regras de iptables. Portanto, você não deve armazenar essas regras com, por exemplo, iptables-save. Depois de reiniciar, as regras serão duplicadas (sua regra salva + a regra adicionada por fail2ban).


2

Exclua todas as linhas duplicadas, exceto COMMIT

/sbin/iptables-save | awk '!COMMIT||!x[$0]++' | /sbin/iptables-restore

0

Estou usando um script bash tão pequeno que é executado no cron.

     #!/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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.