Duplikat aturan iptable

18

Saya punya aturan iptable ini:

-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

Garis

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

dan

-A fail2ban-ssh -j RETURN

tampaknya digandakan atau ditulis dua kali. Bagaimana saya bisa menghapus duplikat?

Leandro Garcia
sumber
Buka file di editor favorit Anda, pergi ke baris yang dimaksud, tahan tombol hapus sampai semua karakter hilang. Apakah saya kehilangan sesuatu yang jelas tentang mengapa ini sulit?
Ladadadada

Jawaban:

17

Daftar dengan nomor baris dan hapus dengan nomor.

iptables --line-numbers --list

Kemudian hapus satu aturan menggunakan nomor baris itu. Kemudian ulangi (nomor baris berubah untuk aturan berikut ketika satu dihapus jadi daftar ulang sebelum menghapus yang lain).

iptables -D INPUT 6
Brian
sumber
2
Terima kasih untuk sobat ini! Akan menerima ini dalam hitungan menit.
Leandro Garcia
Apakah ini akan tetap ada setelah reboot?
Native Coder
10
iptables-save | uniq | iptables-restore

Itu yang benar-benar Anda butuhkan.

Ricky Neff
sumber
2
AFAICT, ini hanya akan menghapus duplikat yang berdekatan. Ini akan gagal untuk menghapus duplikat yang tidak berdekatan.
sampablokuper
4

Jika Anda hanya ingin menghapus dua baris secara langsung satu demi satu, Anda dapat mengekspor, menyatukan, dan mengimpornya kembali dengan

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

Jika Anda ingin menghapus baris lain, gunakan editor di ~ / tmp / iptables.conf sebelum Anda mengimpornya kembali dengan cara yang sama.

Periksa aturan baru Anda dengan

iptables-save
rubo77
sumber
Jika menghapus duplikat yang berdekatan adalah yang Anda cari, maka jawaban Ricky Neff lebih aman, karena itu menghindari mengekspos aturan firewall kepada pengguna lain yang memiliki akses /tmp.
sampablokuper
1
thx, Anda benar, Anda tidak boleh menggunakan / tmp karena itu dapat dibaca dunia. Saya mengubahnya ke~/tmp
rubo77
2

Komentar untuk fail2ban: fail2ban tampaknya menambahkan aturan iptables itu sendiri. Jadi Anda sebaiknya tidak menyimpan aturan ini dengan mis. Iptables-save. Kemudian setelah reboot aturan akan berlipat ganda (aturan tersimpan Anda + aturan ditambahkan oleh fail2ban).

halboffen
sumber
2

Hapus semua baris duplikat kecuali KOMIT

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

Saya menggunakan skrip bash kecil yang dijalankan melalui 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
sumber