See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 13773|Vastuse: 0

[Ohutusõpetus] SYN Flood rünnakud, SYN küpsiste kaitse ja kerneli parameetrite muutmine Linux/FreeBSD jaoks

[Kopeeri link]
Postitatud 27.10.2014 21:37:19 | | |

HäkkerSee on soovitav ja paljutõotav karjäär. Hindan häid häkkereid ja vihkan halbu häkkereid. Nii-öelda halb häkker on selline mees, kes paneb teisel pool ületunde töötama.

    SYN Flood rünnakud on tüüpiline teenusetõkestusrünnak. Niinimetatud teenusetõkestusrünnak on kaudne eesmärk saavutada rünnaku eesmärk, muutes ohvri hosti või võrgu võimetuks head teenust pakkuma. Häkkerid tahavad seda mängida, et näidata, et nad on tasakaalukad, võimekad ja julged, sundides teist osapoolt ületunde tegema, kuid tegelikult pole see midagi.

   1: Mis on SYN Flood rünnak?

    SYN Flood rünnakud kasutavad IPv4 TCP protokolli kolmekordset käepigistusprotsessi. See protokoll sätestab, et kui üks ots soovib TCP ühendust teise otsaga algatada, peab ta esmalt saatma TCP SYN (sünkroniseerimise) paketi teisele poolele, teine pool saadab TCP SYN + ACK paketi tagasi pärast selle kättesaamist, seejärel saadab algataja TCP ACK (ACKnowledge Character) paketi tagasi, nii et kolm käepigistust lõppevad.

    Ülaltoodud protsessis on mõned olulised mõisted:

    Järjekord ei ole ühendatud: Kolmepoolse käepigistuse protokollis hoiab server ühendamata järjekorda, mis avab iga kliendi SYN paketi (syn=j) jaoks kirje, mis näitab, et server on SYN-paketi kätte saanud ja annab kliendile kinnituse, oodates kliendi kinnituspaketti. Nende kirjetega tuvastatud ühendus on serveris Syn_RECV olekus ning kui server saab kliendilt kinnituspaketi, kustutatakse kirje ja server siseneb ESTABLISHED olekusse. Teisisõnu, kui TCP server saab TCP SYNi päringupaketi, peab TCP server enne TCP SYN+ACK paketi tagasi saatmist TCP kliendile esmalt eraldama andmeala, et teenindada selle käe poolt moodustatud TCP ühendust. Üldiselt on ühenduse seisund siis, kui SYN pakett on vastu võetud, kuid ACK paketti pole veel vastu võetudPoolavatud ühendus(poolavatud ühendus)。

    Backlog parameeter: Näitab maksimaalset ühendamata järjekordade arvu.

    SYN-ACK kordusedastuste arv: Pärast seda, kui server on saatnud SYN-ACK paketi, kui kliendi kinnituspaketti ei saa, sooritab server esimese korduseastuse, ootab teatud aja ja ei saa kliendi kinnituspaketti vastu, ning teeb teise kordusedastuse; kui kordusedastuste arv ületab süsteemi määratud maksimaalse kordusedastuste arvu, kustutab süsteem ühendusinfo poolühenduse järjekorrast. Pane tähele, et iga korduskäigu ooteaeg ei pruugi olla sama.

    Poolseotud ellujäämisaeg: Viitab maksimaalsele ajale, mille jooksul poolühenduse järjekorra kirje elab – see tähendab maksimaalset aega alates ajast, mil teenus saab SYN-paketi kätte kuni hetkeni, mil pakett on kinnitatud kehtetuks, ning ajaväärtus on kõigi kordusedastustaotluspakettide maksimaalse ooteaja summa. Mõnikord nimetame ka poolseotud ellujäämisajaks SYN_RECV ellujäämisajaks.

    Kõige tavalisemas SYN üleujutuse rünnakus saadab ründaja ohvrile lühikese aja jooksul suure hulga TCP SYN pakette, mille järel on ründaja TCP klient ja ohver TCP server. Ülaltoodud kirjelduse kohaselt määraks ohver igale TCP SYN paketile konkreetse andmetsooni, kui SYN pakettidel olid erinevad lähteaadressid (mida ründajatel oleks lihtne võltsida). See paneb TCP serverisüsteemile palju koormust ja lõpuks põhjustab süsteemi korraliku töö puudumise.

    2. SYN-küpsiste põhimõte

    Üks viis, kuidas tõhusalt vältida SYN Floodi rünnakuid, on SYN-küpsised. SYN Küpsiste põhjus D. Leiutasid J. Bernstain ja Eric Schenk.

    SYN-küpsised on TCP serveripoolse kolmepoolse käepigistusprotokolli modifikatsioon, et vältida SYN Floodi rünnakuid.Selle põhimõte on:Kui TCP server saab TCP SYN paketi ja tagastab TCP SYN+ACK paketi, ei eralda ta eraldi andmeala, vaid arvutab küpsise väärtuse selle SYN paketi põhjal. Kui TCP ACK pakett vastu võetakse, kontrollib TCP server selle küpsise väärtuse põhjal TCP ACK paketi legitiimsust. Kui see on seaduslik, eraldatakse pühendatud andmeala tulevaste TCP-ühenduste haldamiseks.

    Räägime, kuidas konfigureerida kerneli parameetreid, et rakendada SYN-küpsiseid Linuxis ja FreeBSD-s

    Kolm: Linuxi seaded

    Kui serveri konfiguratsioon pole hea, jõuab TCP TIME_WAIT soklite arv 20 000 või 30 000-ni ning server võib kergesti surma saada. Muutes Linuxi kerneli parameetreid, saab vähendada serveri TIME_WAIT soklite arvu.

    TIME_WAIT saab vaadata järgmise käsuga:

  1. 以下是代码片段:
  2. netstat -an | grep "TIME_WAIT" | wc -l
Kopeeri kood

Linuxis, näiteks CentOS-is, saab seda saavutada, muutes /etc/sysctl.conf faili.

    Lisa järgmised read:

  1. 以下是代码片段:
  2. net.ipv4.tcp_fin_timeout = 30
  3. net.ipv4.tcp_keepalive_time = 1200
  4. net.ipv4.tcp_syncookies = 1
  5. net.ipv4.tcp_tw_reuse = 1
  6. net.ipv4.tcp_tw_recycle = 1
  7. net.ipv4.ip_local_port_range = 1024    65000
  8. net.ipv4.tcp_max_syn_backlog = 8192
  9. net.ipv4.tcp_max_tw_buckets = 5000
  10. net.ipv4.tcp_synack_retries = 2
  11. net.ipv4.tcp_syn_retries = 2
Kopeeri kood

Illustreerida:

net.ipv4.tcp_syncookies = 1 tähendab, et SYN-küpsised on lubatud, mis on BOOLEAN. Kui SYN ootab, kuni järjekord üle voolab, luba küpsised sellega tegeleda, mis võib ära hoida väikest arvu SYN rünnakuid, ja vaikimisi on 0, mis tähendab, et see on suletud.
net.ipv4.tcp_tw_reuse = 1 tähendab, et taaskasutus on lubatud, mis on BOOLEAN. Lubab taaskasutada TIME-WAIT pesasid uute TCP ühenduste jaoks, vaikimisi 0, mis tähistab sulgemist;
net.ipv4.tcp_tw_recycle = 1 tähendab, et võimaldab kiiret TIME-WAIT pesade taaskasutamist TCP ühendustes, mis on BOOLEAN, ja vaikimisi on 0, mis tähendab, et see on suletud.
net.ipv4.tcp_fin_timeout = 30 tähendab, et kui pesa suletakse kohaliku päringuga, määrab see parameeter, kui kaua see püsib FIN-WAIT-2 olekus. Ühik on sekundid.
net.ipv4.tcp_keepalive_time = 1200 näitab, kui tihti TCP saadab keepalive sõnumeid, kui keepalive'i kasutatakse. Vaikimisi on see 2 tundi, muudetud 20 minutile. Ühik on sekundid.
net.ipv4.ip_local_port_range = 1024 65000 näitab väljundite vahemikku, mida kasutatakse välisühendusteks. Vaikimisi juhtum on väike: 32768 kuni 61000, muudetud 1024-ks 65000-ks.
net.ipv4.tcp_max_syn_backlog = 8192 näitab SYN järjekorra pikkust, mis on vaikimisi 1024, ning suurendatud järjekorra pikkus on 8192, et mahutada rohkem võrguühendusi, mis ootavad ühendust.
net.ipv4.tcp_max_tw_buckets = 5000 näitab maksimaalset pistikupesade arvu, mida süsteem samal ajal TIME_WAIT hoiab, ja kui see arv ületatakse, kustutatakse TIME_WAIT pistikud kohe ja trükitakse hoiatusteade. Vaikimisi on 180000, muudetud 5000-ks. Serverite puhul nagu Apache ja Nginx võivad eelnevate ridade parameetrid soklite arvu TIME_WAIT oluliselt vähendada, kuid Squidi puhul pole efekt suurepärane. See parameeter kontrollib maksimaalset TIME_WAIT soklite arvu, et vältida Squidi serveri vedamist suure hulga TIME_WAIT soklite poolt.
net.ipv4.tcp_synack_retries ja net.ipv4.tcp_syn_retries määravad SYN korduste arvu.

