Hapus rantai iptables dengan semua aturannya

31

Saya memiliki rantai yang ditambahkan dengan banyak aturan seperti:

> :i_XXXXX_i - [0:0]
> -A INPUT -s 282.202.203.83/32 -j i_XXXXX_i 
> -A INPUT -s 222.202.62.253/32 -j i_XXXXX_i 
> -A INPUT -s 222.202.60.62/32 -j i_XXXXX_i 
> -A INPUT -s 224.93.27.235/32 -j i_XXXXX_i 
> -A OUTPUT -d 282.202.203.83/32 -j i_XXXXX_i 
> -A OUTPUT -d 222.202.62.253/32 -j i_XXXXX_i 
> -A OUTPUT -d 222.202.60.62/32 -j i_XXXXX_i 
> -A OUTPUT -d 224.93.27.235/32 -j i_XXXXX_i

ketika saya mencoba menghapus rantai ini dengan:

iptables -X XXXX

tetapi mendapat kesalahan seperti (mencoba iptables -F XXXXX sebelumnya):

iptables: Terlalu banyak tautan.

Apakah ada cara mudah untuk menghapus rantai dengan sekali perintah?

tepat waktu
sumber
2
Saya belum pernah melihat iptables muntah seperti itu sebelumnya ketika mencoba memerah.
Tom O'Connor
Hanya ingin tahu ... berapa banyak aturan "banyak"?
Ladadadada
1
2 many is many :) jika saya mencoba untuk menghapus aturan terlebih dahulu, itu akan seperti mengetik berkali-kali: iptables -D OUTPUT -d XXX / 32 -j i_XXXXX_i
tepat waktu
3
Coba ini:iptables-save | grep -v i_XXXXX_i | iptables-restore
Steven Monday
@StevenMonday mengapa tidak menulis sebagai jawaban, ini adalah yang paling berguna (lakukan alternatif ini melalui file dan edit file). Satu-satunya hal yang tidak dihapus adalah tabel lengkap ("mentah")
nhed

Jawaban:

38

Anda tidak dapat menghapus rantai ketika aturan dengan '-j CHAINTODELETE' merujuknya. Cari tahu apa yang mereferensikan rantai Anda (tautan), dan hapus itu. Juga, siram kemudian bunuh.

-F, --flush [rantai]

Siram rantai yang dipilih (semua rantai di tabel jika tidak ada yang diberikan). Ini sama dengan menghapus semua aturan satu per satu.

-X, --delete-chain [rantai]

Hapus rantai yang ditentukan pengguna opsional yang ditentukan. Tidak boleh ada referensi ke rantai. Jika ada, Anda harus menghapus atau mengganti aturan rujukan sebelum rantai dapat dihapus. Rantai harus kosong, yaitu tidak mengandung aturan apa pun. Jika tidak ada argumen yang diberikan, ia akan berusaha untuk menghapus setiap rantai non-builtin dalam tabel.

