|
Kun saavuin yritykselle tänä aamuna, tunsin oloni melko hitaaksi, kun kirjauduin yrityksen viralliselle verkkosivustolle, kirjauduin palvelimelle tarkistaakseni virallisen verkkosivuston käyttöoikeuden: [root@web ~]# netstat -anp |awk '{print $6}'|sort|uniq -c |sort -rn 172 PERUSTETTU 59 YHDISTETTY 589 SYN_RECV 15 VIRTA SYN on itse asiassa niin korkea, että jatka näiden IP-osoitteiden lähettämän SYN:n jäljittämistä: [root@tweb ~]# netstat -an | grep SYN | awk '{tulosta $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | lisää 570 x.x.x.x (IP-osoite ei ole kirjoitettu, se on Shandong Zaozhuang Unicomin IP), mutta tämä yksi IP on lähettänyt niin monta SYN-pyyntöyhteyttä, ja verkkopalvelimemme samanaikaisuus ei ole kovin suuri, joten tavallisia käyttäjäpyyntöjä ei voida vastata eikä sivua voi avata. Koska laitteistopalomuuria hallinnoi ryhmän IT-osasto, minulla ei ole valtuuksia, joten voin tehdä vain joitakin toimenpiteitä paikallisella palvelimella osittain SYN-hyökkäyksen lieventämiseksi. Ensiksi puhutaan SYN:n hyökkäysperiaatteesta: TCP/IP-protokollassa TCP-protokolla tarjoaa luotettavia yhteyspalveluita käyttämällä kolmisuuntaista kädenpuristusta yhteyden muodostamiseen. Ensimmäinen kättely: Yhteyden muodostamisessa asiakas lähettää syn-paketin (syn=j) palvelimelle ja siirtyy SYN_SEND-tilaan, odottaen palvelimen vahvistusta. Toinen kättely: Kun palvelin vastaanottaa SYN-paketin, sen on vahvistettava asiakkaan SYN (ack=j+1) ja lähetettävä myös SYN-paketti (syn=k), eli SYN+ACK-paketti, jolloin palvelin siirtyy SYN_RECV-tilaan. Kolmas kättely: Asiakas vastaanottaa palvelimelta SYN+ACK-paketin ja lähettää vahvistuspaketin ACK (ack=k+1) palvelimelle. Kolmen kättelyn jälkeen asiakas ja palvelin alkavat lähettää dataa.
Jos käyttäjä aloittaa yhteyspyynnön palvelimelle vain kättelläkseen toistamiseen eikä vastaa palvelimelle, palvelin odottaa käyttäjän vahvistusta. Teemme siis seuraavat muutokset suoraan SYN-yhteydestä: Tarkista oletus-SYN-asetus Linuxissa: [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-jonon pituus, ja SYN-jonon pituuden kasvattaminen voi mahdollistaa enemmän verkkoyhteyksiä, jotka odottavat yhdistämistä. tcp_syncookies on kytkin, jolla SYN-evästetoiminto voidaan kytkeä päälle, mikä voi estää osittaiset SYN-hyökkäykset. tcp_synack_retries ja tcp_syn_retries määrittelevät SYN:n uudelleenyritysyhteyksien määrän ja vähentävät oletusparametreja hallitakseen SYN-yhteyksien määrää mahdollisimman paljon. Seuraavat ovat parametrit, joita olen muuttanut ja joita voi muokata palvelimeni todellisen tilanteen mukaan: [root@web ~]# lisää /etc/rc.d/rc.local #!/bin/sh # Tämä scrip{filter}t suoritetaan *kaikkien muiden init scrip{filter}t:ien jälkeen. # Voit laittaa omat alustustavarasi tänne, jos et tee sitä # haluan tehdä täyden Sys V -tyylisen init-jutun. kosketa /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 Jotta konfiguraatio astuisi voimaan välittömästi ilman palvelimen uudelleenkäynnistystä, se voidaan suorittaa #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 Jotkut käyttävät pääsynhallintalistoja estääkseen SYN-hyökkäyksiä, mikä hidastaa SYN-hyökkäyksiä jonkin verran: Syn flood -hyökkäys #iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT --limit 1/s rajoittaa syn samanaikaisuuden määrän yhteen kertaan sekunnissa Anti-port skannaus # iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j HYVÄKSY Kuoleman ping # iptables -A FORWARD -p icmp --icmp-tyyppinen kaikupyyntö -m limit --limit 1/s -j ACCEPT #>iptables-save >/etc/sysconfig/iptables Katsoa, #iptables -L HYVÄKSY tcp -- missä tahansa missä tcp liputtaa: FIN, SYN, RST, ACK/SYN raja: keskimäärin 1/sekunti burst 5 HYVÄKSY tcp -- missä tahansa missä tcp liputtaa: FIN, SYN, RST, ACK/RST raja: keskimäärin 1/sekunti burst 5 HYVÄKSY icmp -- missä tahansa missä tahansa icmp echo-request -rajoitus: keskimäärin 1/sekunti burst 5 Tarkista syn-yhteys uudelleen: [root@web ~]# netstat -an | grep SYN | awk '{tulosta $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | lisää 20 10.92.10.220 1 125.43.36.199 Tietenkin SYN-yhteyksien määrä on vähentynyt.
|