iptables Traversal und die Kettenrichtlinien, manuelle Bearbeitung

iptables Traversal und die Kettenrichtlinien, manuelle Bearbeitung

Ich bearbeite die iptables-Datei gerne manuell, aber es gibt etwas, das mich ein wenig verwirrt.

So wie ich iptables im Handbuch verstanden habe, durchläuft es die Regeln von oben nach unten, und wenn keine Übereinstimmung möglich ist, wird es protokolliert und von den Standardregeln unten abgelehnt.

Alles gut.

Aber was bedeutet das:

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
<accept ssh, ssl, etc>
<log all, deny all>

Die Ketten oben haben die Standardrichtlinie „Akzeptieren“ – ist das nur eine Art zu sagen, dass wir die Pakete in die filterTabelle aufnehmen, um sie später abzugleichen? Nachdem ich das Handbuch gelesen habe, kommt es mir so vor, als würde es alles akzeptieren und dann die Regeln nicht lesen, weil Regeln standardmäßig so funktionieren – wenn etwas übereinstimmt, wird das Lesen der Regeln beendet und dann das ausgeführt, was die Richtlinie vorgibt. Gibt es irgendeine Dokumentation dieses Verhaltens? Ich kann nichts Spezifisches finden.

*filterIch habe auch dies nach der Tabelle gesehen :

*filter
:RH-Firewall-1-INPUT - [0:0]

Dadurch haben Sie die Möglichkeit, eigene Ketten hinzuzufügen und andere Ketten zu dieser Kette zu leiten:

-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT

Allerdings wird hier für diese Kette überhaupt kein „ACCEPT“ bzw. „DROP“ angegeben, stattdessen steht dort ein Bindestrich (-).

Was mich noch verwirrter macht – wie funktioniert es?

Antwort1

  1. Die Richtlinie einer integrierten Kette bestimmt, was mit Paketen geschieht, die alle Regeln in der Kette durchlaufen, ohne mit einer einzigen Regel mit einem dispositiven Ziel übereinzustimmen. In Ihrem obigen Beispiel FORWARDwerden Pakete, die die gesamte Kette durchlaufen, ohne mit einer Regel mit einem dispositiven Ziel übereinzustimmen ACCEPT, zurückgewiesen, da die Richtlinie der Kette lautet ACCEPT.

  2. Benutzerdefinierte Ketten können keine Richtlinie haben. Pakete, die den gesamten Weg durch eine benutzerdefinierte Kette gehen, ohne einer Regel mit einem dispositiven Ziel zu entsprechen, kehren zu der Kette zurück, von der sie an die benutzerdefinierte Kette gesendet wurden (die „aufrufende Kette“), und zwar an der Regel nach der Regel, die sie dorthin gesendet hat.

AdispositivZiel ist ein Ziel, das ein Paket entsorgt; Beispiele sind DROP, ACCEPT, und MASQUERADE; nicht-dispositive Ziele sind LOG, und das Nullziel (es ist völlig zulässig, eine Regel ohne Ziel zu haben). Wenn ein Paket einer Regel mit einem dispositiven Ziel entspricht, wird das Paket als entsorgt betrachtet und es erfolgt keine weitere Regelverarbeitung. Wenn ein Paket einer Regel ohne dispositives Ziel entspricht, wird die Paketverarbeitung mit der nächsten Regel fortgesetzt.

Eine wichtige Folgerung aus dieser Logik der Zielzuordnung und Disposition ist, dassSiege im ersten Dispositive-Match. Zu oft sehen wir Fragen auf SF, bei denen Leute eine Kette haben, die beispielsweise lautet:

Chain INPUT (policy ACCEPT 210 packets, 22621 bytes)
 pkts bytes target     prot opt in     out     source        destination         
3224K 1330M DROP       tcp  --  *      *       0.0.0.0/0     0.0.0.0/0     tcp dpt:80

die eine einzige Regel enthält, um den Zugriff auf einen Webserver zu blockieren ( tcp dpt:80). Sie möchten einer einzelnen externen IP-Adresse, sagen wir 1.2.3.4, den Zugriff auf diesen Webserver erlauben, also fügen sie eine Regel mit

iptables -A INPUT -p tcp --dport 80 -s 1.2.3.4 -j ACCEPT

und am Ende haben sie eine Kette wie diese

Chain INPUT (policy ACCEPT 210 packets, 22621 bytes)
 pkts bytes target     prot opt in     out     source        destination         
3224K 1330M DROP       tcp  --  *      *       0.0.0.0/0     0.0.0.0/0     tcp dpt:80
    0     0 ACCEPT     tcp  --  *      *       1.2.3.4       0.0.0.0/0     tcp dpt:80

Wie Sie sehen, beträgt die Paketanzahl bei der letzten Regel Null -und sie werden immer Null sein. Kein Paket kann dieser letzten Regel entsprechen, ohne dass es mit dem vorherigen übereinstimmt, und das vorherige ist dispositiv ( DROP), sodass kein Paket jemals diese letzte Regel erreichen wird.

Der richtige Umgang damit istStellen Sie sicher, dass Ihre Ausnahmen vor Ihren Regeln stehen, so was:

Chain INPUT (policy ACCEPT 210 packets, 22621 bytes)
 pkts bytes target     prot opt in     out     source        destination         
   20   875 ACCEPT     tcp  --  *      *       1.2.3.4       0.0.0.0/0     tcp dpt:80
3224K 1330M DROP       tcp  --  *      *       0.0.0.0/0     0.0.0.0/0     tcp dpt:80

Jetzt werden zuerst die Ausnahmeakzeptanzen behandelt, dann werden andere Webserverpakete, die nicht vom Ausnahmeserver stammen, behandelt und gelöscht, und schließlich kümmert sich die Kettenrichtlinie um alle anderen Pakete und akzeptiert sie.

verwandte Informationen