|
HekerTo je zaželena in obetavna kariera. Cenim dobre hekerje in sovražim slabe. Tako imenovani slabi heker je tip človeka, ki povzroči, da nekdo na drugi strani dela nadure. SYN Flood napadi so tipičen napad zavrnitve storitve. Tako imenovani napad zavrnitve storitve je namenjen posrednemu doseganju namena napada tako, da žrtev ne more zagotavljati dobre storitve. Hekerji radi igrajo to, da pokažejo, da so uravnoteženi, sposobni in pogumni, tako da prisilijo nasprotno stran, da dela nadure, a v resnici ni nič posebnega. 1: Kaj je napad SYN Flood? Napadi SYN Flood izkoriščajo tristranski postopek stiskanja roke protokola TCP v IPv4. Ta protokol določa, da če želi ena stran vzpostaviti TCP povezavo z drugo stranjo, mora najprej poslati TCP SYN (sinhronizirani) paket drugi strani, nato pa druga stran pošlje TCP SYN + ACK paket nazaj po prejemu paketa, nato pa iniciator pošlje TCP ACK (ACKnowledge Character) paket nazaj, tako da so trije roki končani. V zgornjem postopku je nekaj pomembnih konceptov: Čakalna vrsta ni povezana: Pri protokolu tri-stranskega ročnega stika strežnik vzdržuje nepovezano čakalno vrsto, ki odpre vnos za vsak SYN paket (syn=j), ki označi, da je strežnik prejel SYN paket in pošlje potrditev stranki, medtem ko čaka na potrditveni paket stranke. Povezava, ki jo identificirajo ti vnosi, je na strežniku v Syn_RECV stanju, in ko strežnik prejme potrditveni paket od stranke, se vnos izbriše in strežnik preide v stanje VZPOSTAVLJENO. Z drugimi besedami, ko TCP strežnik prejme paket zahteve TCP SYN, mora TCP strežnik najprej dodeliti podatkovno območje za TCP povezavo, ki jo oblikuje ta roka, preden paket TCP pošlje nazaj TCP odjemalcu. Na splošno je povezava v stanju, ko je SYN paket prejet, ACK paket pa še ni bil prejetPolodprta povezava(Polodprta povezava)。 Parameter zaostanka: Označuje največje število nepovezanih vrst. SYN-ACK število ponovnih prenosov: Po tem, ko strežnik pošlje paket SYN-ACK, če paket za potrditev stranke ni prejet, strežnik izvede prvo ponovno oddajo, počaka določen čas in ne prejme potrditvenega paketa stranke, ter izvede drugo ponovno oddajo; če število ponovnih prenosov preseže največje število ponovnih prenosov, ki jih določi sistem, sistem izbriše podatke o povezavi iz čakalne vrste za polpovezavo. Upoštevajte, da čakalni čas za vsak ponovni prehod ni nujno enak. Pol-povezan čas preživetja: Nanaša se na največji čas, ki ga vnos v vrsti za polpovezavo preživi, torej največji čas od trenutka, ko storitev prejme SYN paket, do trenutka, ko je paket potrjen kot neveljaven, in vrednost časa je vsota največjega čakalnega časa za vse pakete zahteve za ponovno oddajo. Včasih tudi polpovezani čas preživetja imenujemo SYN_RECV čas preživetja. Pri najpogostejšem SYN flood napadu napadalec pošlje veliko število TCP SYN paketov žrtvi v kratkem času, pri čemer je napadalec TCP odjemalec in žrtev TCP strežnik. Po zgornjem opisu bi žrtev vsakemu TCP SYN paketu dodelila specifično podatkovno območje, če so imeli SYN paketi različne izvorne naslove (kar bi bilo napadalcem enostavno ponarediti). To bo močno obremenilo TCP strežniški sistem in sčasoma povzročilo, da sistem ne bo deloval pravilno. 2. Načelo SYN piškotkov Eden od načinov učinkovitega preprečevanja napadov SYN Flood so SYN piškotki. SYN Cookie Razlog D. Izumila sta ga J. Bernstain in Eric Schenk. SYN piškotki so modifikacija protokola TCP za tristransko ročno posredovanje na strežniški strani za preprečevanje napadov SYN Flood.Njegovo načelo je:Ko TCP strežnik prejme TCP SYN paket in vrne TCP SYN+ACK paket, ne dodeli namenskega podatkovnega območja, temveč izračuna vrednost piškotka na podlagi tega SYN paketa. Ko je prejet TCP ACK paket, TCP strežnik preveri verodostojnost TCP ACK paketa na podlagi te vrednosti piškotka. Če je zakonito, se dodeli namensko podatkovno območje za prihodnje TCP povezave. Pogovorimo se o tem, kako konfigurirati parametre jedra za implementacijo SYN piškotkov v Linuxu in FreeBSD Tretjič: Linux nastavitve Če konfiguracija strežnika ni dobra, število TCP TIME_WAIT vtičnikov doseže 20.000 ali 30.000 in strežnik se lahko zlahka izčrpa. Z modifikacijo parametrov jedra Linuxa se lahko zmanjša število TIME_WAIT vtičnic na strežniku. TIME_WAIT je mogoče videti z naslednjim ukazom: - 以下是代码片段:
- netstat -an | grep "TIME_WAIT" | wc -l
Kopiraj kodoNa Linuxu, kot je CentOS, lahko to dosežete z modifikacijo datoteke /etc/sysctl.conf. Dodaj naslednje vrstice: - 以下是代码片段:
- net.ipv4.tcp_fin_timeout = 30
- net.ipv4.tcp_keepalive_time = 1200
- net.ipv4.tcp_syncookies = 1
- net.ipv4.tcp_tw_reuse = 1
- net.ipv4.tcp_tw_recycle = 1
- net.ipv4.ip_local_port_range = 1024 65000
- net.ipv4.tcp_max_syn_backlog = 8192
- net.ipv4.tcp_max_tw_buckets = 5000
- net.ipv4.tcp_synack_retries = 2
- net.ipv4.tcp_syn_retries = 2
Kopiraj kodoPonazoritev: net.ipv4.tcp_syncookies = 1 pomeni, da so SYN piškotki omogočeni, kar je BOOLEAN. Ko SYN čaka, da se čakalna vrsta prelije, omogočite piškotke za obravnavo, kar lahko prepreči majhno število SYN napadov, privzeto pa je 0, kar pomeni, da je zaprt. net.ipv4.tcp_tw_reuse = 1 pomeni, da je omogočena ponovna uporaba, kar je BOOLEAN. Omogoča ponovno uporabo TIME-WAIT vtičnic za nove TCP povezave, privzeto na 0, kar pomeni zaprtje; net.ipv4.tcp_tw_recycle = 1 pomeni omogočiti hitro recikliranje TIME-WAIT vtičnic v TCP povezavah, kar je BOOLEAN, privzeto pa je 0, kar pomeni, da je zaprto. net.ipv4.tcp_fin_timeout = 30 pomeni, da če je vtičnica zaprta z lokalno zahtevo, ta parameter določa, kako dolgo bo ostala v stanju FIN-WAIT-2. Enota je sekunda. net.ipv4.tcp_keepalive_time = 1200 označuje, kako pogosto TCP pošlje sporočila o ohranjanju goriva, ko se uporablja ohranjanje (keepalive). Privzeto je 2 uri, nato spremenjeno na 20 minut. Enota je sekunda. net.ipv4.ip_local_port_range = 1024 65000 označuje obseg priključkov, ki se uporabljajo za odhodne povezave. Privzeti primer je majhen: 32768 do 61000, spremenjen v 1024 na 65000. net.ipv4.tcp_max_syn_backlog = 8192 označuje dolžino SYN vrste, ki je privzeto 1024, dolžina povečane vrste pa je 8192, da se sprejme več omrežnih povezav, ki čakajo na povezavo. net.ipv4.tcp_max_tw_buckets = 5000 označuje največje število vtičnic, ki jih sistem vzdržuje hkrati TIME_WAIT, in če je to število preseženo, se TIME_WAIT vtičnice takoj izpraznijo in natisne se opozorilno sporočilo. Privzeta vrednost je 180000, nato spremenjena na 5000. Za strežnike, kot sta Apache in Nginx, parametri v prejšnjih vrsticah lahko TIME_WAIT zmanjšajo število vtičnic, vendar pri Squidu učinek ni velik. Ta parameter nadzoruje največje število TIME_WAIT vtičnic, da prepreči, da bi strežnik Squid vlekel ven zaradi velikega števila TIME_WAIT vtičnic. net.ipv4.tcp_synack_retries in net.ipv4.tcp_syn_retries določata število ponovitev SYN. Zaženite naslednji ukaz, da konfiguracija začne veljati: Če ne želite spreminjati /etc/sysctl.conf, lahko za to uporabite tudi ukaz: - 以下是代码片段:
- /sbin/sysctl -w key=value
Kopiraj kodoČetrtič, postavljen pod FreeBSD yayujev osebni pogled na učenje: obramba pred synom v FreeBSD morda ni enaka kot v Linuxu, parametri niso povsem enaki, ustrezna konfiguracija in razumevanje pa morda nista pravilna:) Obstaja ena v TCP povezaviMSL (največja življenjska doba segmenta)KonceptNajvečji čas generiranjaVrednost MSL se v splošnih implementacijah izračuna za 30 sekund, nekatere implementacije pa trajajo 2 minuti. "Pasivni izklop" v TCP stroju stanj: Od CLOSE_WAIT do LAST_ACK velja naslednje pravilo: Ko TCP izvede aktivno izklop in pošlje nazaj zadnji ACK, mora povezava ostati v TIME_WAIT stanju dvakrat dlje kot MSL. To omogoča TCP-ju, da ponovno pošlje zadnji ACK, če se ta izgubi (drugi konec poteče in ponovno pošlje zadnji FIN). Obstoj tega pravila ima posledico, da povezave (odjemalski naslov, portni in strežniški naslov, port) na tem naslovu ni mogoče uporabiti v tem 2*-MSL času. Na primer, če zapremo povezavo po njenem ustvarjanju in jo nato hitro ponovno zaženemo, bo prenos nedosegljiv. TIME_WAIT čas je 2*MSL. Tako lahko TIME_WAIT čas zmanjšate z nastavitvijo net.inet.tcp.msl. Za spletni strežnik je to vrednost mogoče prilagoditi na 7500 ali 2000 (dostop do spleta, stran ni dovoljena za flashanje več kot 4~15 sekund, lahko razmislite o opustitvi -_-) Referenca nastavitve parametrov: - 以下是引用片段:
- net.inet.tcp.syncookies=1
- 防止DOS攻击
- net.inet.tcp.msl=7500
- 防止DOS攻击,默认为30000
- net.inet.tcp.blackhole=2
- 接收到一个已经关闭的端口发来的所有包,直接drop,如果设置为1则是只针对TCP包
- net.inet.udp.blackhole=1
- 接收到一个已经关闭的端口发来的所有UDP包直接drop
Kopiraj kodoNa FreeBSD yayu ni videl ukaza, kot je "/sbin/sysctl -p", ki bi lahko naredil vsebino /etc/sysctl.conf učinkovito, zato je preprosto uporabil ukaz: - 以下是代码片段:
- sysctl net.inet.tcp.syncookies=1 net.inet.tcp.msl=7500 net.inet.tcp.blackhole=2 net.inet.udp.blackhole=1
Kopiraj kodo
|