|
Da jeg ankom selskapet i morges, følte jeg meg ganske treg da jeg logget inn på selskapets offisielle nettside, logget inn på serveren for å sjekke tilgangsstatusen til den offisielle nettsiden: [root@web ~]# netstat -anp |awk '{print $6}'|sort|uniq -c |sort -rn 172 ETABLERT 59 CONNECTED 589 SYN_RECV 15 STREAM SYN er faktisk så høy, fortsett å spore SYN-en som sendes av disse IP-ene: [root@tweb ~]# netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | mer 570 x.x.x.x (IP-en er ikke skrevet, det er en IP til Shandong Zaozhuang Unicom), men denne ene IP-en har sendt så mange SYN-forespørsler, og samtidigheten med webserveren vår er ikke særlig høy, slik at vanlige brukerforespørsler ikke kan korresponderes, og siden kan ikke åpnes. Fordi maskinvarebrannmuren administreres av gruppens IT-avdeling, har jeg ingen myndighet, så jeg kan bare iverksette noen tiltak på den lokale serveren for delvis å dempe SYN-angrepet. Først og fremst, la oss snakke om angrepsprinsippet i SYN: I TCP/IP-protokollen gir TCP-protokollen pålitelige tilkoblingstjenester ved å bruke et treveis håndtrykk for å etablere en forbindelse. Første håndtrykk: Når en tilkobling etableres, sender klienten en syn-pakke (syn=j) til serveren og går inn i SYN_SEND-tilstanden, og venter på at serveren skal bekrefte. Det andre håndtrykket: Når serveren mottar SYN-pakken, må den bekrefte kundens SYN (ack=j+1), og også sende en SYN-pakke (syn=k), det vil si SYN+ACK-pakke, hvorpå serveren går inn i SYN_RECV-tilstanden. Tredje håndtrykk: Klienten mottar SYN+ACK-pakken fra serveren og sender bekreftelsespakken ACK (ack=k+1) til serveren. Etter tre håndtrykk begynner klient og server å sende data.
Hvis brukeren initierer en tilkoblingsforespørsel til serveren bare for å håndhilse for andre gang og ikke svarer serveren, vil serveren fortsette å vente på brukerens bekreftelse. Så vi gjør følgende endringer direkte fra SYN-tilkoblingen: Sjekk standard SYN-konfigurasjon i 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 er lengden på SYN-køen, og å øke lengden på SYN-køen kan imøtekomme flere nettverkstilkoblinger som venter på å bli koblet til. tcp_syncookies er en bryter som slår på SYN-cookie-funksjonen, som kan forhindre delvise SYN-angrep. tcp_synack_retries og tcp_syn_retries definerer antall retry-tilkoblinger for SYN, og reduserer standardparameterne for å kontrollere antall SYN-tilkoblinger så mye som mulig. Følgende er parametrene jeg har endret, som kan tilpasses etter den faktiske situasjonen på serveren min: [root@web ~]# mer /etc/rc.d/rc.local #!/bin/sh # Denne scrip{filter}t vil bli utført *etter* alle de andre init scrip{filter}ts. # Du kan legge inn dine egne initialiseringsgreier her hvis du ikke gjør det # vil gjøre hele Sys V-stilen init-greiene. trykk på /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 For at konfigurasjonen skal tre i kraft umiddelbart uten å starte serveren på nytt, kan den utføres #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 Noen liker å bruke tilgangskontrolllister for å forhindre SYN-angrep, noe som bremser SYN-angrep til en viss grad: Syn-flomangrep #iptables -A INPUT -p tcp --syn -m grense --grense 1/s -j AKSEPTER --begrens 1/s begrens antall syn-samtidighet til 1 gang per sekund Antiport-skanning # iptables -A FORWARD -p tcp --tcp-flagg SYN,ACK,FIN,RST RST -m grense --limit 1/s -j AKSEPTER Dødens ping # iptables -A FORWARD -p icmp --icmp-type ekkoforespørsel -m grense --grense 1/s -j AKSEPTER #>iptables-save >/etc/sysconfig/iptables For å se, #iptables -L AKSEPTER TCP – hvor som helst hvor som helst TCP-flagg: FIN,SYN,RST,ACK/SYN grense: gjennomsnittlig 1/sek burst 5 AKSEPTER TCP – hvor som helst hvor som helst TCP-flagg: FIN,SYN,RST,ACK/RST grense: gjennomsnittlig 1/sek burst 5 AKSEPTER icmp -- hvor som helst hvor som helst icmp ekkoforespørselsgrense: gjennomsnitt 1/sekund burst 5 Sjekk syn-tilkoblingen igjen: [root@web ~]# netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | mer 20 10.92.10.220 1 125.43.36.199 Åpenbart har antallet SYN-tilkoblinger gått ned.
|