iptables -A
dołącza reguły na końcu zestawu reguł, podczas gdy iptables -I
wstawia 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 -I
pracowałeś dla ciebie, a -A
nie. 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ć, -A
gdy 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 -I
nastę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).