TCP-Flags in iptables: Was ist der Unterschied zwischen RST SYN und RST und SYN RST? Wann sollte ALL verwendet werden?

7

Ich arbeite an einer Firewall für einen virtuellen dedizierten Server und eines der Dinge, die ich untersuche, sind Port-Scanner. TCP-Flags werden zum Schutz verwendet. Ich habe 2 Fragen.
Die Regel:

-p tcp --tcp-flags SYN,ACK,FIN,RST SYN -j DROP

Das erste Argument besagt, dass Pakete mit dem Flag SYN überprüft werden sollen. Das zweite Argument besagt, dass die Flags ACK, FIN und RST SYN gesetzt sind
. Wenn dies der Fall ist (es gibt eine Übereinstimmung), lassen Sie das TCP-Paket fallen

Erste Frage:
Ich verstehe die Bedeutung von RST und RST / ACK, aber im zweiten Argument wird RST SYN verwendet.
Was ist der Unterschied zwischen RST SYN und RST und SYN RST?
Gibt es ein "SYN RST" -Flag in einem 3-Wege-Handschlag?

Die zweite Frage betrifft den Unterschied zwischen

-p tcp --tcp-flags SYN,ACK,FIN,RST SYN -j DROP    

und

-p tcp --tcp-flags ALL SYN,ACK,FIN,RST SYN -j DROP    

Wann sollte ALL verwendet werden?
Wenn ich ALL verwende, bedeutet das, dass für das TCP-Paket mit dem Syn-Flag nicht die ACK- und FIN- sowie die RST SYN-Flags gesetzt sind und keine Übereinstimmung vorliegt?

Kris
quelle

Antworten:

14

Diese:

-p tcp --tcp-flags SYN,ACK,FIN,RST SYN -j DROP

bedeutet "Schauen Sie sich die Flags syn, ack, fin und rst an und stimmen Sie mit den Paketen überein, für die das Flag SYN gesetzt ist, und allen anderen nicht gesetzten."

Das erste Argument von tcp-flags sind die Flags, die Sie in Betracht ziehen, das zweite Argument ist die Maske, mit der Sie übereinstimmen möchten. wenn Sie verwendet haben

--tcp-flags SYN,ACK SYN

dann würde es mit Paketen übereinstimmen, die [SYN = 1 ACK = 0] haben, aber es würde nicht mit Paketen übereinstimmen, die [SYN = 1, ACK = 1] oder [SYN = 0, ACK = 1] oder [SYN = 0, ACK haben = 0]

In Ihrer obigen Regel stimmen Sie nur mit SYN-Paketen überein.

Julien Vehent
quelle
16

Ich denke, Sie haben diesen Schalter verwirrt.

Der --tcp-flagsSchalter akzeptiert nur zwei Argumente. Das erste Argument ist, welche Flags überprüft werden sollen. Das zweite Argument sind die Flags aus dem ersten Argument, die für eine Übereinstimmung gesetzt werden sollen. Also deine Linie:

-p tcp --tcp-flags SYN,ACK,FIN,RST SYN -j DROP

Sagt: "Übereinstimmung, wenn nur das SYN-Flag von diesen vier gesetzt ist. (Das Leerzeichen trennt das erste und das zweite Argument.)

-p tcp --tcp-flags ALL SYN -j DROP

bedeutet, ALLE Flags zu überprüfen und diese Pakete mit nichts als SYN-Set abzugleichen. Das dritte Ihrer Beispiele ist eine schlechte Syntax, da es drei Argumente enthält. Ihre erste Regel würde alle neuen TCP-Verbindungen trennen, was wahrscheinlich nicht das ist, was Sie wollen.

Der Switch wird hauptsächlich zum Verwerfen von Paketen mit gesetzten bedeutungslosen TCP-Flags verwendet. Sie würden beispielsweise keine legitimen Pakete erhalten, wenn sowohl SYN als auch RST festgelegt wären, z. B. SYN und FIN. Nehmen Sie dieses Snippet aus einem meiner * Firewall-Skripte:

${IPTABLES} -t filter -A INETIN -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
${IPTABLES} -t filter -A INETIN -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
${IPTABLES} -t filter -A INETIN -p tcp --tcp-flags SYN,URG SYN,URG -j DROP

Diese suchen nach bestimmten Kombinationen von TCP-Flags, die niemals auf natürliche Weise auftreten sollten, und verwerfen die Pakete.

Weitere Informationen finden Sie auf der Manpage .

* (Optimierte Version von Monmotha-2.3.8)

SmallClanger
quelle