Règles iptables en double

18

J'ai ces règles iptables:

-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

Les lignes

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

et

-A fail2ban-ssh -j RETURN

semble être dupliqué ou écrit deux fois. Comment puis-je supprimer le doublon?

Leandro Garcia
la source
Ouvrez le fichier dans votre éditeur préféré, allez sur la ligne en question, maintenez la touche Suppr enfoncée jusqu'à ce que tous les caractères disparaissent. Suis-je en train de manquer quelque chose d'évident sur pourquoi c'est difficile?
Ladadadada

Réponses:

17

Liste avec numéros de ligne et suppression par numéro.

iptables --line-numbers --list

Supprimez ensuite une règle en utilisant son numéro de ligne. Ensuite, répétez (les numéros de ligne changent pour les règles suivantes lorsque l'un est supprimé, puis réinscrivez-en avant d'en supprimer un autre).

iptables -D INPUT 6
Brian
la source
2
Merci pour ce copain! Acceptera cela en quelques minutes.
Leandro Garcia,
Cela persistera-t-il après un redémarrage?
Native Coder
10
iptables-save | uniq | iptables-restore

C'est vraiment tout ce dont vous avez besoin.

Ricky Neff
la source
2
AFAICT, cela ne supprimera que les doublons adjacents. Il ne parviendra pas à supprimer les doublons non adjacents.
sampablokuper
4

Si vous ne souhaitez supprimer que les lignes doubles qui se suivent directement, vous pouvez les exporter, les unifier et les réimporter avec

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

Si vous souhaitez supprimer d'autres lignes, utilisez un éditeur sur ~ / tmp / iptables.conf avant de le réimporter de la même manière.

Vérifiez vos nouvelles règles avec

iptables-save
rubo77
la source
Si vous souhaitez supprimer les doublons adjacents, la réponse de Ricky Neff est plus sécurisée, car elle évite d'exposer le pare-feu aux autres utilisateurs qui y ont accès /tmp.
sampablokuper
1
thx, vous avez raison, vous ne devriez pas utiliser / tmp car il est lisible dans le monde entier. Je l'ai changé en~/tmp
rubo77
2

Un commentaire à fail2ban: fail2ban semble ajouter lui-même ses règles iptables. Vous ne devez donc pas stocker ces règles avec par exemple iptables-save. Ensuite, après un redémarrage, les règles seront doublées (votre règle enregistrée + la règle ajoutée par fail2ban).

halboffen
la source
2

Supprimer toutes les lignes dupliquées sauf COMMIT

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

J'utilise un si petit script bash qui passe par 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
Sanya Snex
la source