|
Kai šį rytą atvykau į įmonę, jaučiausi gana lėtai, kai prisijungiau prie oficialios įmonės svetainės, prisijungiau prie serverio, kad patikrinčiau oficialios svetainės prieigos būseną: [root@web ~]# netstat -anp |awk '{print $6}'|sort|uniq -c |sort -rn 172 ĮSTEIGTA 59 PRIJUNGTAS 589 SYN_RECV 15 SRAUTAS SYN iš tikrųjų yra toks didelis, toliau sekti SYN siunčiamas šių IP: [root@tweb ~]# netstat -an | grep SYN | awk '{spausdinti $5}' | awk -F: '{spausdinti $1}' | rūšiuoti | uniq -c | rūšiuoti -nr | daugiau 570 x.x.x.x (IP nėra parašytas, tai yra Shandong Zaozhuang Unicom IP), tačiau šis vienas IP išsiuntė tiek daug SYN užklausų ryšių, o mūsų žiniatinklio serverio sutapimas nėra labai didelis, todėl negalima atitikti įprastų vartotojų užklausų ir puslapio atidaryti negalima. Kadangi aparatūros ugniasienę valdo grupės IT skyrius, aš neturiu įgaliojimų, todėl galiu imtis tik kai kurių priemonių vietiniame serveryje, kad iš dalies sušvelninčiau SYN ataką. Visų pirma, pakalbėkime apie SYN atakos principą: TCP/IP protokole TCP protokolas teikia patikimas ryšio paslaugas, naudodamas trijų krypčių rankos paspaudimą, kad užmegztų ryšį. Pirmasis rankos paspaudimas: Užmezgdamas ryšį, klientas siunčia syn paketą (syn=j) į serverį ir pereina į SYN_SEND būseną, laukdamas, kol serveris patvirtins. Antrasis rankos paspaudimas: Kai serveris gauna SYN paketą, jis turi patvirtinti kliento SYN (ack=j+1), taip pat išsiųsti SYN paketą (syn=k), tai yra SYN+ACK paketą, tuo metu serveris pereina į SYN_RECV būseną. Trečias rankos paspaudimas: klientas gauna SYN+ACK paketą iš serverio ir siunčia patvirtinimo paketą ACK (ack=k+1) į serverį. Po trijų rankų paspaudimų klientas ir serveris pradeda perduoti duomenis.
Jei vartotojas inicijuoja prisijungimo prie serverio užklausą tik tam, kad antrą kartą paspaustų ranką ir neatsako serveriui, serveris ir toliau laukia vartotojo patvirtinimo. Taigi mes atliekame šiuos pakeitimus tiesiai iš SYN ryšio: Patikrinkite numatytąją SYN konfigūraciją sistemoje 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 yra SYN eilės ilgis, o padidinus SYN eilės ilgį galima sutalpinti daugiau tinklo ryšių, laukiančių prisijungimo. tcp_syncookies yra jungiklis, skirtas įjungti SYN slapukų funkciją, kuri gali užkirsti kelią dalinėms SYN atakoms. tcp_synack_retries ir tcp_syn_retries apibrėžti pakartotinių SYN ryšių skaičių ir sumažinti numatytuosius parametrus, kad būtų galima kiek įmanoma kontroliuoti SYN ryšių skaičių. Toliau pateikiami mano modifikuoti parametrai, kuriuos galima keisti atsižvelgiant į faktinę mano serverio situaciją: [root@web ~]# daugiau /etc/rc.d/rc.local #!/bin/sh # Šis scrip{filter}t bus vykdomas *po* visų kitų init scrip{filter}ts. # Galite įdėti savo inicijavimo stuff čia, jei ne # nori padaryti visą Sys V stiliaus init stuff. palieskite /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 Kad konfigūracija įsigaliotų iš karto, iš naujo nepaleidus serverio, ją galima atlikti #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 Kai kurie žmonės mėgsta naudoti prieigos kontrolės sąrašus, kad užkirstų kelią SYN atakoms, o tai tam tikru mastu sulėtina SYN atakas: Syn potvynio ataka #iptables -A INPUT -p tcp --syn -m riba --limit 1/s -j ACCEPT --limit 1/s apriboti syn sutapimų skaičių iki 1 karto per sekundę Anti-prievadų nuskaitymas # iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT Mirties ping # iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT #>iptables-save >/etc/sysconfig/iptables Norėdami peržiūrėti, #iptables -L PRIIMTI TCP - bet kur bet kur TCP vėliavos: FIN, SYN, RST, ACK / SYN riba: vid. 1 / sek sprogo 5 PRIIMTI TCP - bet kur bet kur TCP vėliavos: FIN, SYN, RST, ACK / RST riba: vid. 1 / sek sprogo 5 PRIIMTI ICMP - bet kur icmp aido užklausos riba: vid. 1 / sek pliūpsnis 5 Dar kartą patikrinkite syn ryšį: [root@web ~]# netstat -an | grep SYN | awk '{spausdinti $5}' | awk -F: '{spausdinti $1}' | rūšiuoti | uniq -c | rūšiuoti -nr | daugiau 20 10.92.10.220 1 125.43.36.199 Akivaizdu, kad SYN jungčių skaičius sumažėjo.
|