Różnica między opcjami iptables -A i -I

20

Próbowałem (od wielu godzin) skonfigurować iptables, aby zezwalały na zapytania DNS do mojego serwera DNS i właśnie dowiedziałem się, że moje iptables nadal blokują dostęp z powodu opcji dodawania reguły, z której korzystałem. Większość forów sugeruje regułę podobną do następującej:

iptables -A INPUT -p udp -m udp --dport 53 -j ACCEPT

Jednak w moim przypadku musiałem zmienić regułę na inserttyp, aby działała:

iptables -I INPUT -p udp -m udp --dport 53 -j ACCEPT

Wiem, że jedna reguła dotyczy dodawania, a druga wstawiania, a także co oznaczają oba terminy, ale czy ktoś mógłby wyjaśnić różnicę między nimi, a także kiedy użyć której opcji? Sprawdziłem iptables Ubuntu, ale nie widzę tam wielu informacji.

Zishan
źródło

Odpowiedzi:

24

iptables -Adołącza reguły na końcu zestawu reguł, podczas gdy iptables -Iwstawia regułę w określonej pozycji w zestawie reguł, jak wskazałeś.

Patrząc na wpis man dla iptables pokazuje to:

-I, --insert specyfikacja łańcucha [rulenum] Wstaw jedną lub więcej reguł do wybranego łańcucha jako podany numer reguły. Tak więc, jeśli numerem reguły jest 1, reguła lub reguły są wstawiane na początku łańcucha. Jest to również domyślne, jeśli nie podano numeru reguły.

I oto powód, dla którego -Ipracowałeś dla ciebie, a -Anie. Jeśli nie podasz żadnej reguły, twoja reguła zostanie wstawiona na pierwszym miejscu. Oznacza to w twoim przypadku, że gdzieś w twoim zestawie reguł musi być reguła zabraniająca pakietów DNS (może reguła, która ogólnie zabrania UDP?), Ponieważ iptables przetwarza wszystkie reguły od pierwszej do ostatniej, stosuje pierwsze dopasowanie i zatrzymuje się.
Btw, to jest również powód, dla którego powinieneś umieścić reguły, które mają pasować do większości pakietów na górze: jeśli umieścisz najczęściej używaną regułę na i, pakiet jest sprawdzany pod kątem każdej reguły, która może zużywać wiele zasobów.

I do użycia: możesz spokojnie używać, -Agdy chcesz dołączyć regułę na końcu lub gdy nie ma znaczenia, gdzie będzie twoja reguła. Jeśli chcesz, aby twoja reguła znajdowała się na określonej pozycji, skorzystaj z -Inastępującej opcji na przykład: iptables -I INPUT 6 -p tcp -j DROP(spowoduje to dodanie instrukcji DROP do wszystkich pakietów tcp zaadresowanych do samego hosta na pozycji 6 w zestawie reguł INPUT).

wullxz
źródło