Hozzászólások
Ezt fölösleges beírni, de mindegy.
Tehát végül arra jutottam, hogy a legjobb megoldás az (legalábbis nekem, de ezen persze lehet vitatkozni...), hogy ha DoS-t észlelek (telik a LOG/sok kapcsolat megy felém/stb), akkor a gépet lekapcsolom a netről/csak 1 szolgáltatást engedek, de azt is csak bizonyos helyekről.
(pl csak ssh, és 22 helyett 2222-es portról, az x.x.x.x/24 tartományból)
Ezt persze lehet még finomítani...
- A hozzászóláshoz be kell jelentkezni
Hát az elosztott DoS ellen tényleg nem véd az iplimit, de amikor egy gépről szimultán érkezik sok csomag, az ellen tökéletesen. Elosztott elllen meg ott a sima limit: mondjuk 8000/min, vagy akármi. Egy nagy portál akár 10.000 kérést is kiszolgálhat percenként. A saját géped terheltségétől függően állítsd be a számokat.
- A hozzászóláshoz be kell jelentkezni
Azt hiszem meg lehetne nézni az iptables limit "burst" kapcsolóját is; ez még csökkenti a logolást... (ha már utalt rá vki akkor bocs) :)
- A hozzászóláshoz be kell jelentkezni
[quote:b39bad83b2="szgabor"]Azt hiszem meg lehetne nézni az iptables limit "burst" kapcsolóját is; ez még csökkenti a logolást... (ha már utalt rá vki akkor bocs) :)
Csak linkben volt benne :)
-m limit --limit 3/min --limit-burst 8 -j ACCEPT
ezt icmp echo-ra próbáltam ki
működése az volt, hogy az első 8-at elfogadta, utána meg már csak 20 mp-enként egyet (folyamatos ping mellett), így percenként csak 3-at engedett.
- A hozzászóláshoz be kell jelentkezni
Egyvalamit nem láttam még: a -m limit az teljesen jó, de ha csak a logot akarod kímélni, akkor pl érdemes a limitet és a -J LOG-ot együtt használni.
Ha nem terminális targettel használod a limitet, akkor is műxik, de a fennti kombó pl. csak a logbejegyzéseket limitálja:
[code:1:7f9f00eeae]
iptables -A INPUT -p tcp --dport 80 --syn -m limit --limit 3/min --limit-burst 10 -J LOG --log-prefix "Syn -> [HTTP]: "
[...]
iptables -A INPUT -p tcp --dport 80 -J ACCEPT
[/code:1:7f9f00eeae]
Ez pl. beír tizet, ebből látszik hogy valami sügér ráfeküdt az F5-re, aztán csak 20 s- ként egyet, ettől függetlenül az összes csomag bejön, és a szerver kezeli őket "ha akarja az apacs majd letiltja" alapon.
- A hozzászóláshoz be kell jelentkezni
Üdv mindenkinek!
Tehát a kérdés/probléma az lenne, hogy van egy rendszerem (Debina sid), és ez serverként is üzemel, és emiatt annak rendje és módja szerint LOG-olok mindent (apache,postfix,ssh,.. és iptables). A gondom az, hogy már részese voltam (szándékosan) egy olyan támadásnak, ahol arra mentek, hogy a LOG-ot töltsék meg.
(Ez 512MB-s winyójú rendszeren történt, kb 250 MB volt szabad, és ez kb 3-5 óra alatt betellt).
Ez a támadás az iptables SSH-logját érintette csak, tehát ennél komplexebb módon is el lehet követni egy ilyet. A kérdésem: ez ellen hogyan lehetne védekezni?
- A hozzászóláshoz be kell jelentkezni
[quote:0276ed4975="cemaq"]Üdv mindenkinek!
Tehát a kérdés/probléma az lenne, hogy van egy rendszerem (Debina sid), és ez serverként is üzemel, és emiatt annak rendje és módja szerint LOG-olok mindent (apache,postfix,ssh,.. és iptables). A gondom az, hogy már részese voltam (szándékosan) egy olyan támadásnak, ahol arra mentek, hogy a LOG-ot töltsék meg.
(Ez 512MB-s winyójú rendszeren történt, kb 250 MB volt szabad, és ez kb 3-5 óra alatt betellt).
Ez a támadás az iptables SSH-logját érintette csak, tehát ennél komplexebb módon is el lehet követni egy ilyet. A kérdésem: ez ellen hogyan lehetne védekezni?
Indulásnak: http://iptables-tutorial.frozentux.net/iptables-tutorial.html
és pl percenként csak 3 csatlakozást engedélyezel:
[code:1:0276ed4975]$IPT -A input_ext -p tcp -m limit --limit 3/min -m tcp --dport 22 --tcp-flags SYN,RST,ACK SYN -j ACCEPT
$IPT -A input_ext -p tcp -m tcp --dport 22 -j DROP
[/code:1:0276ed4975]
- A hozzászóláshoz be kell jelentkezni
[quote:07978ccee9="cemaq"]Üdv mindenkinek!
Tehát a kérdés/probléma az lenne, hogy van egy rendszerem (Debina sid), és ez serverként is üzemel, és emiatt annak rendje és módja szerint LOG-olok mindent (apache,postfix,ssh,.. és iptables). A gondom az, hogy már részese voltam (szándékosan) egy olyan támadásnak, ahol arra mentek, hogy a LOG-ot töltsék meg.
(Ez 512MB-s winyójú rendszeren történt, kb 250 MB volt szabad, és ez kb 3-5 óra alatt betellt).
Ez a támadás az iptables SSH-logját érintette csak, tehát ennél komplexebb módon is el lehet követni egy ilyet. A kérdésem: ez ellen hogyan lehetne védekezni?
talan ugy kikapcsolod az ostoba logolast es csak azt logolod ami muszaj
- A hozzászóláshoz be kell jelentkezni
Köszi Panther az ötletet, de ha jól látom, akkor ez percenként csak 3 új kapcsolatot enged (IP-től függetlenül). Tehát az a bajom, hogy bizonyos servicek-re (pl apache) ez nemigazán jó (mert lehet egy percben x kérés is akár, de ez folyamatosan már igencsak terhelé a LOG-ot, és ha egy IP-ről jön, akkor egyértelmű, hogy mi.). Tehát nem tud valaki olyat, ami esetleg IP-ket megkülönböztetve csinálja ugyanezt? Bár ekkor a ip spoofing ellen védtelen vagyok, de legalább a támadó nem tud normális kapcsolatot se felépíteni... (Ill annak meg az lenne a baja, hogy sok memóriát fogyaszt, de hátha...)
UI: Ez már kukacoskodás tudom, de hátha van erre is valami "szép" megoldás. Mindezek ellenére Panther megoldása is nagyon jó.
- A hozzászóláshoz be kell jelentkezni
Van így is ötletem, de lehet, hogy programot kell írni rá: QUEUE target, és userspace program kapja meg a csomagokat. Az iptables -j QUEUE -h nem mondott túl sokat.
Használhatóbb:
http://www.davidcoulson.net/writing/lxf/39/iptables.pdf
This adds CONFIG_IP_NF_MATCH_IPLIMIT
match allows you to restrict the number of
parallel TCP connections to a server per client
IP address (or address block).
Examples:
# allow 2 telnet connections per client host
iptables -p tcp --syn --dport 23 -m iplimit --iplimit-above 2 -j REJECT
# you can also match the other way around:
iptables -p tcp --syn --dport 23 -m iplimit ! --iplimit-above 2 -j ACCEPT
# limit the nr of parallel http requests to 16 per class C sized
# network (24 bit netmask)
iptables -p tcp --syn --dport 80 -m iplimit --iplimit-above 16 -plimit-mask 24 -j REJECT
- A hozzászóláshoz be kell jelentkezni
[quote:d17072f134="cemaq"]Köszi Panther az ötletet, de ha jól látom, akkor ez percenként csak 3 új kapcsolatot enged (IP-től függetlenül).
Esetleg finomithatod tovabb ugy ezt a megoldast, hogy megfigyeled, h atlagosan hany uj kapcsolat letesul adott szolgaltatas portjara percenkent( { date && netstat -antp | grep :port ;} > service.txt, pl, cronbol percenkent meghivod), es ez alapjan allitod a limitet.
- A hozzászóláshoz be kell jelentkezni
Egész jó téma lesz ebből...
Tehát akkor 2 megjegyzésem lenne:
1: A limit-es megoldás, ha jól gondolom, akkor saját DoS-hoz vezet, azaz azáltal, hogy a DoS-olót tiltom, azáltal magam is kizárom. Ez mondjuk lassú DoS-nál káros főleg.
2: A problémával ekvivalens kérdés: Hogyan lehetne a limit-es megoldást úgy korlátozni, hogy IP-hez illeszkedjen. Lehetséges megoldás: Meg kell nézni a csomag IP-jét, és ha nem láttuk (ismeretlen), akkor csinálunk egy láncot, kb így: [code:1:e811e97f7a]$IPT -A input_ext -p tcp -m limit --limit 3/min -m tcp --dport 22 --tcp-flags SYN,RST,ACK SYN -s IP -j ACCEPT [/code:1:e811e97f7a]
Ezt egyszerűen meg is lehet csinálni, úgy, hogy a vizsgálatot mindig akkor végezzük, ha a csomi az egyik láncre sem illett, és akkor az új láncot felülre rakjuk. Csak az IP-t hogyan szedem ki? Ennek persze a problámája az, hogy nagyon nagy lesz a listám, és ip spoofing esetén meghalok.
- A hozzászóláshoz be kell jelentkezni
[quote:8e29d715a8="cemaq"]
2: A problémával ekvivalens kérdés: Hogyan lehetne a limit-es megoldást úgy korlátozni, hogy IP-hez illeszkedjen.
-m iplimit kettővel feljebb. Write only voltál!
- A hozzászóláshoz be kell jelentkezni
:oops: Tényleg nem figyeltem, sorry.
Azért köszönök mindent!
Szerkesztés:
Tényleg nem figyeltem, de azért hadd kötekedjek: Ez a restrict the number of parallel TCP connections
De egy IP-ről a egyszerre csak egy kapcsolatot kapok (nem párhozamosan kapcsolódnak.) De azért mégegyszer kösz az infokat.
- A hozzászóláshoz be kell jelentkezni
"talan ugy kikapcsolod az ostoba logolast es csak azt logolod ami muszaj"
Nincs ringbuffer linuxban ? :-O
- A hozzászóláshoz be kell jelentkezni
Nem kifejezetten DoS támadás, de talán ide sorolható leginkább.
Adva van egy apache webszerver, rajta sok virtualhost. Néhány weboldal bizonyos php fájljait rosszindulatú emberek belinkelték a saját oldalukba (nem ezen a szerveren hostolnak). Amikor látogatják az oldalukat, meghivódnak a mi php fájljaink is. Ahogy nő látogatottságuk, egyre többször hivódik meg. Az oldalukon semmi nem látszik, mert img src taggal szúrták be.
IP-t tiltani nem lehet, hiszen a látogatók otthoni gépéről jönnek a kérések.
Írtam egy scriptet ami átnézve a logokat, kiszűri a gyanúsan sokszor előforduló referer oldalakat, igy azokat egy statikus lapra irányitom. Ezzel sok erőforrást nyertem. Legalább a PHP & MySQL nem pörög.
Azonban nagyon sok apache szálat lefoglalnak, hiába emeltem kétszeresére, még mindig koppon jár.
300-ról 600-ra állítottam, magasabbra nem merem, mert ha megváltoztatják a refererként szolgáló fájl nevét, nem veszem észre időben, lerohasztják a szervert. (Képesek voltak már mind a 4 CPU magot 100%-on hajtani....)
Szóval, hogy lehetne tehermentesíteni az apache-ot ezektől a kéretlen kérésektől?
Legjobb lenne iptablessel, de ugye csak a refererrel tudnám megfogni őket, ami ott nem használható:(
Kinek milyen ötlete van?
Előre is köszönöm.
- A hozzászóláshoz be kell jelentkezni
A. másik webszerver, ami jól kezeli a sok párhuzamos kapcsolatot (pl. cherokee)
B. PHP-t átteszed FastCGI-re, apache-ot pedig mpm-worker-re vagy mpm-event-re.
- A hozzászóláshoz be kell jelentkezni
Tegyel az apache ele egy nginx-et, es azon szurd a referert.
--
Fontos feladatot soha ne bizz olyan gepre, amit egyedul is fel tudsz emelni!
- A hozzászóláshoz be kell jelentkezni
Próbáld meg ezt a php -jaid elé beszúrni vagy kulon fajlba elmented es php.ini -ben auto_prepend_file -kent hozzaadod.
http://hup.pastebin.com/m7e81682d
Es ne hasznalj apache -ot, mert lassu! Nginx rulz :)
- A hozzászóláshoz be kell jelentkezni
huh, ha nem jo a referer (1 php futas), akkor atiranyitod a fooldalra (ami vsz +1 php futast jelent). szvsz ezzel csak rontasz a helyzeten. akkor mar inkabb htaccess, es rewrite.
- A hozzászóláshoz be kell jelentkezni
MSN-n megbeszéltük a problémát Proci85 -tel.
A legegyszerűbb megoldás a HTTP_REFERER figyelése és HTTP 302 vagy 301 kóddal átirányitani a kérést egy másik url-re (ugyanazon a domainen) és ott adni egy 1 másodperces keep alive ott és már nincs is terhelés.
- A hozzászóláshoz be kell jelentkezni
Ilyesmi igen, konkrétan:
A problémás vhostokban már rég ott volt egy ilyen :
RewriteEngine on
RewriteMap emap txt:/etc/apache2/refer.txt
RewriteCond %{HTTP_REFERER} !^-$
RewriteCond ${emap:%{HTTP_REFERER}} ^-$
RewriteCond %{REQUEST_FILENAME} (.*)$
RewriteRule ^(.*)$ http://x.x.x.x/hiba.html [R,L]
Az default vhostba (ip) egy ilyet szúrtam : KeepAliveTimeout 1 (0-val végtelen lett nálam)
Global apache.confban pedig a korábbi 15-ről 5-re vettem. (Az 5 nem túl kevés?)
Az egyidejű kapcsolódások és az apache processzek száma is a harmadára csökkent.
A referer.txt tartalma:
http://csunyadomain.hu -
http://csunyadomain2.hu -
Tehát annyi változtatás történt, hogy a timeout 1 -es vhostba zavarom át a kéretlen kéréseket. Igy nem tartja fent a kapcsolatot, elvéve a többiek elől.
Ezúton is köszönet errotan kollégának a a timeout ötletért:)
A többieknek is köszönöm a segítséget, megnézem a lehetőségeket. Főleg a fastcgi-t tervezem.
- A hozzászóláshoz be kell jelentkezni
hasznalsz php cachet? (eaccelerator/xcache/stb) mysql query cache? esetleg memcache? akar a referereket is tarolhatod memcache-ben, es ez alapjan dontesz, hogy kiszolgalod, vagy nem.
egyebkent erdemes lenne a refererben szereplo szervek(ek) rendszergazdajat megkeresni.
- A hozzászóláshoz be kell jelentkezni
én a refererre irányítanám :]
- A hozzászóláshoz be kell jelentkezni
Connor, ezzz mekkora ötlet, tényleg! Visszaküldeni a feladónak:)) Gáz, hogy még csak meg sem fordult a fejemben.
Köszönöm!:)
ui. csak aztán nehogy ő is refererből visszaküldje aztán eljátszadozzunk egymással:)
ui2. Tovább gondolva a dolgot, nem a legetikusabb a szolgáltatójával szemben. Egyébként is tetszett viktor1983 javaslata, azt hiszem megfogadom és felkeresem a rendszergazdákat.
- A hozzászóláshoz be kell jelentkezni
ui: maxreferer (5-10?) után a brózer hagyja a dolgot.
ui2: ha nem etikus amit csinál akkor a szolgáltató majd jól elveri a port rajta, hisz az img tagot ő tette be.
- A hozzászóláshoz be kell jelentkezni