|
Když jsem dnes ráno dorazil do firmy, cítil jsem se docela pomalu, když jsem se přihlásil na oficiální webové stránky společnosti, přihlásil se na server, abych zkontroloval stav přístupu na oficiální web: [root@web ~]# netstat -anp |awk '{print $6}'|sort|uniq -c |sort -rn 172 ZALOŽENO 59 PROPOJENÝCH 589 SYN_RECV 15 STREAM SYN je ve skutečnosti tak vysoký, pokračujte ve sledování SYN odeslaného těmito IP adresami: [root@tweb ~]# netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | Uniq -c | sort -nr | více 570 x.x.x.x (IP není zapsána, je to IP Shandong Zaozhuang Unicom), ale tato jedna IP odešla tolik SYN požadavků a souběžnost našeho webového serveru není příliš vysoká, takže běžné uživatelské požadavky nelze odpovídat a stránka nemůže být otevřena. Protože hardwarový firewall spravuje IT oddělení skupiny, nemám žádnou pravomoc, takže mohu na lokálním serveru přijmout jen některá opatření, abych částečně zmírnil útok SYN. Nejprve si pojďme promluvit o principu útoku v SYN: V protokolu TCP/IP poskytuje protokol TCP spolehlivé služby připojení pomocí třícestného handshake k navázání spojení. První handshake: Při navázání spojení klient odešle syn paket (syn=j) serveru a vstoupí do stavu SYN_SEND, čeká na potvrzení serveru. Druhý handshake: Když server přijme SYN paket, musí potvrdit zákaznický SYN (ack=j+1) a také odeslat SYN paket (syn=k), tedy SYN+ACK paket, v tu chvíli server vstoupí do stavu SYN_RECV. Třetí handshake: Klient přijme paket SYN+ACK od serveru a odešle potvrzovací paket ACK (ack=k+1) serveru. Po třech handshakech začnou klient a server přenášet data.
Pokud uživatel zahájí požadavek na spojení se serverem, ale podruhé si potřese rukou a neodpoví serveru, server bude dál čekat na potvrzení uživatele. Proto provedeme následující změny přímo z SYN spojení: Zkontrolujte výchozí konfiguraci SYN v Linuxu: [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élka SYN fronty a její prodloužení umožňuje více síťových připojení čekajících na připojení. tcp_syncookies je spínač pro zapnutí funkce SYN cookies, která může zabránit částečným útokům SYN. tcp_synack_retries a tcp_syn_retries definují počet opětovných spojení pro SYN a snižují výchozí parametry, aby co nejvíce kontrolovaly počet SYN spojení. Následující parametry jsem upravil a které lze upravit podle aktuální situace mého serveru: [root@web ~]# více /etc/rc.d/rc.local #!/koš/š. # Tento scrip{filter}t bude vykonán *po* všech ostatních init scrip{filter}ts. # Můžeš sem dát své vlastní inicializační věci, pokud ne # chci dělat celý styl Sys V init. touch /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 Aby konfigurace nastoupila v platnost okamžitě bez restartu serveru, může být provedena #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 Někteří lidé rádi používají seznamy řízení přístupu k prevenci útoků SYN, což do určité míry zpomaluje útoky SYN: Syn flood attack #iptables -A VSTUP -p tcp --syn -m limit --limit 1/s -j ACCEPT --limit 1/s omezit počet syn souběžnosti na 1 čas za sekundu Anti-portové skenování # 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 Zobrazit #iptables -L ACCEPT tcp -- kdekoliv a kdekoliv tcp příznaky: FIN,SYN,RST,ACK/SYN limit: průměrný burst 1/sec 5 ACCEPT tcp -- kamkoliv a kdekoliv tcp vlajky: FIN,SYN,RST,ACK/RST limit: průměr 1/sekunda burst 5 ACCEPT icmp -- kdekoliv a kdekoli icmp echo-request limit: průměr 1/sec burst 5 Zkontrolujte syn připojení znovu: [root@web ~]# netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | Uniq -c | sort -nr | více 20 10.92.10.220 1 125.43.36.199 Je zřejmé, že počet SYN připojení klesl.
|