Unterschied zwischen der iptables-Standardrichtlinie zu "DROP" und dem Einfügen einer separaten Richtlinie in die Eingabekette für alle DROP-Verbindungen

9432
dig_123

Ich versuche, alle eingehenden Verbindungen zu meinem Server, außer von bestimmten Netzwerken, zu DROPEN. Gleichzeitig möchte ich alle ausgehenden Verbindungen von meinem Server zu einem externen Netzwerk (jedes Netzwerk über ein beliebiges Protokoll) offen halten. Es funktioniert, indem Sie unten zwei Änderungen in der INPUT-Kette vornehmen:

Hinweis: Der Test wurde mit 3 Servern (VMs) mit IPs im Netzwerk 192.168.0.0/24 und allen auf Server3 definierten Regeln (IP: 192.168.0.3) durchgeführt.

a. iptables -P INPUT DROP b. iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT [root@server3 ~]# iptables -nvL  Chain INPUT (policy DROP 124 packets, 22308 bytes) pkts bytes target prot opt in out source destination  265 34603 ACCEPT all -- * * 192.168.0.0/24 0.0.0.0/0   Chain FORWARD (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination   Chain OUTPUT (policy ACCEPT 433 packets, 34693 bytes) pkts bytes target prot opt in out source destination  

Meine erste Frage:

  1. Bei der Definition der ersten Regel (Änderung der Standardrichtlinie für die INPUT-Kette) wurden alle ausgehenden Verbindungen (ssh, ping) von meinem Server (IP: 192.168.0.3) ebenfalls gestoppt. Warum geschieht dies, wenn meine Standardrichtlinie für die OUTPUT-Kette immer noch akzeptiert wird und ich keine Regeln unter der OUTPUT-Kette definiert habe?

Ich wollte dasselbe erreichen, indem ich die Standardrichtlinie für die INPUT-Kette nicht wie folgt veränderte:

c. iptables -I INPUT -j DROP d. iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT 

Es blockiert jedoch immer noch alle eingehenden / ausgehenden Verbindungen zu / von meinem Server3. Das bringt mich zu meiner zweiten Frage:

  1. Wie sind die Regeln c.und a.funktionieren anders? Bitte helfen Sie beim Verständnis, da ich Linux-Firewalls noch nicht kennen.
2

1 Antwort auf die Frage

6
NuTTyX

Wenn Sie über eine DROP INPUT-Standardrichtlinie verfügen, werden sogar die Antwortpakete Ihrer ausgehenden Verbindungen verworfen.

Um diese zu akzeptieren, fügen Sie diese Eingaberegel hinzu:

iptables -I INPUT 1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT 

Was Ihre letzte Frage angeht, setzen Sie in Ihrem c and dBeispiel (vorausgesetzt, dass leere Befehle vor diesen Befehlen angenommen werden) eine erste drop everythingund eine zweite Regel, die den Verkehr von einem bestimmten Netzwerk akzeptieren würde. IPTABLES holt sich so schnell wie möglich eine Übereinstimmung, so dass die erste Regel immer übereinstimmt (keine Bedingung festgelegt), sodass keine Regel danach ausgeführt wird. Ausnahmen von einer Regel müssen vor der Regel definiert werden .

Im ersten Beispiel -P INPUT DROPlegen Sie eine letzte Regel fest, die alles abfängt, was zuvor nicht abgeglichen wurde, sodass alle hinzugefügten Ausnahmen vor dieser Standardregel ( -P) ausgeführt werden.

-I fügt an einer bestimmten Position ein (z. B. setze ich in meinem vorherigen Befehl die Regel ESTABLISHED, RELATED als erste Regel ein, sodass sie unabhängig davon ist, was Sie danach setzen.

-A Hängt an die Regelliste an, also ob direkt vor der Standardeinstellung abgeglichen wird.

Wenn Sie mit expliziten Regeln (wie c and d) das Gleiche wie das erste Beispiel erreichen möchten, sollten Sie deren Eigenschaften austauschen.

Vielen Dank für die ausführliche Erklärung. Die Bedeutung der "Reihenfolge" der Regeln in jeder KETTE ist jetzt klarer. Noch eine Frage zu der von Ihnen vorgeschlagenen "Regel". Verhält es sich wie: iptables -I INPUT 1 -m state -state ESTABLISHED, RELATED -j ACCEPT? dig_123 vor 10 Jahren 0
Es ist das gleiche. "State" ist "älter" und es scheint, dass "conntrack" der Standard für neuere Kernel sein wird. Weitere Informationen finden Sie unter http://serverfault.com/questions/358996/iptables-whats-the-difference- zwischenween-m-state-and-m-conntrack. NuTTyX vor 10 Jahren 1