Usuń łańcuch iptables z wszystkimi regułami

31

Mam łańcuch dołączony z wieloma zasadami, takimi jak:

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

kiedy próbuję usunąć ten łańcuch za pomocą:

iptables -X XXXX

ale dostał błąd jak (wcześniej próbowałem iptables -F XXXXX):

iptables: Zbyt wiele linków.

Czy istnieje prosty sposób na usunięcie łańcucha za pomocą polecenia jednorazowego?

czasowo
źródło
2
Nie widziałem wcześniej takiego barf iptables podczas próby spłukiwania.
Tom O'Connor,
Ciekawe ... ile reguł to „wiele”?
Ladadadada,
1
2 wiele jest wielu :) jeśli spróbuję najpierw usunąć reguły, to będzie chciał pisać wiele razy: iptables -D WYJŚCIE -d XXX / 32 -j i_XXXXX_i
czas
3
Spróbuj tego:iptables-save | grep -v i_XXXXX_i | iptables-restore
Steven poniedziałek
@StevenMonday może napisać jako odpowiedź, jest to najbardziej przydatna (alternatywnie zrób to za pomocą pliku i edytuj plik). Jedyną rzeczą, której nie usuwa, są kompletne tabele (w każdym razie „surowe”)
nhed

Odpowiedzi:

38

Nie można usuwać łańcuchów, gdy odnoszą się do nich reguły z „-j CHAINTODELETE”. Dowiedz się, do czego odnosi się Twój łańcuch (link), i usuń to. Ponadto spłucz, a następnie zabij.

-F, --flush [łańcuch]

Opróżnij wybrany łańcuch (wszystkie łańcuchy w tabeli, jeśli nie podano żadnego). Jest to równoważne z usunięciem wszystkich reguł jeden po drugim.

-X, --delete-chain [łańcuch]

Usuń określony opcjonalny łańcuch zdefiniowany przez użytkownika. Nie może być żadnych odniesień do łańcucha. Jeśli tak, musisz usunąć lub zastąpić reguły odsyłające, zanim łańcuch będzie można usunąć. Łańcuch musi być pusty, tzn. Nie może zawierać żadnych reguł. Jeśli nie podano żadnego argumentu, spróbuje on usunąć każdy niewbudowany łańcuch w tabeli.

Jeff Ferland
źródło
Chcę tylko znaleźć sposób na usunięcie łańcucha (ma wiele reguł odwołań „-j CHAINTODELETE”) bezpośrednio, ale z twojej odpowiedzi wydaje się to niemożliwe :(
timy
1
Komentarz @timy StevenMonday spowoduje jednoprzebiegowe usunięcie wszelkich odniesień do łańcucha. Może nie idealny, ale cholernie blisko.
Jeff Ferland
12

Jest to potencjalnie nie na temat, ale zrobiłem to po znalezieniu tego postu! W niektórych przypadkach przydatna może być opcja iptables -D. Ponieważ pozwala wyczyścić reguły odsyłania dodane programowo za pomocą -A (jeśli dokładnie wiesz, jak je dodałeś).

Na przykład

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

można odwrócić za pomocą

   iptables -D INPUT -i interface -j MYCHAIN
   iptables --flush MYCHAIN
   iptables -X MYCHAIN
Att Righ
źródło
8

Potrzebujesz dwóch kroków, ale robi to za pomocą jednego polecenia.

Utwórz plik i umieść go w nim.

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

Zapisz plik jako „wyczyść wszystkie reguły”. Teraz wykonaj to polecenie:

iptables-restore < clear-all-rules

Teraz możesz go wyczyścić w dowolnym momencie za pomocą jednego polecenia.

Avery Payne
źródło
1
+1 To właściwie najszybszy sposób na rozpoczęcie od czystej konfiguracji fw.
dr01
6

Oto alternatywny plan. Obejmuje trzy polecenia, a nie jedno, ale przy odrobinie szczęścia powinno działać.

Zrzuć iptableszestaw reguł do pliku:

iptables-save > /tmp/iptables.txt

Usuń WSZYSTKIE zastosowania (i odniesienia do) przestępczego łańcucha:

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

Następnie ponownie załaduj zestaw reguł:

iptables-restore < /tmp/iptables.txt && rm /tmp/iptables.txt
Steven Monday
źródło
0

Coś wzdłuż tych linii zgromadzi je wszystkie w jednym wierszu, bez jakiegokolwiek obniżania iptables.

for chain in `iptables -L |grep i_XXXXX_i|awk '{ print $2 }'`; do iptables -X $chain; done
Flickerfly
źródło
0

W pliku man iptables jest opcja -S

S, --list-rules [łańcuch] Wydrukuj wszystkie reguły w wybranym łańcuchu. Jeśli nie zostanie wybrany żaden łańcuch, wszystkie łańcuchy zostaną wydrukowane jak iptables-save. Jak każda inna komenda iptables, ma ona zastosowanie do określonej tabeli (domyślnym filtrem).

Za pomocą iptables -S | grep <CHAINNAMEHERE>. Dla przykładów:

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

-N TRAFFICLOG

-A DO PRZODU -i eth0 -j TRAFFICLOG

możesz wtedy zobaczyć, które reguły blokują usunięcie łańcucha ze stołu. Przejdź przez każdą regułę (z wyjątkiem iptables -N <CHAINNAMEHERE>i usuń regułę za pomocą -Dopcji)

-D, --delete łańcuch reguły Usuń jedną lub więcej reguł z wybranego łańcucha. Istnieją dwie wersje tego polecenia: regułę można określić jako liczbę w łańcuchu (zaczynając od 1 dla pierwszej reguły) lub regułę pasującą.

Na przykład iptables -D FORWARD -i eth0 -j TRAFFICLOG. Po usunięciu każdej reguły dla spłukiwania łańcucha łańcucha z -Fopcji iptables -F <CHAINNAMEHERE>.

-F, --flush [łańcuch] Opróżnij wybrany łańcuch (wszystkie łańcuchy w tabeli, jeśli nie podano żadnego). Jest to równoważne z usunięciem wszystkich reguł jeden po drugim.

Następnie usuń swój łańcuch z -Xopcją,iptables -X <CHAINNAMEHERE>

-X, --delete-chain [łańcuch] Usuń określony opcjonalny łańcuch zdefiniowany przez użytkownika. Nie może być żadnych odniesień do łańcucha. Jeśli tak, musisz usunąć lub zastąpić reguły odsyłające, zanim łańcuch będzie można usunąć. Łańcuch musi być pusty, tzn. Nie może zawierać żadnych reguł. Jeśli nie podano żadnego argumentu, spróbuje on usunąć każdy niewbudowany łańcuch w tabeli.

Iptables to skomplikowany zestaw narzędzi, dlatego potrzebny jest idealny samouczek. Możesz go wypróbować na www.iptables.info

Jacob Bryan
źródło
0

Spowoduje to wyplucie łańcuchów i ich usunięcie

for i in $(iptables -S | awk '{print $2}' | uniq ); do iptables -F $i && iptables -Z $i && iptables -X $i  ; done
użytkownik1007727
źródło
0

Odkryłem, że możesz usunąć reguły i łańcuch, edytując plik reguł w /etc/iptables/rules.v4. Jeśli usuniesz niechciany łańcuch z tego pliku, a następnie przeładujesz iptables, nie powinieneś już widzieć łańcucha podczas robienia iptables -L.

Jay Phillips
źródło
Ten plik istnieje tylko w niektórych dystrybucjach systemu Linux, a następnie tylko w niektórych wersjach niektórych dystrybucji systemu Linux.
Michael Hampton