Käivita järgmine käsk, et konfiguratsioon jõustuks:

  1. 以下是代码片段:
  2. /sbin/sysctl -p
Kopeeri kood

Kui sa ei soovi /etc/sysctl.conf muuta, võid seda teha ka käsuga:

  1. 以下是代码片段:
  2. /sbin/sysctl -w key=value
Kopeeri kood

Neljandaks, loodud FreeBSD all

    Yayu isiklik õppevaatenurk: FreeBSD süni vastane kaitse ei pruugi olla sama mis Linuxis, seadistatud parameetrid ei ole täpselt samad ning asjakohane konfiguratsioon ja arusaam ei pruugi olla õige :)

    Üks on TCP lingisMSL (maksimaalne segmendi eluiga)MõisteMaksimaalne genereerimisaegMSL-i väärtust võetakse üldistes rakendustes 30 sekundit, mõnes rakenduses 2 minutit. "Passiivne väljalülitus" TCP olekumasinas: CLOSE_WAIT kuni LAST_ACK kehtib reegel: Kui TCP teeb aktiivse väljalülitamise ja saadab tagasi viimase ACK-i, peab ühendus jääma TIME_WAIT olekusse kaks korda kauem kui MSL. See võimaldab TCP-l saata viimase ACK-i uuesti juhuks, kui see kaob (teine ots aegub ja saadab viimase FIN-i uuesti).

    Selle reegli olemasolu tähendab, et sellel aadressil olevat linki (kliendi aadress, pordi ja serveripoolne aadress, port) ei saa selle 2*MSL aja jooksul kasutada. Näiteks, kui sulgeme lingi pärast selle loomist ja seejärel kiiresti taaskäivitame, siis port ei ole kättesaadav.

    TIME_WAIT aeg on 2*MSL. Seega saad TIME_WAIT aega vähendada, kohandades net.inet.tcp.msl. Veebiserveri puhul saab seda väärtust reguleerida 7500 või 2000 peale (juurdepääs veebile, lehte ei saa vilkuda kauem kui 4~15 sekundit, võid kaaluda loobumist -_-)

    Parameetrite seadistuse viide:

  1. 以下是引用片段:
  2. net.inet.tcp.syncookies=1
  3. 防止DOS攻击

  4. net.inet.tcp.msl=7500
  5. 防止DOS攻击,默认为30000

  6. net.inet.tcp.blackhole=2
  7. 接收到一个已经关闭的端口发来的所有包,直接drop,如果设置为1则是只针对TCP包

  8. net.inet.udp.blackhole=1
  9. 接收到一个已经关闭的端口发来的所有UDP包直接drop
Kopeeri kood

FreeBSD-s ei näinud yayu käsku nagu "/sbin/sysctl -p", mis oleks suutnud /etc/sysctl.conf sisu tõhusaks teha, nii et ta kasutas lihtsalt käsku:

  1. 以下是代码片段:
  2. sysctl net.inet.tcp.syncookies=1 net.inet.tcp.msl=7500 net.inet.tcp.blackhole=2 net.inet.udp.blackhole=1
Kopeeri kood






Eelmine:Wuchangi Tehnoloogiainstituudi tudengilt saadetud kiri meediale
Järgmine:Taasta tõde prostitutsiooni organiseerimise kohta hotellides kolledžites ja ülikoolides "Wuchangi Tehnoloogiainstituut: Kuulujutud lõpevad...
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com