|
Ko sem danes zjutraj prispel v podjetje, sem se počutil precej počasnega, ko sem se prijavil na uradno spletno stran podjetja, se prijavil na strežnik, da preverim status dostopa do uradne spletne strani: [root@web ~]# netstat -anp |awk '{print $6}'|sort|uniq -c |sort -rn USTANOVLJENO 172 59 CONNECTED 589 SYN_RECV 15 STREAM SYN je dejansko tako visok, da nadaljujte s sledenjem SYN, ki ga pošiljajo ti IP-ji: [root@tweb ~]# netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | Več 570 x.x.x.x (IP ni zapisan, je IP podjetja Shandong Zaozhuang Unicom), vendar je ta en IP poslal toliko povezav s SYN zahtevami, zato sočasnost našega spletnega strežnika ni zelo visoka, zato običajne uporabniške zahteve ni mogoče uskladiti in stran ni mogoče odpreti. Ker strojni požarni zid upravlja IT oddelek skupine, nimam pooblastil, zato lahko na lokalnem strežniku sprejmem le nekatere ukrepe za delno omilitev SYN napada. Najprej se pogovorimo o načelu napada v SYN: V protokolu TCP/IP protokol TCP zagotavlja zanesljive povezovalne storitve z uporabo tristranskega handshakea za vzpostavitev povezave. Prvi stik roke: Pri vzpostavljanju povezave odjemalec pošlje syn paket (syn=j) strežniku in vstopi v stanje SYN_SEND, čaka na potrditev strežnika. Drugi stik roke: Ko strežnik prejme SYN paket, mora potrditi SYN stranke (ack=j+1) in poslati tudi SYN paket (syn=k), torej paket SYN+ACK, pri čemer strežnik vstopi v stanje SYN_RECV. Tretji handshake: Odjemalec prejme paket SYN+ACK od strežnika in pošlje potrditveni paket ACK (ack=k+1) strežniku. Po treh rokovanju začneta odjemalec in strežnik prenašati podatke.
Če uporabnik sproži zahtevo za povezavo s strežnikom, nato pa drugič stisne roko in ne odgovori strežniku, bo strežnik še naprej čakal na potrditev uporabnika. Torej naredimo naslednje spremembe neposredno iz SYN povezave: Preverite privzeto SYN konfiguracijo 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 dolžina SYN vrste, in povečanje dolžine SYN vrste lahko omogoči več omrežnih povezav, ki čakajo na povezavo. tcp_syncookies je stikalo za vklop funkcije SYN piškotkov, ki lahko prepreči delne SYN napade. tcp_synack_retries in tcp_syn_retries določata število ponovnih povezav za SYN in zmanjšujeta privzete parametre za čim večji nadzor števila SYN povezav. Spodaj so parametri, ki sem jih spremenil in jih je mogoče prilagoditi glede na dejansko stanje mojega strežnika: [root@web ~]# več /etc/rc.d/rc.local #!/smeti/šš # Ta scrip{filter}t bo izveden *po* vseh drugih init scrip{filter}ts. # Lahko daš svoje inicializacijske stvari sem, če ne # želim narediti celoten Sys V slog init stvari. dotakni se /var/zaklep/subsys/lokalno 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 Da bi konfiguracija takoj začela delovati brez ponovnega zagona strežnika, jo je mogoče izvesti #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 Nekateri ljudje radi uporabljajo sezname nadzora dostopa za preprečevanje SYN napadov, kar do določene mere upočasni SYN napade: Syn flood napad #iptables -A VHOD -p tcp --syn -m limit --limit 1/s -j ACCEPT --omejitev 1/s omejitev števila sinhronizacije na 1 čas na sekundo Anti-portno skeniranje # iptables -A NAPREJ -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j SPREJMI Ping smrti # iptables -A NAPREJ -p icmp --icmp-tip echo-request -m limit --limit 1/s -j ACCEPT #>iptables-save >/etc/sysconfig/iptables Za ogled, #iptables -L ACCEPT tcp -- kjerkoli in kjerkoli tcp zastavice: FIN,SYN,RST,ACK/SYN omejitev: povprečno 1/sekunda burst 5 SPREJMI tcp -- kjerkoli in kjerkoli tcp zastavice: FIN,SYN,RST,ACK/RST omejitev: povprečno 1/sekunda izbruha 5 ACCEPT icmp -- kjerkoli, kjerkoli omejitev echo zahteve: povprečno 1/sec burst 5 Ponovno preveri sinhronizacijo: [root@web ~]# netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | Več 20 10.92.10.220 1 125.43.36.199 Očitno se je število SYN povezav zmanjšalo.
|