Schließen Sie die ESTABLISHED-Verbindung, die nur auf einer SYN / ACK-Sequenz basiert

383
simo-zz

Nach der Diskussion " Verbindung bleibt als ESTABLISHED gekennzeichnet, auch wenn der Host nicht verbunden ist ", bin ich wieder da, um weitere Informationen anzufordern .

Resume: Ich habe einen Remote-Host (Windows-Client), der eine Verbindung zu meinem Linux-Embedded-System (dem Server, den ich zum Senden oder Empfangen von Daten verwende) herstellt. Sobald der Client verbunden ist, beginnt er in dieser Situation, Daten vom Server über das TCP-Protokoll abzurufen. Wenn der Client die Verbindung trennt, verschwindet die Verbindung auf dem Server nicht. Es bleibt wie festgelegt .
Ich habe die Anwendungen, die zum Abrufen und Senden von Paketen zwischen zwei Hosts verwendet wurden, nicht programmiert (ich könnte jedoch den Quellcode von der Serverseite aus ändern), aber wenn ich nicht falsch liege, ist dies nicht notwendig.

Nachdem ich den Netzwerkverkehr mit tcpdump analysiert habe, sehe ich, dass dieses Problem auf die SYN / ACK-Sequenz zurückzuführen ist (zumindest verstehe ich es) aus dieser Beispielausgabe:

13:02:38.085996 IP 192.168.11.98.2101 > 192.168.11.50.58987: Flags [P.], seq 151644:151648, ack 1, win 473, length 4 13:02:38.283570 IP 192.168.11.98.2101 > 192.168.11.50.58987: Flags [P.], seq 151648:151916, ack 1, win 473, length 268 13:02:39.289412 IP 192.168.11.98.2101 > 192.168.11.50.58987: Flags [P.], seq 151916:151920, ack 1, win 473, length 4 13:02:39.489854 IP 192.168.11.98.2101 > 192.168.11.50.58987: Flags [P.], seq 151920:152226, ack 1, win 473, length 306 13:02:40.093989 IP 192.168.11.98.2101 > 192.168.11.50.58987: Flags [P.], seq 152226:152230, ack 1, win 473, length 4 

Der Client ruft jedoch keine Daten ab, und der Server sendet sie nicht. Es handelt sich lediglich um eine SYN / ACK-Sequenz. Dies wird für immer fortgesetzt. Die einzige Möglichkeit, dies zu stoppen, besteht darin, die Serverkonfiguration (Empfängermodus) zu ändern oder den Ethernet-Adapter zu entfernen. Dies ist keine akzeptable Lösung.

Wenn ich mich nicht irre, ist dies ein SYNflood-Angriff.

Die Frage ist: Wie kann ich verhindern, dass eine solche Verbindung die Verbindung vom Server her schließt?
Ist es möglich, dies aus einer Konfigurationsdatei oder aus einer Firewall heraus zu tun, ohne die eingehenden Verbindungen einzuschränken (wie hier vorgeschlagen )?

0
Wie kann der Remote-Host die Verbindung unterbrechen? Denn zwischen dem ersten Host, der die Entscheidung treffen möchte, und dem tatsächlichen Ende der Verbindung ist ziemlich viel Kommunikation erforderlich. (Siehe z. B. das Diagramm http://serverfault.com/questions/450055/lot-of-fin-wait2-close-wait-last-ack-and-time-wait-in-haproxy). Schließt das Prog sauber? Sehen Sie eine der FIN_WAIT-Nachrichten? Hennes vor 8 Jahren 0
Nein, irgendein FIN_WAIT-Paket. Ich denke auch, dass der Client die Verbindung nicht richtig schließt. simo-zz vor 8 Jahren 0
Wenn das Clinet die Verbindung einfach hängen lässt, bleibt es bestehen (wie es sollte!). Und manche halten am Leben eine gute Idee für eine bestehende untätige Verbindung. Grundsätzlich funktioniert es so, wie es sollte **, basierend auf dem Verhalten des Clients *. Wenn Sie den Quellcode des Clients haben, könnten wir vielleicht mehr sagen (oder vielleicht könnten wir, obwohl er migriert werden könnte, zu einem SO-Beitrag werden.) Hennes vor 8 Jahren 0
OK, ich habe endlich bestätigt, dass das Problem im Quellcode der Anwendungen liegt. Ich werde sie reparieren müssen. simo-zz vor 8 Jahren 0

0 Antworten auf die Frage