|
Kui ma täna hommikul ettevõttesse jõudsin, tundsin end üsna aeglaselt, kui logisin sisse ettevõtte ametlikule veebilehele, logisin sisse serverisse, et kontrollida ametliku veebisaidi ligipääsu staatust: [root@web ~]# netstat -anp |awk '{print $6}'|sort|uniq -c |sort -rn 172 ASUTATUD 59 ÜHENDATUD 589 SYN_RECV 15 VOOG SYN on tegelikult nii kõrge, jätka nende IP-de saadetud SYN-i jälgimist: [root@tweb ~]# netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | rohkem 570 x.x.x.x (IP ei ole kirjutatud, see on Shandong Zaozhuang Unicomi IP), kuid see üks IP on saatnud nii palju SYN-päringute ühendusi ning meie veebiserveri paralleelsus pole väga suur, mistõttu tavalisi kasutajapäringuid ei saa vastata ega lehte avada. Kuna riistvaralist tulemüüri haldab grupi IT-osakond, mul puudub volitus, seega saan kohaliku serveri puhul võtta vaid mõningaid meetmeid, et SYN-rünnakut osaliselt leevendada. Kõigepealt räägime SYN-i rünnakuprintsiibist: TCP/IP protokollis pakub TCP protokoll usaldusväärseid ühendusteenuseid, kasutades kolmepoolset käepigistust ühenduse loomiseks. Esimene käepigistus: Ühenduse loomisel saadab klient serverile sün-paketi (syn=j) ja siseneb SYN_SEND olekusse, oodates serveri kinnitust. Teine käepigistus: Kui server saab SYN-paketi, peab ta kinnitama kliendi SYN-i (ack=j+1) ning saatma ka SYN-paketi (syn=k), st SYN+ACK paketi, mille järel server siseneb SYN_RECV olekusse. Kolmas käepigistus: Klient saab serverilt SYN+ACK paketi ja saadab kinnituspaketi ACK (ack=k+1) serverile. Pärast kolme käepigistust hakkavad klient ja server andmeid edastama.
Kui kasutaja alustab serveriga ühenduse päringut, kuid annab teist korda kätt ja ei vasta, ootab server endiselt kasutaja kinnitust. Seega teeme järgmised muudatused otse SYN-ühendusest: Vaata Linuxi vaikimisi SYN konfiguratsiooni: [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 on SYN-järjekorra pikkus ning SYN-järjekorra pikkuse suurendamine võimaldab rohkem võrguühendusi, mis ootavad ühendamist. tcp_syncookies on lüliti, mis lülitab sisse SYN küpsise funktsiooni, mis võib takistada osalisi SYN rünnakuid. tcp_synack_retries ja tcp_syn_retries määravad SYN-i kordusühenduste arvu ning vähendavad vaikimisi parameetreid, et kontrollida SYN-ühenduste arvu võimalikult palju. Järgnevad on parameetrid, mida olen muutnud ja mida saab muuta vastavalt minu serveri tegelikule olukorrale: [root@web ~]# rohkem /etc/rc.d/rc.local #!/bin/sh # See scrip{filter}t käivitatakse *pärast* kõiki teisi init scrip{filter}t'e. # Sa võid oma inisialiseerimise asjad siia panna, kui sa ei tee seda # tahan teha täisväärtuslikku Sys V stiilis init asju. Puuduta /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 Selleks, et konfiguratsioon jõustuks kohe ilma serverit taaskäivitamata, saab selle teha #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 Mõned inimesed eelistavad kasutada juurdepääsukontrolli nimekirju, et vältida SYN-rünnakuid, mis aeglustab SYN-rünnakuid teatud määral: Syn flood rünnak #iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT --limit 1/s piira sünteeride samaaegsuse arvu 1 korrani sekundis Portivastane skaneerimine # iptables -A EDASI -p tcp --tcp-lipud SYN,ACK,FIN,RST RST -m piir --piirang 1/s -j NÕUSTU Surma ping # iptables -A EDASI -p icmp --icmp-tüüpi kaja-päringu -m piirang --piirang 1/s -j NÕUSTU #>iptables-save >/etc/sysconfig/iptables Vaatamiseks #iptables -L ACCEPT tcp -- igal pool, kus tcp liputab: FIN, SYN, RST, ACK/SYN piir: keskmine 1/sek, burst 5 ACCEPT tcp -- igal pool tcp lipud:FIN,SYN,RST,ACK/RST piirang: keskmine 1/sek, burst 5 ACCEPT icmp -- igal pool icmp echo-request piirang: keskmine 1/sek, burst 5 Kontrolli sünteesi ühendust uuesti: [root@web ~]# netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | rohkem 20 10.92.10.220 1 125.43.36.199 Ilmselgelt on SYN-ühenduste arv vähenenud.
|