Regole iptable duplicate


18

Ho queste regole 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

Le linee

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

e

-A fail2ban-ssh -j RETURN

sembra essere duplicato o scritto due volte. Come posso rimuovere il duplicato?


Apri il file nel tuo editor preferito, vai alla riga in questione, tieni premuto il tasto Canc fino a quando tutti i caratteri scompaiono. Mi sto perdendo qualcosa di ovvio sul perché questo è difficile?
Ladadadada,

Risposte:


17

Elenco con numeri di riga ed eliminazione per numero.

iptables --line-numbers --list

Quindi eliminare una regola usando il suo numero di riga. Quindi ripeti (i numeri di riga cambiano per le seguenti regole quando uno viene eliminato, quindi ri-elencalo prima di eliminarne un altro).

iptables -D INPUT 6

2
Grazie per questo amico! Lo accetterò in pochi minuti.
Leandro Garcia,

Questo rimarrà persistente dopo un riavvio?
Native Coder,

10
iptables-save | uniq | iptables-restore

Questo è tutto ciò che serve davvero.


2
AFAICT, questo rimuoverà solo i duplicati adiacenti. Non riuscirà a rimuovere i duplicati non adiacenti.
sampablokuper,

4

Se si desidera eliminare solo le doppie linee che sono direttamente una dopo l'altra, è possibile esportare, unificare e reimportare con

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

Se si desidera eliminare altre righe, utilizzare un editor su ~ / tmp / iptables.conf prima di reimportarlo allo stesso modo.

Controlla le tue nuove regole con

iptables-save

Se si cerca di eliminare duplicati adiacenti, la risposta di Ricky Neff è più sicura, perché evita di esporre le regole del firewall ad altri utenti che hanno accesso /tmp.
sampablokuper,

1
grazie, hai ragione, non dovresti usare / tmp perché è leggibile dal mondo. L'ho cambiato in~/tmp
rubo77

2

Un commento a fail2ban: fail2ban sembra aggiungere le sue stesse regole iptables. Quindi non dovresti archiviare queste regole con es. Iptables-save. Quindi dopo un riavvio le regole saranno raddoppiate (la regola salvata + la regola aggiunta da fail2ban).


2

Elimina tutte le righe duplicate tranne COMMIT

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

0

Sto usando un piccolo script bash che attraversa 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.