|
Kad es šorīt ierados uzņēmumā, es jutos diezgan lēns, kad pieteicos uzņēmuma oficiālajā vietnē, pieteicos serverī, lai pārbaudītu oficiālās vietnes piekļuves statusu: [root@web ~]# netstat -anp |awk '{print $6}'|sort|uniq -c |sort -rn 172 IZVEIDOTS 59 SAVIENOTS 589 SYN_RECV 15 STRAUME SYN faktiski ir tik augsts, turpiniet izsekot šo IP sūtīto SYN: [root@tweb ~]# netstat -an | grep SYN | awk '{drukāt $5}' | awk -F: '{drukāt $1}' | kārtot | uniq -c | kārtot -nr | vairāk 570 x.x.x.x (IP nav rakstīts, tas ir Shandong Zaozhuang Unicom IP), bet šis viens IP ir nosūtījis tik daudz SYN pieprasījumu savienojumu, un mūsu tīmekļa servera vienlaicīgums nav ļoti augsts, tāpēc nevar izpildīt parastos lietotāju pieprasījumus un lapu nevar atvērt. Tā kā aparatūras ugunsmūri pārvalda grupas IT nodaļa, man nav pilnvaru, tāpēc es varu veikt tikai dažus pasākumus vietējā serverī, lai daļēji mazinātu SYN uzbrukumu. Pirmkārt, runāsim par SYN uzbrukuma principu: TCP/IP protokolā TCP protokols nodrošina uzticamus savienojuma pakalpojumus, izmantojot trīsvirzienu rokasspiedienu, lai izveidotu savienojumu. Pirmais rokasspiediens: Izveidojot savienojumu, klients nosūta syn paketi (syn=j) uz serveri un nonāk SYN_SEND stāvoklī, gaidot, kamēr serveris apstiprina. Otrais rokasspiediens: Kad serveris saņem SYN paketi, tam ir jāapstiprina klienta SYN (ack=j+1), kā arī jānosūta SYN pakete (syn=k), tas ir, SYN+ACK pakete, kurā serveris nonāk SYN_RECV stāvoklī. Trešais rokasspiediens: klients saņem SYN+ACK paketi no servera un nosūta apstiprinājuma paketi ACK (ack=k+1) uz serveri. Pēc trim rokasspiedieniem klients un serveris sāk pārraidīt datus.
Ja lietotājs uzsāk savienojuma pieprasījumu ar serveri, lai otro reizi paspiest roku un neatbild serverim, serveris turpinās gaidīt lietotāja apstiprinājumu. Tātad mēs veicam šādas izmaiņas tieši no SYN savienojuma: Pārbaudiet noklusējuma SYN konfigurāciju operētājsistēmā 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 ir SYN rindas garums, un, palielinot SYN rindas garumu, var uzņemt vairāk tīkla savienojumu, kas gaida savienojumu. tcp_syncookies ir slēdzis, lai ieslēgtu SYN sīkfailu funkciju, kas var novērst daļējus SYN uzbrukumus. tcp_synack_retries un tcp_syn_retries definē SYN atkārtotu savienojumu skaitu un samazina noklusējuma parametrus, lai pēc iespējas kontrolētu SYN savienojumu skaitu. Tālāk ir norādīti parametri, kurus esmu modificējis, kurus var mainīt atbilstoši mana servera faktiskajai situācijai: [root@web ~]# vairāk /etc/rc.d/rc.local #!/bin/sh # Šis scrip{filter}t tiks izpildīts *pēc* visiem pārējiem init scrip{filter}ts. # Jūs varat ievietot savas inicializācijas lietas šeit, ja to nedarāt # vēlaties darīt pilnu Sys V stila init lietas. pieskarieties /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 Lai konfigurācija stātos spēkā nekavējoties, nerestartējot serveri, to var veikt #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 Dažiem cilvēkiem patīk izmantot piekļuves kontroles sarakstus, lai novērstu SYN uzbrukumus, kas zināmā mērā palēnina SYN uzbrukumus: Syn plūdu uzbrukums #iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT --limit 1/s ierobežot syn vienlaicīguma skaitu līdz 1 reizi sekundē Anti-portu skenēšana # iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT Nāves ping # iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT #>iptables-saglabāt >/etc/sysconfig/iptables Lai apskatītu, #iptables -L ACCEPT tcp -- jebkurā vietā jebkur tcp karodziņi:FIN,SYN,RST,ACK/SYN robeža: vidēji 1/sek pārrāvums 5 ACCEPT tcp - jebkurā vietā tcp karodziņi: FIN, SYN, RST, ACK / RST robeža: vidēji 1 / sek pārrāvums 5 AKCEPTĒT icmp - jebkurā vietā icmp atbalss pieprasījuma ierobežojums: vidēji 1 / sek pārrāvums 5 Vēlreiz pārbaudiet syn savienojumu: [root@web ~]# netstat -an | grep SYN | awk '{drukāt $5}' | awk -F: '{drukāt $1}' | kārtot | uniq -c | kārtot -nr | vairāk 20 10.92.10.220 1 125.43.36.199 Acīmredzot SYN savienojumu skaits ir samazinājies.
|