|
Toen ik vanmorgen bij het bedrijf aankwam, voelde ik me vrij traag toen ik inlogde op de officiële website van het bedrijf, en inlogde op de server om de toegangsstatus van de officiële website te controleren: [root@web ~]# netstat -anp |awk '{print $6}'|sort|uniq -c |sort -rn 172 OPGERICHT 59 CONNECTED 589 SYN_RECV 15 STREAM SYN is eigenlijk zo hoog, blijf de SYN traceren die door die IP's wordt verzonden: [root@tweb ~]# netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sorteren | Uniq -C | sort -nr | Meer 570 x.x.x.x (Het IP is niet geschreven, het is een IP van Shandong Zaozhuang Unicom), maar dit ene IP heeft zoveel SYN-verzoekverbindingen verzonden, en de gelijktijdigheid van onze webserver is niet erg hoog, waardoor normale gebruikersverzoeken niet kunnen worden beantwoord en de pagina niet geopend kan worden. Omdat de hardwarefirewall wordt beheerd door de IT-afdeling van de groep, heb ik geen bevoegdheid, dus kan ik alleen enkele maatregelen nemen op de lokale server om de SYN-aanval gedeeltelijk te beperken. Laten we het eerst hebben over het aanvalsprincipe van SYN: In het TCP/IP-protocol biedt het TCP-protocol betrouwbare verbindingsdiensten door gebruik te maken van een drieweghandshake om een verbinding tot stand te brengen. Eerste handdruk: Bij het tot stand brengen van een verbinding stuurt de client een syn-pakket (syn=j) naar de server en gaat in de SYN_SEND-toestand, wachtend tot de server bevestigt. De tweede handdruk: Wanneer de server het SYN-pakket ontvangt, moet hij de SYN van de klant bevestigen (ack=j+1) en ook een SYN-pakket (syn=k) verzenden, dat wil zeggen SYN+ACK-pakket, waarna de server in de SYN_RECV-toestand gaat. Derde handdruk: De client ontvangt het SYN+ACK-pakket van de server en stuurt het bevestigingspakket ACK (ack=k+1) naar de server. Na drie handdrukken beginnen de client en server met het verzenden van gegevens.
Als de gebruiker een verbindingsverzoek met de server start, om vervolgens voor de tweede keer de hand te schudden en niet reageert, blijft de server wachten op bevestiging van de gebruiker. Dus voeren we de volgende wijzigingen direct aan vanuit de SYN-verbinding: Controleer de standaard SYN-configuratie in 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 is de lengte van de SYN-wachtrij, en het vergroten van de SYN-wachtrij kan meer netwerkverbindingen accommoderen die wachten om verbonden te worden. tcp_syncookies is een schakelaar om de SYN-cookiefunctie in te schakelen, die gedeeltelijke SYN-aanvallen kan voorkomen. tcp_synack_retries en tcp_syn_retries bepalen het aantal herkansingsverbindingen voor de SYN en verminderen de standaardparameters om het aantal SYN-verbindingen zoveel mogelijk te beheersen. De volgende parameters heb ik aangepast, die aangepast kunnen worden op basis van de werkelijke situatie van mijn server: [root@web ~]# meer /etc/rc.d/rc.local #!/bin/sh # Deze scrip{filter}t wordt uitgevoerd *na* alle andere init scrip{filter}ts. # Je kunt je eigen initialisatie-spullen hier inzetten als je dat niet doet # wil de volledige Sys V-stijl init-dingen doen. raak /var/lock/subsys/local aan 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 Om de configuratie direct in werking te stellen zonder de server opnieuw op te starten, kan deze worden uitgevoerd #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 Sommige mensen gebruiken toegangscontrolelijsten om SYN-aanvallen te voorkomen, wat SYN-aanvallen tot op zekere hoogte vertraagt: Syn-flood-aanval #iptables -A INPUT -p tcp --syn -m limiet --limiet 1/s -j ACCEPTEREN --limiet 1/s beperkt het aantal syn-gelijktijdigheid tot 1 keer per seconde Anti-poort scannen # iptables -A FORWARD -p tcp --tcp-vlaggen SYN,ACK,FIN,RST RST -m limiet --limiet 1/s -j ACCEPTEREN Ping van de dood # iptables -A FORWARD -p icmp --icmp-type echo-verzoek -m limiet --limiet 1/s -j ACCEPTEREN #>iptables-save >/etc/sysconfig/iptables Om te bekijken, #iptables -L ACCEPTEER TCP -- overal waar tcp-vlaggen: FIN,SYN,RST,ACK/SYN limiet: gemiddeld 1/sec burst 5 ACCEPTEER TCP -- overal waar TCP-vlaggen: FIN,SYN,RST,ACK/RST limiet: gemiddeld 1/sec burst 5 ACCEPTEER icmp -- anywhere anywhere icmp echo-request limiet: gemiddeld 1/sec burst 5 Controleer de syn-verbinding opnieuw: [root@web ~]# netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sorteren | Uniq -C | sort -nr | Meer 20 10.92.10.220 1 125.43.36.199 Het is duidelijk dat het aantal SYN-verbindingen is afgenomen.
|