Bir iptables zincirini tüm kuralları ile sil


31

Gibi birçok kurallara eklenmiş bir zincir var:

> :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

Bu zinciri silmeyi denediğimde:

iptables -X XXXX

ancak şöyle hata var (iptables -F XXXXX ürününü daha önce denedi):

iptables: Çok fazla bağlantı var.

Bir kez komutla zinciri silmek için kolay bir yol var mı?


2
Sifon almaya çalışırken daha önce iptables barf görmemiştim.
Tom O'Connor,

Sadece merak ediyorum ... kaç tane kural var?
Ladadadada

1
2 tane daha çok :) ilk önce kuralları silmeye çalışırsam, birçok kez yazmaktan hoşlanacak: iptables -D OUTPUT -d XXX / 32 -j i_XXXXX_i
timy

3
Bunu dene:iptables-save | grep -v i_XXXXX_i | iptables-restore
Steven Monday

@StevenMonday neden cevap olarak yazmıyorsa, bu en kullanışlı olanıdır (alternatif bunu dosya ve dosya ile yap). O kaldırmaz tek şey (zaten "ham") tam tablolar olduğunu
nhed

Yanıtlar:


38

'-J CHAINTODELETE' olan kurallar bunlara atıfta bulunurken zincirleri silemezsiniz. Zincirinize neyin neyin referans verdiğini anlayın ve bunu kaldırın. Ayrıca, yıkayın ve öldürün.

-F, - floş [zincir]

Seçilen zinciri yıkayın (eğer belirtilmemişse, tablodaki tüm zincirler). Bu, tüm kuralları birer birer silmeye eşdeğerdir.

-X, --delete zinciri [zincir]

Belirtilen isteğe bağlı kullanıcı tanımlı zinciri silin. Zincir için referans olmamalıdır. Varsa , zincir silinmeden önce yönlendirme kurallarını silmeniz veya değiştirmeniz gerekir . Zincir boş olmalıdır, yani herhangi bir kural içermemelidir. Eğer bir argüman verilmezse, tablodaki bütün yerleşik olmayan zincirleri silmeye çalışır.


Doğrudan zinciri silmenin bir yolunu bulmak istiyorum (birçok '-j CHAINTODELETE' ref kuralına sahip) doğrudan, ancak cevabınızdan, imkansız görünüyor :(
timy

1
@timy StevenMonday'ın yorumu, zincirdeki tüm başvuruları kaldıracak tek geçişli olacak. Belki de ideal değil, ama çok yakın.
Jeff Ferland,

12

Bu potansiyel dışı bir konudur, ancak bu yazıyı bulduktan sonra yaptığım şey! Bazı kullanım durumlarında iptables -D seçeneği faydalı olabilir. Programatik olarak -A ile eklenen kurallara atıfta bulunmanıza izin vermediğinden (tam olarak nasıl eklediğinizi biliyorsanız).

Örneğin

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

ile tersine çevrilebilir

   iptables -D INPUT -i interface -j MYCHAIN
   iptables --flush MYCHAIN
   iptables -X MYCHAIN

8

İki adıma ihtiyacınız var, ancak bu tek komutla gerçekleştiriliyor.

Bir dosya oluşturun ve bunu içine yerleştirin.

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

Dosyayı "tüm kuralları temizle" olarak kaydedin. Şimdi, şu komutu yap:

iptables-restore < clear-all-rules

Şimdi tek bir komutla istediğiniz zaman silebilirsiniz.


1
+1 Bu aslında temiz bir fw config ile başlamanın en hızlı yoludur.
dr01

6

İşte alternatif bir plan. Üç komutu içerir, biri değil ama şansla çalışmalı.

Senin dökümü iptablesbir dosyaya kural setine:

iptables-save > /tmp/iptables.txt

Suçlu zincirin TÜM kullanımlarını (ve bunlara referansları) kaldırın:

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

Sonra kural kümesini yeniden yükleyin:

iptables-restore < /tmp/iptables.txt && rm /tmp/iptables.txt

0

Bu satırlar boyunca bir şey, herhangi bir şekilde iptables almadan tek bir satırda hepsini alacak.

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

0

İptables adam dosyasında bir seçenek var -S

S, --list-rules [chain] Seçilen zincirdeki tüm kuralları yazdır. Hiçbir zincir seçilmezse, tüm zincirler iptables-save gibi yazdırılır. Diğer tüm iptables komutları gibi, belirtilen tabloya uygulanır (filtre varsayılandır).

Kullanarak iptables -S | grep <CHAINNAMEHERE>. Örneğin:

root @ root: ~ # iptables -S | grep TRAFİKOĞLU

-N TRAFİKOĞLU

-Bİ FORWARD -i eth0 -j TRAFİKOGRAF

hangi kuralların zincirin tablodan silinmesini engellediğini görebilirsiniz. Her kuralı uygulayın (hariç iptables -N <CHAINNAMEHERE>ve -Dseçeneği kullanarak kuralı silin).

-D, --delete zincir rulenum Seçilen zincirden bir veya daha fazla kuralı sil. Bu komutun iki sürümü vardır: kural zincirde bir sayı (ilk kural için 1'den başlayarak) veya eşlenecek bir kural olarak belirtilebilir.

Örneğin iptables -D FORWARD -i eth0 -j TRAFFICLOG. Zinciriniz için her kuralı sildikten sonra, zinciri -Fseçeneği ile yıkayın iptables -F <CHAINNAMEHERE>.

-F, --flush [chain] Seçili zinciri yıkayın (eğer belirtilmemişse, tablodaki tüm zincirler). Bu, tüm kuralları birer birer silmeye eşdeğerdir.

Ardından zincirinizi -Xseçenekle silin ,iptables -X <CHAINNAMEHERE>

-X, --delete-chain [chain] Belirtilen isteğe bağlı kullanıcı tanımlı zinciri silin. Zincir için referans olmamalıdır. Varsa, zincir silinmeden önce yönlendirme kurallarını silmeniz veya değiştirmeniz gerekir. Zincir boş olmalıdır, yani herhangi bir kural içermemelidir. Eğer bir argüman verilmezse, tablodaki bütün yerleşik olmayan zincirleri silmeye çalışır.

Iptables, karmaşık bir araç seti olduğundan ideal bir eğitime ihtiyaç duyulmaktadır. Birini www.iptables.info adresinde deneyebilirsiniz.


0

Bu zincirleri tükürecek ve silecek

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

0

/Etc/iptables/rules.v4 dosyasındaki kurallar dosyasını düzenleyerek kuralları ve zinciri kaldırabileceğinizi öğrendim. Bu dosyadaki istenmeyen zinciri silip ardından iptables'ı yeniden yüklerseniz, iptables -L yaparken zinciri görmemelisiniz.


Bu dosya yalnızca belirli Linux dağıtımlarında ve ardından yalnızca belirli Linux dağıtımlarının belirli sürümlerinde bulunur.
Michael Hampton
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.