Zduplikowane iptable reguły

18

Mam te iptable zasady:

-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

Linie

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

i

-A fail2ban-ssh -j RETURN

wydaje się być duplikowane lub pisane dwukrotnie. Jak mogę usunąć duplikat?

Leandro Garcia
źródło
Otwórz plik w swoim ulubionym edytorze, przejdź do odpowiedniego wiersza, przytrzymaj klawisz usuwania, aż wszystkie znaki znikną. Czy brakuje mi czegoś oczywistego na temat tego, dlaczego jest to trudne?
Ladadadada

Odpowiedzi:

17

Wyświetl listę z numerami linii i usuń według numeru.

iptables --line-numbers --list

Następnie usuń jedną regułę, używając jej numeru linii. Następnie powtórz (numery linii zmieniają się zgodnie z następującymi regułami, gdy jedna zostanie usunięta, więc ponownie wypisz listę przed usunięciem innej).

iptables -D INPUT 6
Brian
źródło
2
Dzięki za tego kumpla! Zaakceptuję to w ciągu kilku minut.
Leandro Garcia,
Czy to pozostanie trwałe po ponownym uruchomieniu?
Native Coder
10
iptables-save | uniq | iptables-restore

To wszystko, czego naprawdę potrzebujesz.

Ricky Neff
źródło
2
AFAICT, spowoduje to usunięcie tylko sąsiadujących duplikatów. Nie uda się usunąć nieprzylegających duplikatów.
sampablokuper
4

Jeśli chcesz usunąć tylko podwójne linie, które są bezpośrednio po sobie, możesz je wyeksportować, ujednolicić i ponownie zaimportować

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

Jeśli chcesz usunąć inne wiersze, użyj edytora na ~ / tmp / iptables.conf, zanim ponownie zaimportujesz go w ten sam sposób.

Sprawdź swoje nowe zasady za pomocą

iptables-save
rubo77
źródło
Jeśli chcesz usunąć sąsiadujące duplikaty, odpowiedź Ricky Neff jest bezpieczniejsza, ponieważ pozwala uniknąć ujawnienia zapory regułom innym użytkownikom, którzy mają do niej dostęp /tmp.
sampablokuper
1
dzięki, masz rację, nie powinieneś używać / tmp, ponieważ jest on czytelny na całym świecie. Zmieniłem go na~/tmp
rubo77,
2

Komentarz do fail2ban: fail2ban wydaje się dodawać swoje własne reguły iptables. Dlatego nie powinieneś przechowywać tych reguł z np. Iptables-save. Następnie po ponownym uruchomieniu reguły zostaną podwojone (zapisana reguła + reguła dodana przez fail2ban).

halboffen
źródło
2

Usuń wszystkie zduplikowane linie oprócz COMMIT

/sbin/iptables-save | awk '!COMMIT||!x[$0]++' | /sbin/iptables-restore
Andrey Dmitriev
źródło
0

Używam tak małego skryptu bash, który działa przez 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
źródło