Unterschied zwischen der Option iptables -A und -I

20

Ich habe (seit Stunden) versucht, iptables so zu konfigurieren, dass DNS-Abfragen an meinen DNS-Server möglich sind, und habe gerade herausgefunden, dass meine iptables den Zugriff aufgrund der von mir verwendeten Option zum Hinzufügen von Regeln blockiert haben. Die meisten Foren schlagen eine Regel vor, die der folgenden ähnelt:

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

In meinem Fall musste ich die Regel jedoch in einen insertTyp ändern , damit sie funktioniert:

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

Ich weiß, dass eine Regel zum Anhängen und die andere zum Einfügen gilt und auch, was beide Begriffe bedeuten. Könnte jemand den Unterschied zwischen den beiden erläutern und auch, wann welche Option zu verwenden ist? Ich habe in Ubuntus Iptables nachgeschlagen, wie man es macht, aber sehe dort nicht viele Informationen.

Zishan
quelle

Antworten:

24

iptables -AFügt Regeln am Ende des Regelsatzes hinzu, während iptables -Idie Regel an einer bestimmten Position im Regelsatz eingefügt wird, wie Sie bereits betont haben.

Ein Blick auf den Man-Eintrag für iptables zeigt Folgendes:

-I, --insert chain [rulenum] Regelspezifikation Fügt eine oder mehrere Regeln in die ausgewählte Kette als angegebene Regelnummer ein. Wenn also die Regelnummer 1 ist, werden die Regeln am Anfang der Kette eingefügt. Dies ist auch die Standardeinstellung, wenn keine Regelnummer angegeben ist.

Und hier ist der Grund, warum -Ifür Sie gearbeitet hat und -Anicht. Wenn Sie kein Rulenum angeben, wird Ihre Regel an der allerersten Stelle eingefügt. Das bedeutet in Ihrem Fall, dass es irgendwo in Ihrem Regelsatz eine Regel geben muss, die DNS-Pakete verbietet (vielleicht eine Regel, die UDP generell verbietet?), Weil iptables alle Regeln vom ersten bis zum letzten verarbeitet, den ersten Abgleich anwendet und stoppt.
Übrigens ist dies auch der Grund, warum Sie die Regeln, die für die meisten Pakete gelten sollen, an die erste Stelle setzen sollten: Wenn Sie die am häufigsten verwendete Regel an und setzen, wird das Paket mit jeder Regel verglichen, die möglicherweise viele Ressourcen verbraucht.

Und für die Verwendung: Sie können sicher verwenden, -Awann Sie eine Regel am Ende anhängen möchten oder wann es egal ist, wo sich Ihre Regel befindet. Wenn Sie möchten, dass sich Ihre Regel an einer bestimmten Position befindet, geben Sie Folgendes ein -I: iptables -I INPUT 6 -p tcp -j DROP(Dies fügt eine DROP-Anweisung für alle TCP-Pakete hinzu, die an den Host selbst auf Position 6 im INPUT-Regelsatz adressiert sind.)

wullxz
quelle