|
Keď som dnes ráno prišiel do spoločnosti, cítil som sa dosť pomaly, keď som sa prihlásil na oficiálnu webovú stránku spoločnosti, prihlásil sa na server, aby som skontroloval stav prístupu na oficiálnu stránku: [root@web ~]# netstat -anp |awk '{print $6}'|sort|uniq -c |sort -rn 172 ZALOŽENÝCH 59 PRIPOJENÝCH 589 SYN_RECV 15 STREAM SYN je vlastne taký vysoký, pokračujte v sledovaní SYN odoslaného týmito IP adresami: [root@tweb ~]# netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | Uniq -c | sort -nr | viac 570 x.x.x.x (IP adresa nie je zapísaná, je to IP spoločnosti Shandong Zaozhuang Unicom), ale táto jedna IP vyslala toľko SYN požiadaviek a súbežnosť nášho webového servera nie je veľmi vysoká, takže bežné požiadavky používateľov nie je možné zodpovedať a stránka sa nedá otvoriť. Keďže hardvérový firewall spravuje IT oddelenie skupiny, nemám žiadnu právomoc, takže môžem prijať len niektoré opatrenia na lokálnom serveri na čiastočné zmiernenie útoku SYN. Najprv sa poďme porozprávať o princípe útoku v SYN: V protokole TCP/IP poskytuje protokol TCP spoľahlivé služby pripojenia pomocou trojcestného handshake na nadviazanie spojenia. Prvý handshake: Pri nadväzovaní spojenia klient pošle syn paket (syn=j) serveru a vstúpi do stavu SYN_SEND, pričom čaká na potvrdenie servera. Druhý handshake: Keď server prijme SYN paket, musí potvrdiť SYN zákazníka (ack=j+1) a tiež odoslať SYN paket (syn=k), teda SYN+ACK paket, pričom server vstúpi do stavu SYN_RECV. Tretie handshake: Klient prijíma paket SYN+ACK od servera a odosiela potvrdzovací paket ACK (ack=k+1) serveru. Po troch podaniach ruky začnú klient a server prenášať dáta.
Ak používateľ iniciuje žiadosť o spojenie so serverom, no druhýkrát si podá ruku a neodpovie serveru, server bude naďalej čakať na potvrdenie používateľa. Preto robíme nasledujúce zmeny priamo z SYN spojenia: Skontrolujte predvolenú konfiguráciu SYN v Linuxe: [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 je dĺžka SYN fronty a jej predĺženie umožňuje viac sieťových spojení čakajúcich na pripojenie. tcp_syncookies je prepínač na zapnutie funkcie SYN cookie, ktorá môže zabrániť čiastočným útokom SYN. tcp_synack_retries a tcp_syn_retries definujú počet opakovaných spojení pre SYN a znižujú predvolené parametre, aby sa čo najviac kontroloval počet SYN spojení. Nasledujú parametre, ktoré som upravil a ktoré je možné upraviť podľa aktuálnej situácie môjho servera: [root@web ~]# viac /etc/rc.d/rc.local #!/bin/sh # Tento scrip{filter}t sa vykoná *po* všetkých ostatných init scrip{filter}ts. # Môžeš sem dať svoje vlastné inicializačné veci, ak nie # chcem robiť celý štýl Sys V v init. touch /var/lock/subsys/lokálne 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 Aby konfigurácia nadobudla účinnosť okamžite bez reštartu servera, je možné ju vykonať #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 Niektorí ľudia radi používajú zoznamy kontroly prístupu na prevenciu SYN útokov, čo do určitej miery spomaľuje SYN útoky: Syn flood útok #iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT --obmedziť 1/s obmedziť počet syn súbežnosti na 1 čas za sekundu Anti-portové skenovanie # iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT Ping smrti # iptables -A FORWARD -p icmp --icmp-typ echo-request -m limit --limit 1/s -j ACCEPT #>iptables-save >/etc/sysconfig/iptables Na zobrazenie, #iptables -L ACCEPT tcp -- kdekoľvek a kdekoľvek tcp vlajky: FIN,SYN,RST,ACK/SYN limit: priemerne 1/sekunda burst 5 ACCEPT tcp -- kdekoľvek a kdekoľvek tcp vlajky: FIN,SYN,RST,ACK/RST limit: priemer 1/sekunda burst 5 ACCEPT icmp -- kdekoľvek kdekoľvek icmp echo-request limit: priemer 1/sekunda burst 5 Skontroluj syn pripojenie znova: [root@web ~]# netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | Uniq -c | sort -nr | viac 20 10.92.10.220 1 125.43.36.199 Samozrejme, počet SYN pripojení klesol.
|