Jeff Ferland
sumber
Saya hanya ingin menemukan cara untuk menghapus rantai (memiliki banyak aturan ref '-j CHAINTODELETE') secara langsung, tetapi dari jawaban Anda, sepertinya tidak mungkin :(
tepat waktu
1
@timy komentar StevenMonday akan menghapus satu saja referensi ke rantai. Mungkin tidak ideal, tetapi sangat dekat.
Jeff Ferland
12

Ini berpotensi di luar topik, tetapi itulah yang saya lakukan setelah saya menemukan posting ini! Untuk beberapa kasus penggunaan, opsi iptables -D mungkin berguna. Karena memungkinkan Anda untuk menghapus aturan rujukan yang ditambahkan secara terprogram dengan -A (jika Anda tahu persis bagaimana Anda menambahkannya).

Misalnya

    iptables -N MYCHAIN
    iptables -A INPUT -i interface -j MYCHAIN
    iptables -A MYCHAIN -j ACCEPT

dapat dibalik dengan

   iptables -D INPUT -i interface -j MYCHAIN
   iptables --flush MYCHAIN
   iptables -X MYCHAIN
Att Righ
sumber
8

Anda perlu dua langkah, tetapi ini melakukannya dalam satu perintah.

Buat file, dan letakkan ini di dalamnya.

# Empty the entire filter table
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT

Simpan file sebagai "hapus semua aturan". Sekarang, lakukan perintah ini:

iptables-restore < clear-all-rules

Sekarang Anda dapat menghapusnya kapan saja hanya dengan satu perintah.

Avery Payne
sumber
1
+1 Ini sebenarnya cara tercepat untuk memulai dengan konfigurasi fw bersih.
dr01
6

Ini rencana alternatif. Ini melibatkan tiga perintah, bukan satu, tetapi dengan keberuntungan, itu harus bekerja.

Buang iptablesaturan Anda ke file:

iptables-save > /tmp/iptables.txt

Hapus SEMUA penggunaan (dan referensi ke) rantai yang menyinggung:

sed -i '/i_XXXXX_i/d' /tmp/iptables.txt

Kemudian muat ulang aturan:

iptables-restore < /tmp/iptables.txt && rm /tmp/iptables.txt
Steven Monday
sumber
0

Sesuatu di sepanjang baris ini akan membuat semuanya dalam satu baris tanpa menurunkan iptables dengan cara apa pun.

for chain in `iptables -L |grep i_XXXXX_i|awk '{ print $2 }'`; do iptables -X $chain; done
flickerfly
sumber
0

Di file iptables man ada opsi -S

S, --list-rules [rantai] Cetak semua aturan dalam rantai yang dipilih. Jika tidak ada rantai yang dipilih, semua rantai dicetak seperti iptables-save. Seperti setiap perintah iptables lainnya, ini berlaku untuk tabel yang ditentukan (filter adalah default).

Dengan menggunakan iptables -S | grep <CHAINNAMEHERE>. Sebagai contoh:

root @ root: ~ # iptables -S | grep TRAFFICLOG

-N TRAFFICLOG

-Sebuah ke depan -i eth0 -j TRAFFICLOG

Anda kemudian dapat melihat aturan mana yang memblokir penghapusan rantai dari tabel. Telusuri setiap aturan (kecuali iptables -N <CHAINNAMEHERE>dan hapus aturan dengan menggunakan -Dopsi

-D, --delete chain ruleenum Hapus satu atau lebih aturan dari rantai yang dipilih. Ada dua versi dari perintah ini: aturan dapat ditentukan sebagai angka dalam rantai (mulai dari 1 untuk aturan pertama) atau aturan yang cocok.

Sebagai contoh iptables -D FORWARD -i eth0 -j TRAFFICLOG. Setelah Anda menghapus setiap aturan untuk rantai Anda siram rantai dengan -Fopsi iptables -F <CHAINNAMEHERE>,.

-F, --flush [rantai] Siram rantai yang dipilih (semua rantai dalam tabel jika tidak ada yang diberikan). Ini sama dengan menghapus semua aturan satu per satu.

Kemudian hapus rantai Anda dengan -Xopsi,iptables -X <CHAINNAMEHERE>

-X, --delete-chain [chain] Hapus rantai opsional yang ditentukan pengguna yang ditentukan. Tidak boleh ada referensi ke rantai. Jika ada, Anda harus menghapus atau mengganti aturan rujukan sebelum rantai dapat dihapus. Rantai harus kosong, yaitu tidak mengandung aturan apa pun. Jika tidak ada argumen yang diberikan, itu akan berusaha untuk menghapus setiap rantai non-builtin dalam tabel.

Iptables adalah seperangkat alat yang rumit sehingga diperlukan tutorial yang ideal. Anda dapat mencobanya di www.iptables.info

Jacob Bryan
sumber
0

Ini akan memuntahkan rantai dan menghapusnya

for i in $(iptables -S | awk '{print $2}' | uniq ); do iptables -F $i && iptables -Z $i && iptables -X $i  ; done
pengguna1007727
sumber
0

Saya telah menemukan bahwa Anda dapat menghapus aturan dan rantai dengan mengedit file aturan di /etc/iptables/rules.v4. Jika Anda menghapus rantai yang tidak diinginkan dalam file ini dan kemudian memuat ulang iptables, Anda seharusnya tidak lagi melihat rantai ketika melakukan iptables -L.

Jay Phillips
sumber
File ini hanya ada pada distribusi Linux tertentu, dan kemudian hanya pada versi tertentu dari distribusi Linux tertentu.
Michael Hampton