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).