(D)DoS Attacken - Hilfe!!!
(D)DoS Attacken - Hilfe!!!
Hallo Leute,
der Server von einem Kollegen steht ständig unter (D)DoS.
Dabei werden über mehrere roots (manchmal auch nur einer) eine Seite vom Server aufgerufen und das ununterbrochen (pro sec. ~10 hits) bis er down geht.
Da ich erst neulich mit Linux angefangen habe, kenn ich mich nicht so gut aus mit den Paketen usw.
Ich würde gerne wissen, ob es dagegen einen wirksamen Schutz gibt?
Ich dachte an sowas:
Sobald ein Client mehr als 50 (http?) Anfragen innerhalb 30 Sekunden sendet, wird er vom Server gebannt?
Würde mich über schnelle Antworten, freuen.
der Server von einem Kollegen steht ständig unter (D)DoS.
Dabei werden über mehrere roots (manchmal auch nur einer) eine Seite vom Server aufgerufen und das ununterbrochen (pro sec. ~10 hits) bis er down geht.
Da ich erst neulich mit Linux angefangen habe, kenn ich mich nicht so gut aus mit den Paketen usw.
Ich würde gerne wissen, ob es dagegen einen wirksamen Schutz gibt?
Ich dachte an sowas:
Sobald ein Client mehr als 50 (http?) Anfragen innerhalb 30 Sekunden sendet, wird er vom Server gebannt?
Würde mich über schnelle Antworten, freuen.
Last edited by shmok on 2007-08-18 21:04, edited 1 time in total.
Re: (D)DoS Attacken - Hilfe!!!
vielen dank matze! ich werde es mir durchlesen..
Re: (D)DoS Attacken - Hilfe!!!
So, hab mich ein wenig durchgelesen, meintest du prefork und ist das standardmäßig installiert!?
Welche Einstellungen soll ich bei my.cnf machen? Welche sind am besten für diesen Server geeignet?
Processor Information
Processor #1 Vendor: AuthenticAMD
Processor #1 Name: AMD Athlon(tm) 64 Processor 3800+
Processor #1 speed: 2389.282 MHz
Processor #1 cache size: 512 KB
Memory Information
Memory: 967488k/981952k available (1882k kernel code, 13896k reserved, 761k data, 188k init, 64448k highmem)
Was kann ich sonst noch gegen die Attacken tun? Das alleine kann doch nicht reichen oder? der Angreifer ist ziemlich hartnäckig!
Welche Einstellungen soll ich bei my.cnf machen? Welche sind am besten für diesen Server geeignet?
Processor Information
Processor #1 Vendor: AuthenticAMD
Processor #1 Name: AMD Athlon(tm) 64 Processor 3800+
Processor #1 speed: 2389.282 MHz
Processor #1 cache size: 512 KB
Memory Information
Memory: 967488k/981952k available (1882k kernel code, 13896k reserved, 761k data, 188k init, 64448k highmem)
Was kann ich sonst noch gegen die Attacken tun? Das alleine kann doch nicht reichen oder? der Angreifer ist ziemlich hartnäckig!
Re: (D)DoS Attacken - Hilfe!!!
Hast du da 2 Nullen vergessen oder bricht der Indianer schon bei 10 Hits zusammen???shmok wrote:Dabei werden über mehrere roots (manchmal auch nur einer) eine Seite vom Server aufgerufen und das ununterbrochen (pro min. ~10 hits) bis er down geht.
Gegen (D)DoS kannst du dich kaum schützen. Ein halbwegs gut konfigurierten Webserver interessiert das nichtmal groß, Lighty ist in der Hinsicht sehr leistungsstark. Ansonsten könnte so ein Ban gerade bei AOL schnell mal zu unerwünschten Ergebnisen führen (alles schon erlebt *g*).shmok wrote:Sobald ein Client mehr als 50 (http?) Anfragen innerhalb 30 Sekunden sendet, wird er vom Server gebannt?
Edit:
Wenn es - wie von dir geschildert - Rootserver sind... naja, die wechseln ihre IP auch nicht ständig, zur Not hilft auch ein pauschel Drop aller Pakete von dieser IP per dedizierter Firewall. Wenn die Angriffe immer von der selben Adress-Range kommen, die für dich nicht relevant sind (Brasilien, China und der ganze "Rotz"), dann hilft auch ein pauschaler Drop.shmok wrote:Was kann ich sonst noch gegen die Attacken tun? Das alleine kann doch nicht reichen oder? der Angreifer ist ziemlich hartnäckig!
Gruß
dtdesign
Re: (D)DoS Attacken - Hilfe!!!
Sorry, es war Sekunde gemeint. Also 10 Aufrufe pro Sekunde...
Wie kann ich jemanden droppen? Ich glaube das wäre schon ein großer Schritt :)
Bin leider noch nicht so lang dabei mit linux..
Wie kann ich jemanden droppen? Ich glaube das wäre schon ein großer Schritt :)
Bin leider noch nicht so lang dabei mit linux..
Re: (D)DoS Attacken - Hilfe!!!
Aber wird der Apache dadurch nicht trotzdem ausgelastet, wenn ein ddos läuft? Selbst wenn er ständig nur eine billige Seite aufruft stürzt der Server ab bzw. man hat kein Schreibzugriff mehr..!?matzewe01 wrote:
Wenn es statische IP Adressen sind, dann könntest du dich und Dein php Script z.B. mit einem rewrite Regel "schützen".
http://www.modrewrite.de/13.12.0.0.1.0.phtml
Am besten wäre es, den Datenvekehr für die Angreifer roots komplett zu blockieren. Die sind irgendwie am schlimmsten, die Botnetz Attacken hatte der Server einigermaßen gut stand gehalten. Irgendwie komisch... liegt das an der besseren Anbindung? Das Botnetz bestand aus ~200 Clienten.
Danke, die Betreiber der roots werde ich auch noch informieren.
//edit
hab was gefunden... ist mod evasive gut? find aber leider keine anleitung :x
Re: (D)DoS Attacken - Hilfe!!!
Sorry, aber das nennt man normalen Load. 10 Request per Seconds sollte der Server locker wegstecken, wenn nicht liegt es an deiner eigenen Fehlkonfiguration, wahrscheinlich 50.000 Module mit je 25.000 Direktiven geladen oder so...shmok wrote:Sorry, es war Sekunde gemeint. Also 10 Aufrufe pro Sekunde...
Wenn ein Apache mehr als 60 Req/sec wegstecken kann, dann bin ich beeindruckt, aber 10 ist lächerlich :P
PS: Lighty (=LightTPD) steckt locker 40-60 Requests in der Standardconfig ein, meiner hat als Rekord momentan 73 Req / sec :P
Gruß
dtdesign
Re: (D)DoS Attacken - Hilfe!!!
Falls Du prefork nutzt:Falls Du ein anderes MP-Modul einsetzt, bitte entsprechend anpassen. Wenn das nicht langt, dann vorsichtig MaxClients erhöhen - auf mehr als 20 solltest Du aber bei nur 1GB RAM nicht gehen. Außerdem mal bitte die Apache-Config von überflüssigen Modulen entrümpeln. Eine flotte MySQL-Konfiguration findest Du hier.
Mehr kannst Du dann von Deiner Seite aus nicht tun (aber so verreckt Deine Mühle nicht mehr gleich an 20 oder 30 Requests/sec. - es sei denn, Du hast ganz übel programmierte Skripte am laufen).
Übrigens: mod_evasive hilft bei einem DoS, an dem <=5 angreifende Rechner beteiligt sind. Obwohl der Server zwar die "bösen" Anfragen nach wie vor entgegen nehmen muss, wird keine CPU-Zeit mehr an die Generierung dynamischer Inhalte etc. verschwendet, das hilft schon 'n bissl was. Gegen einen DDoS mit vielen beteiligten Angreifern hast Du aber keine Chance. Du kannst Deinen Provider bitten, seine Router so zu konfigurieren, dass sie die Angreifer-Pakete das virtuelle Klo runterspülen - aber selbst dann kann ein gut organisierter DDoS die Router so belasten, dass schlicht und ergreifend die Leitung zu Deinem Server verstopft ist.
Das letzte, was Du jetzt aber tun solltest, ist, einen Paketfilter auf Deinem Server einzuschalten. Der hat nämlich nur die (begrenzten) Ressourcen Deines Servers zur Verfügung und lässt sich damit leicht an die Grenzen der Belastbarkeit treiben. Diese zusätzliche Last sorgt dann dafür, dass Dein Server am Ende nur noch damit beschäftigt ist, Angreifer-Pakete zu droppen, und keine CPU-Zeit mehr übrig hat, um noch Webseiten auszuliefern.
@dtdesign:
Wie hast Du das gemessen? Nur statische Seiten, oder was dynamisches dahinter?
Code: Select all
<IfModule prefork.c>
StartServers 1
MinSpareServers 1
MaxSpareServers 2
ServerLimit 150
MaxClients 10
MaxRequestsPerChild 10000
</IfModule>
KeepAlive On
MaxKeepAliveRequests 200
KeepAliveTimeout 2Mehr kannst Du dann von Deiner Seite aus nicht tun (aber so verreckt Deine Mühle nicht mehr gleich an 20 oder 30 Requests/sec. - es sei denn, Du hast ganz übel programmierte Skripte am laufen).
Übrigens: mod_evasive hilft bei einem DoS, an dem <=5 angreifende Rechner beteiligt sind. Obwohl der Server zwar die "bösen" Anfragen nach wie vor entgegen nehmen muss, wird keine CPU-Zeit mehr an die Generierung dynamischer Inhalte etc. verschwendet, das hilft schon 'n bissl was. Gegen einen DDoS mit vielen beteiligten Angreifern hast Du aber keine Chance. Du kannst Deinen Provider bitten, seine Router so zu konfigurieren, dass sie die Angreifer-Pakete das virtuelle Klo runterspülen - aber selbst dann kann ein gut organisierter DDoS die Router so belasten, dass schlicht und ergreifend die Leitung zu Deinem Server verstopft ist.
Das letzte, was Du jetzt aber tun solltest, ist, einen Paketfilter auf Deinem Server einzuschalten. Der hat nämlich nur die (begrenzten) Ressourcen Deines Servers zur Verfügung und lässt sich damit leicht an die Grenzen der Belastbarkeit treiben. Diese zusätzliche Last sorgt dann dafür, dass Dein Server am Ende nur noch damit beschäftigt ist, Angreifer-Pakete zu droppen, und keine CPU-Zeit mehr übrig hat, um noch Webseiten auszuliefern.
@dtdesign:
Wie hast Du das gemessen? Nur statische Seiten, oder was dynamisches dahinter?
Re: (D)DoS Attacken - Hilfe!!!
Wie hast Du Deine 73Req/Sec gemessen?dtdesign wrote:PS: Lighty (=LightTPD) steckt locker 40-60 Requests in der Standardconfig ein, meiner hat als Rekord momentan 73 Req / sec :P
Code: Select all
~ # ab -c 1000 -n 10000 -k -q -S http://www.rootforum.de/index.html
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/
Benchmarking www.rootforum.de (be patient).....done
Server Software: lighttpd/1.4.16
Server Hostname: www.rootforum.de
Server Port: 80
Document Path: /index.html
Document Length: 2857 bytes
Concurrency Level: 1000
Time taken for tests: 8.414631 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Keep-Alive requests: 10000
Total transferred: 31190000 bytes
HTML transferred: 28570000 bytes
Requests per second: 1188.41 [#/sec] (mean)
Time per request: 841.463 [ms] (mean)
Time per request: 0.841 [ms] (mean, across all concurrent requests)
Transfer rate: 3619.65 [Kbytes/sec] received
Connection Times (ms)
min avg max
Connect: 0 13 193
Processing: 1 780 836
Total: 1 793 1029
Percentage of the requests served within a certain time (ms)
50% 781
66% 852
75% 868
80% 882
90% 916
95% 976
98% 977
99% 978
100% 1029 (longest request)
Re: (D)DoS Attacken - Hilfe!!!
Wie hast Du Lighty denn konfiguriert? Ich komme hier nur auf Werte um die 60 Requests pro Sekunde (Konfiguration weitestgehend wie im Wiki beschrieben) beim Zugriff auf eine statische Datei.
<offtopic>
Unabhängig davon: Ich krieg ab nicht mal mit den von Dir verwendeten Werten gestartet, über -c 10 und -n 10 komme ich nicht wirklich raus. Krieg dann immer sehr schnell folgendes zu sehen:Das gilt aber auch, wenn ich versuche auf lokale Maschinen zuzugreifen. Scheint an meinem FreeBSD hier zu liegen.
</offtopic>
<offtopic>
Unabhängig davon: Ich krieg ab nicht mal mit den von Dir verwendeten Werten gestartet, über -c 10 und -n 10 komme ich nicht wirklich raus. Krieg dann immer sehr schnell folgendes zu sehen:
Code: Select all
Test aborted after 10 failures
apr_socket_connect(): Operation already in progress (37)</offtopic>
Re: (D)DoS Attacken - Hilfe!!!
jfreund wrote:Wie hast Du Lighty denn konfiguriert?
Code: Select all
~ # cat /etc/lighttpd/lighttpd.conf
server.username = "lighttpd"
server.groupname = "lighttpd"
server.stat-cache-engine = "fam"
server.event-handler = "linux-sysepoll"
server.pid-file = "/var/run/lighttpd.pid"
server.errorlog = "/var/log/lighttpd/error_log"
server.document-root = "/var/www/localhost/default"
server.name = "www.rootforum.de"
server.modules = (
"mod_rewrite",
"mod_redirect",
"mod_alias",
"mod_access",
"mod_auth",
"mod_setenv",
"mod_expire",
"mod_fastcgi",
"mod_cgi",
"mod_ssi",
"mod_compress",
"mod_accesslog",
)
server.indexfiles = (
"index.xhtml",
"index.html",
"index.htm",
"index.php",
)
mimetype.assign = (
".pdf" => "application/pdf",
".sig" => "application/pgp-signature",
".spl" => "application/futuresplash",
".class" => "application/octet-stream",
".ps" => "application/postscript",
".torrent" => "application/x-bittorrent",
".dvi" => "application/x-dvi",
".pac" => "application/x-ns-proxy-autoconfig",
".swf" => "application/x-shockwave-flash",
".tgz" => "application/x-tgz",
".mp3" => "audio/mpeg",
".m3u" => "audio/x-mpegurl",
".wma" => "audio/x-ms-wma",
".wax" => "audio/x-ms-wax",
".ogg" => "application/ogg",
".wav" => "audio/x-wav",
".xbm" => "image/x-xbitmap",
".xpm" => "image/x-xpixmap",
".xwd" => "image/x-xwindowdump",
".asc" => "text/plain",
".c" => "text/plain",
".h" => "text/plain",
".cc" => "text/plain",
".cpp" => "text/plain",
".hh" => "text/plain",
".hpp" => "text/plain",
".conf" => "text/plain",
".log" => "text/plain",
".text" => "text/plain",
".txt" => "text/plain",
".diff" => "text/plain",
".patch" => "text/plain",
".ebuild" => "text/plain",
".eclass" => "text/plain",
".rtf" => "application/rtf",
".bmp" => "image/bmp",
".tif" => "image/tiff",
".tiff" => "image/tiff",
".ico" => "image/x-icon",
".mpeg" => "video/mpeg",
".mpg" => "video/mpeg",
".mov" => "video/quicktime",
".qt" => "video/quicktime",
".avi" => "video/x-msvideo",
".asf" => "video/x-ms-asf",
".asx" => "video/x-ms-asf",
".wmv" => "video/x-ms-wmv",
".tbz" => "application/x-bzip-compressed-tar",
".tar.bz2" => "application/x-bzip-compressed-tar",
".tar.gz" => "application/x-tgz",
".bz2" => "application/x-bzip",
".gz" => "application/x-gzip",
".tar" => "application/x-tar",
".zip" => "application/zip",
".jpeg" => "image/jpeg",
".jpg" => "image/jpeg",
".png" => "image/png",
".gif" => "image/gif",
".xhtml" => "text/html",
".html" => "text/html",
".htm" => "text/html",
".dtd" => "text/xml",
".xml" => "text/xml",
".css" => "text/css",
".js" => "text/javascript",
".php" => "application/x-httpd-php",
"" => "text/plain",
)
static-file.exclude-extensions = (
".pl",
".cgi",
".fcgi",
".php",
)
dir-listing.activate = "disable"
dir-listing.hide-dotfiles = "enable"
dir-listing.encoding = "utf-8"
dir-listing.exclude = (
"^.",
"~$",
"favicon.ico",
"robots.txt",
)
url.access-deny = (
"~",
".ini",
".inc",
".cfg",
".tpl",
".bak",
".dist",
".orig",
".htaccess",
".htpasswd",
".example",
".sample",
".lang",
)
fastcgi.server = (
".php" => (
(
"socket" => "/tmp/spawn-fcgi-lighttpd.sock",
"broken-scriptfilename" => "enable",
),
),
)
cgi.assign = (
".pl" => "/usr/bin/perl",
".cgi" => "/usr/bin/perl",
)
ssi.extension = (
".shtml",
)
compress.filetype = (
"text/javascript",
"text/plain",
"text/html",
"text/css",
"text/xml",
)
accesslog.filename = "/var/log/lighttpd/access_log"
accesslog.format = "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i""
$HTTP["url"] =~ ".pdf$" {
server.range-requests = "disable"
}
auth.backend.htpasswd.userfile = "/etc/lighttpd/auth_htpasswd.user"
auth.backend = "htpasswd"
# VHosts following
Sieht so aus.jfreund wrote:Scheint an meinem FreeBSD hier zu liegen.
Re: (D)DoS Attacken - Hilfe!!!
Auf statische Inhalte komme ich auf knapp 3.800 Requests pro Sekunde.
Bei dem Benchmark auf ein phpBB jedoch fällt mir eine enorm hohe php-cgi Zombie Anzahl auf die im Laufe des Tests auf über 500 anstieg (und auch wieder abfiel). Leider brach der Test irgendwann mit einem ernüchternen "Connection reset by peer" ab *grml*
Gruß
dtdesign
Bei dem Benchmark auf ein phpBB jedoch fällt mir eine enorm hohe php-cgi Zombie Anzahl auf die im Laufe des Tests auf über 500 anstieg (und auch wieder abfiel). Leider brach der Test irgendwann mit einem ernüchternen "Connection reset by peer" ab *grml*
Gruß
dtdesign
-
lord_pinhead
- Posts: 774
- Joined: 2004-04-26 15:57
Re: (D)DoS Attacken - Hilfe!!!
Ich komm ebenfalls nicht auf diese Werte, ich bin weit davon entfernt.
@Joe
Wie hast du deine Vhosts eingerichtet? Ich nutzte für suExec das Script das man auf der Lighty Page genommen hat
@Joe
Wie hast du deine Vhosts eingerichtet? Ich nutzte für suExec das Script das man auf der Lighty Page genommen hat
Re: (D)DoS Attacken - Hilfe!!!
Absolute Basiskonfiguration, Interna ausgelassen:Lord_Pinhead wrote:Wie hast du deine Vhosts eingerichtet?
Code: Select all
$SERVER["socket"] == ":80" {
$HTTP["host"] =~ "(^|.)rootforum.de$" {
$HTTP["host"] !~ "^(www|forum|wiki|faq).rootforum.de$" {
url.redirect = (
"^/(.*)" => "http://www.rootforum.de/",
)
}
$HTTP["host"] =~ "^faq.rootforum.de$" {
url.redirect = (
"^/(.*)" => "http://www.rootforum.de/faq/",
)
}
$HTTP["host"] =~ "^wiki.rootforum.de$" {
url.redirect = (
"^/(.*)" => "http://www.rootforum.de/wiki/",
)
}
$HTTP["host"] =~ "^forum.rootforum.de$" {
url.redirect = (
"^/(.*)" => "http://www.rootforum.de/forum/",
)
}
$HTTP["host"] == "www.rootforum.de" {
server.name = "www.rootforum.de"
server.document-root = "/var/www/vhosts/www.rootforum.de/htdocs"
accesslog.filename = "/var/log/lighttpd/www.rootforum_de_access.log"
$HTTP["url"] =~ "/images/" { expire.url = ( "" => "access 1 hours" ) }
auth.require = (
)
url.rewrite-once = (
)
fastcgi.server = (
".php" => (
(
"socket" => "/tmp/spawn-fcgi-rootforum.sock",
"broken-scriptfilename" => "enable",
),
),
)
}
}
}
Ich nutze spawn-fcgi und kein suExec, insofern kann ich den Performanceverlust durch die suExec-Wrapper nicht beurteilen.Lord_Pinhead wrote:Ich nutzte für suExec das Script das man auf der Lighty Page genommen hat
Hardware siehe Referenzsystem: http://www.rootforum.org/wiki/howto/gen ... stallation
Das Systemsetup entspricht weitestgehend http://www.rootforum.org/wiki/howto/gentoo
BTW: Der Benchmark lief auf eine statisches Dokument, bei dynamischen Dokumenten komme ich auch nicht über 100Req/Sec :roll:

