|
Als ich heute Morgen bei der Firma ankam, fühlte ich mich ziemlich langsam, als ich mich auf der offiziellen Website des Unternehmens anmeldete und mich auf dem Server anmeldete, um den Zugriffsstatus der offiziellen Website zu überprüfen: [root@web ~]# netstat -anp |awk '{print $6}'|sort|uniq -c |sort -rn 172 GEGRÜNDETE U 59 VERBUNDEN 589 SYN_RECV 15 STREAM Die SYN ist tatsächlich so hoch, dass Sie weiterhin die von diesen IPs gesendeten SYN verfolgen sollten: [root@tweb ~]# netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sortieren -nr | Mehr 570 x.x.x.x (Die IP ist nicht geschrieben, sondern eine IP von Shandong Zaozhuang Unicom), aber diese eine IP hat so viele SYN-Anfragen gesendet, und die Nebenläufigkeit unseres Webservers ist nicht sehr hoch, sodass normale Benutzeranfragen nicht korrespondiert werden können und die Seite nicht geöffnet werden kann. Da die Hardware-Firewall von der IT-Abteilung der Gruppe verwaltet wird, habe ich keine Befugnis, sodass ich nur einige Maßnahmen auf dem lokalen Server ergreifen kann, um den SYN-Angriff teilweise abzumildern. Zunächst einmal sprechen wir über das Angriffsprinzip von SYN: Im TCP/IP-Protokoll stellt das TCP-Protokoll zuverlässige Verbindungsdienste bereit, indem es einen Dreifach-Handshake verwendet, um eine Verbindung herzustellen. Erster Handschlag: Beim Aufbau einer Verbindung sendet der Client ein Syn-Paket (syn=j) an den Server und tritt in den SYN_SEND-Zustand ein, während er darauf wartet, dass der Server bestätigt. Der zweite Handschlag: Wenn der Server das SYN-Paket erhält, muss er das SYN des Kunden (ack=j+1) bestätigen und außerdem ein SYN-Paket (syn=k), also SYN+ACK-Paket, senden, woraufhin der Server in den SYN_RECV-Zustand eintritt. Dritter Handschlag: Der Client empfängt das SYN+ACK-Paket vom Server und sendet das Bestätigungspaket ACK (ack=k+1) an den Server. Nach drei Händeschütteln beginnen Client und Server, Daten zu übertragen.
Wenn der Nutzer eine Verbindungsanfrage mit dem Server startet, nur um sich ein zweites Mal die Hand zu schütteln und nicht antwortet, wartet der Server weiter auf die Bestätigung des Nutzers. Wir nehmen also die folgenden Änderungen direkt von der SYN-Verbindung aus vor: Überprüfen Sie die Standardkonfiguration von SYN unter Linux: [root@web ~]# sysctl -a | grep _syn net.ipv4.tcp_max_syn_backlog = 1024 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_synack_retries = 5 net.ipv4.tcp_syn_retries = 5 tcp_max_syn_backlog ist die Länge der SYN-Warteschlange, und eine Erhöhung der SYN-Warteschlange kann mehr Netzwerkverbindungen ermöglichen, die auf eine Verbindung warten. tcp_syncookies ist ein Schalter, um die SYN-Cookie-Funktion einzuschalten, die partielle SYN-Angriffe verhindern kann. tcp_synack_retries und tcp_syn_retries definieren die Anzahl der Retry-Verbindungen für die SYN und reduzieren die Standardparameter, um die Anzahl der SYN-Verbindungen so weit wie möglich zu steuern. Im Folgenden habe ich die Parameter geändert, die je nach aktueller Situation meines Servers angepasst werden können: [root@web ~]# mehr /etc/rc.d/rc.local #!/bin/sh # Dieser scrip{filter}t wird *nach* allen anderen init-scrip{filter}ts ausgeführt. # Du kannst deine eigenen Initialisierungs-Dinge hier einbauen, wenn du das nicht tust. # Ich möchte den kompletten Sys V-Stil Init machen. Touch /var/lock/subsys/local ulimit -HSn 65535 /usr/local/apache2/bin/apachectl start ##### sysctl -w net.ipv4.tcp_max_syn_backlog=2048 sysctl -w net.ipv4.tcp_syncookies=1 sysctl -w net.ipv4.tcp_synack_retries=3 sysctl -w net.ipv4.tcp_syn_retries=3 Damit die Konfiguration sofort in Kraft tritt, ohne den Server neu zu starten, kann sie durchgeführt werden #sysctl -w net.ipv4.tcp_max_syn_backlog=2048 #sysctl -w net.ipv4.tcp_syncookies=1 #sysctl -w net.ipv4.tcp_synack_retries=3 #sysctl -w net.ipv4.tcp_syn_retries=3 Manche Leute nutzen gerne Zugriffslisten, um SYN-Angriffe zu verhindern, was SYN-Angriffe bis zu einem gewissen Grad verlangsamt: Syn-Flut-Angriff #iptables -A INPUT -p tcp --syn -m Limit --limit 1/s -j AKZEPTIEREN --Begrenzung von 1/s die Anzahl der Syn-Konkurrenz auf 1 Mal pro Sekunde begrenzt Anti-Port-Scannen # iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j AKZEPTIEREN Ping des Todes # iptables -A FORWARD -p icmp --icmp-Typ Echo-Anfrage -m Limit --limit 1/s -j ACCEPT #>iptables-save >/etc/sysconfig/iptables Um zu sehen, #iptables -L AKZEPTIERE TCP – überall überall TCP-Flags: FIN,SYN,RST,ACK/SYN Limit: Durchschnitt 1/Sekunde Burst 5 AKZEPTIERE TCP – überall überall TCP-Flags: FIN,SYN,RST,ACK/RST Limit: Durchschnitt 1/Sekunde Burst 5 AKZEPTIERE ICMP – Anywhere anywhere ICMP Echo-Anfrage-Limit: Durchschnitt 1/Sekunde Burst 5 Überprüfen Sie erneut die Syn-Verbindung: [root@web ~]# netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sortieren -nr | Mehr 20 10.92.10.220 1 125.43.36.199 Offensichtlich ist die Anzahl der SYN-Verbindungen zurückgegangen.
|