Reglas de iptable duplicadas

18

Tengo estas reglas de 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

Las líneas

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

y

-A fail2ban-ssh -j RETURN

parece estar duplicado o escrito dos veces. ¿Cómo puedo eliminar el duplicado?

Leandro Garcia
fuente
Abra el archivo en su editor favorito, vaya a la línea en cuestión, mantenga presionada la tecla Eliminar hasta que desaparezcan todos los caracteres. ¿Me estoy perdiendo algo obvio sobre por qué esto es difícil?
Ladadadada

Respuestas:

17

Lista con números de línea y eliminar por número.

iptables --line-numbers --list

Luego elimine una regla usando su número de línea. Luego repita (los números de línea cambian para las siguientes reglas cuando se elimina uno, así que vuelva a enumerar antes de eliminar otro).

iptables -D INPUT 6
Brian
fuente
2
Gracias por este amigo! Aceptará esto en cuestión de minutos.
Leandro Garcia
¿Esto seguirá siendo persistente después de un reinicio?
Native Coder
10
iptables-save | uniq | iptables-restore

Eso es todo lo que necesitas realmente.

Ricky Neff
fuente
2
AFAICT, esto solo eliminará los duplicados adyacentes. No podrá eliminar duplicados no adyacentes.
sampablokuper
4

Si solo desea eliminar las líneas dobles que son directamente una tras otra , puede exportarlas, unificarlas y volver a importarlas con

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

Si desea eliminar otras líneas, use un editor en ~ / tmp / iptables.conf antes de volver a importarlo de la misma manera.

Comprueba tus nuevas reglas con

iptables-save
rubo77
fuente
Si lo que busca es eliminar los duplicados adyacentes, entonces la respuesta de Ricky Neff es más segura, ya que evita exponer las reglas del firewall a otros usuarios a los que tiene acceso /tmp.
sampablokuper
1
Gracias, tienes razón, no deberías usar / tmp porque es legible en todo el mundo. Lo cambié a~/tmp
rubo77
2

Un comentario a fail2ban: fail2ban parece agregar sus propias reglas de iptables. Por lo tanto, no debe almacenar estas reglas con, por ejemplo, iptables-save. Luego, después de un reinicio, las reglas se duplicarán (su regla guardada + la regla agregada por fail2ban).

Halboffen
fuente
2

Eliminar todas las líneas duplicadas excepto COMMIT

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

Estoy usando un script bash tan pequeño que se ejecuta a través de 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
fuente