(D)DoS Attacken - Hilfe!!!

Rund um die Sicherheit des Systems und die Applikationen
Post Reply
shmok
Posts: 9
Joined: 2007-03-24 19:25
 

(D)DoS Attacken - Hilfe!!!

Post by shmok »

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.
Last edited by shmok on 2007-08-18 21:04, edited 1 time in total.
shmok
Posts: 9
Joined: 2007-03-24 19:25
 

Re: (D)DoS Attacken - Hilfe!!!

Post by shmok »

vielen dank matze! ich werde es mir durchlesen..
shmok
Posts: 9
Joined: 2007-03-24 19:25
 

Re: (D)DoS Attacken - Hilfe!!!

Post by shmok »

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!
dtdesign
Posts: 391
Joined: 2006-09-05 21:12
Location: Berlin
Contact:
 

Re: (D)DoS Attacken - Hilfe!!!

Post by dtdesign »

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.
Hast du da 2 Nullen vergessen oder bricht der Indianer schon bei 10 Hits zusammen???
shmok wrote:Sobald ein Client mehr als 50 (http?) Anfragen innerhalb 30 Sekunden sendet, wird er vom Server gebannt?
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*).

Edit:
shmok wrote:Was kann ich sonst noch gegen die Attacken tun? Das alleine kann doch nicht reichen oder? der Angreifer ist ziemlich hartnäckig!
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.

Gruß
dtdesign
shmok
Posts: 9
Joined: 2007-03-24 19:25
 

Re: (D)DoS Attacken - Hilfe!!!

Post by shmok »

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..
shmok
Posts: 9
Joined: 2007-03-24 19:25
 

Re: (D)DoS Attacken - Hilfe!!!

Post by shmok »

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
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..!?

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
dtdesign
Posts: 391
Joined: 2006-09-05 21:12
Location: Berlin
Contact:
 

Re: (D)DoS Attacken - Hilfe!!!

Post by dtdesign »

shmok wrote:Sorry, es war Sekunde gemeint. Also 10 Aufrufe pro Sekunde...
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...

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
User avatar
daemotron
Administrator
Administrator
Posts: 2641
Joined: 2004-01-21 17:44
Contact:
 

Re: (D)DoS Attacken - Hilfe!!!

Post by daemotron »

Falls Du prefork nutzt:

Code: Select all

<IfModule prefork.c>
   StartServers         1
   MinSpareServers      1
   MaxSpareServers      2
   ServerLimit        150
   MaxClients         10
   MaxRequestsPerChild  10000
</IfModule>

KeepAlive On
MaxKeepAliveRequests 200
KeepAliveTimeout 2
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?
User avatar
Joe User
Project Manager
Project Manager
Posts: 11191
Joined: 2003-02-27 01:00
Location: Hamburg
Contact:
 

Re: (D)DoS Attacken - Hilfe!!!

Post by Joe User »

dtdesign wrote:PS: Lighty (=LightTPD) steckt locker 40-60 Requests in der Standardconfig ein, meiner hat als Rekord momentan 73 Req / sec :P
Wie hast Du Deine 73Req/Sec gemessen?

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)
User avatar
daemotron
Administrator
Administrator
Posts: 2641
Joined: 2004-01-21 17:44
Contact:
 

Re: (D)DoS Attacken - Hilfe!!!

Post by daemotron »

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:

Code: Select all

Test aborted after 10 failures

apr_socket_connect(): Operation already in progress (37)
Das gilt aber auch, wenn ich versuche auf lokale Maschinen zuzugreifen. Scheint an meinem FreeBSD hier zu liegen.
</offtopic>
User avatar
Joe User
Project Manager
Project Manager
Posts: 11191
Joined: 2003-02-27 01:00
Location: Hamburg
Contact:
 

Re: (D)DoS Attacken - Hilfe!!!

Post by Joe User »

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
jfreund wrote:Scheint an meinem FreeBSD hier zu liegen.
Sieht so aus.
dtdesign
Posts: 391
Joined: 2006-09-05 21:12
Location: Berlin
Contact:
 

Re: (D)DoS Attacken - Hilfe!!!

Post by dtdesign »

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
lord_pinhead
Posts: 774
Joined: 2004-04-26 15:57
 

Re: (D)DoS Attacken - Hilfe!!!

Post by lord_pinhead »

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
User avatar
Joe User
Project Manager
Project Manager
Posts: 11191
Joined: 2003-02-27 01:00
Location: Hamburg
Contact:
 

Re: (D)DoS Attacken - Hilfe!!!

Post by Joe User »

Lord_Pinhead wrote:Wie hast du deine Vhosts eingerichtet?
Absolute Basiskonfiguration, Interna ausgelassen:

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",
                    ),
                ),
            )
        }
    }
}
Lord_Pinhead wrote:Ich nutzte für suExec das Script das man auf der Lighty Page genommen hat
Ich nutze spawn-fcgi und kein suExec, insofern kann ich den Performanceverlust durch die suExec-Wrapper nicht beurteilen.

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:
Post Reply