|
Da jeg ankom til virksomheden i morges, følte jeg mig ret langsom, da jeg loggede ind på virksomhedens officielle hjemmeside, loggede ind på serveren for at tjekke adgangsstatus på den officielle hjemmeside: [root@web ~]# netstat -anp |awk '{print $6}'|sort|uniq -c |sort -rn 172 GRUNDLAGT 59 CONNECTED 589 SYN_RECV 15 STREAM SYN er faktisk så høj, fortsæt med at spore den SYN, der sendes af de IP'er: [root@tweb ~]# netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | Uniq -c | sort -nr | mere 570 x.x.x.x (IP'en er ikke skrevet, det er en IP til Shandong Zaozhuang Unicom), men denne ene IP har sendt så mange SYN-anmodningsforbindelser, og samtidig tilstedeværelse af vores webserver er ikke særlig høj, så normale brugeranmodninger kan ikke besvares, og siden kan ikke åbnes. Fordi hardware-firewallen administreres af gruppens IT-afdeling, har jeg ingen myndighed, så jeg kan kun tage nogle foranstaltninger på den lokale server for delvist at afbøde SYN-angrebet. Først og fremmest, lad os tale om angrebsprincippet i SYN: I TCP/IP-protokollen leverer TCP-protokollen pålidelige forbindelsestjenester ved at bruge et trevejs-håndtryk til at etablere en forbindelse. Første håndtryk: Når en forbindelse etableres, sender klienten en syn-pakke (syn=j) til serveren og går ind i SYN_SEND-tilstanden, mens den venter på, at serveren bekræfter. Det andet håndtryk: Når serveren modtager SYN-pakken, skal den bekræfte kundens SYN (ack=j+1) og også sende en SYN-pakke (syn=k), det vil sige SYN+ACK-pakke, hvorefter serveren går ind i SYN_RECV-tilstanden. Tredje håndtryk: Klienten modtager SYN+ACK-pakken fra serveren og sender bekræftelsespakken ACK (ack=k+1) til serveren. Efter tre håndtryk begynder klienten og serveren at sende data.
Hvis brugeren indleder en forbindelsesanmodning med serveren for at give hånd for anden gang og ikke svarer serveren, vil serveren fortsætte med at vente på brugerens bekræftelse. Så vi foretager følgende ændringer direkte fra SYN-forbindelsen: Tjek standard SYN-konfigurationen i Linux: [root@web ~]# sysctl -a | greb _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 længden af SYN-køen, og en forøgelse af SYN-køen kan rumme flere netværksforbindelser, der venter på at blive forbundet. tcp_syncookies er en kontakt, der tænder for SYN-cookiefunktionen, som kan forhindre delvise SYN-angreb. tcp_synack_retries og tcp_syn_retries definerer antallet af genopsamlingsforbindelser for SYN'en og reducerer standardparametrene for at kontrollere antallet af SYN-forbindelser så meget som muligt. Følgende er de parametre, jeg har ændret, som kan justeres alt efter den faktiske situation på min server: [root@web ~]# mere /etc/rc.d/rc.local #!/bin/sh # Dette scrip{filter}t vil blive udført *efter* alle de andre init scrip{filter}ts. # Du kan lægge dine egne initialiseringsting her, hvis du ikke gør # vil lave det fulde Sys V-stil init-ting. tryk /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 konfigurationen kan træde i kraft straks uden at genstarte serveren, kan den udfø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 Nogle kan lide at bruge adgangskontrollister til at forhindre SYN-angreb, hvilket bremser SYN-angreb til en vis grad: Syn-floodangreb #iptables -A INPUT -p tcp --syn -m grænse --grænse 1/s -j ACCEPTER --begrænser 1/s begrænser antallet af syn-samtidighed til 1 gang per sekund Anti-port scanning # iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m grænse --limit 1/s -j ACCEPTER Dødens ping # iptables -A FORWARD -p icmp --icmp-type echo-request -m grænse --grænse 1/s -j ACCEPTER #>iptables-save >/etc/sysconfig/iptables For at se, #iptables -L ACCEPTER TCP -- hvor som helst hvor som helst TCP-flag: FIN,SYN,RST,ACK/SYN grænse: gennemsnit 1/sek burst 5 ACCEPTER TCP – hvor som helst hvor som helst TCP-flag: FIN,SYN,RST,ACK/RST grænse: gennemsnit 1/sek burst 5 ACCEPTER icmp -- hvor som helst hvor som helst icmp ekkoanmodningsgrænse: gennemsnit 1/sek burst 5 Tjek syn-forbindelsen igen: [root@web ~]# netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | Uniq -c | sort -nr | mere 20 10.92.10.220 1 125.43.36.199 Antallet af SYN-forbindelser er åbenlyst faldet.
|