[Tutorial] DOS-Angriff abwehren

  • Guten Tag,
    ich möchte euch heute hier eklären, wie man einen leichten DDOS-Angriff ( 1-5 MB/its ) von einem Apache Server abwehrt.


    Anleitung für die manuelle Abwehr eines DoS-Angriffes.

    Spoiler anzeigen

    So, zuerst benötigen wir folgendes Serverprogramm, welches sich iptables nennt, dieses installieren wir mit:

    Code
    apt-get update && apt-get upgrade && apt-get install iptables

    Spoiler anzeigen
    Gut, falls wir nun den Verdacht haben, dass wir geddost werden, geben wir in unserem SSH Clientem folgenden Befehl ein.

    Code
    netstat -ant | grep TIME_WAIT | awk '{ print $5}' | cut -d ":" -f 1 | sort | uniq -c

    Spoiler anzeigen
    Wir sehen nun die IP's welche viele Verbindungen offen haben, nun kopieren wir uns die IP und fügen sie in diesen Befehl ein:

    Code
    iptables -A INPUT -s IP-Adresse -j DROP

    Spoiler anzeigen
    Zum entsperren einer IP-Adresse geben wir den Befehl

    Code
    iptables -D INPUT -s 100.100.100.100 -j DROP

    Spoiler anzeigen

    Hier geben wir natürlich auch die IP ein ;)

    Spoiler anzeigen
    Am Ende, nachdem ihr die AngreiferIP's gesperrt habt, starten wir am besten den Server oder Apache2 neu.

    Code
    /etc/init.d/apache2 restart



    Es gibt noch mehrere Möglichkeiten, darunter z.B. Mod_Evasive!


    Anleitung 2: Mod_Evasive ( Apache only ;) )

    Spoiler anzeigen

    Was bringt uns mod_evasive?
    mod_evasive speichert die IP-Adressen und die Zeit des Zugriffes auf den Webserver in einer Tabelle, bei jedem erneutem Zugriff wird das erneut gemacht.
    Falls nach einiger Zeit(definierbarer Zeitinterval) ein erneuter Zugriff erfolgt, wird der Zugriff blockiert und für einen ( auch definierbaren ) Zeitinterval gesperrt.

    Spoiler anzeigen
    Wo liegt das Limit von mod_evasive?
    Falls der Angriff die gesamte Brandbeite ( häufig 1GB/its || 100Mb/its ) beansprucht, ist die Modifikationen überfordert und kann nichtmehr hinterherhalten, hier empfielt es sich, den Server offline zu legen, um den Traffic nicht zu beeinflussen!

    Spoiler anzeigen
    Installation:

    Spoiler anzeigen
    Vorrausgesetzt wird natürlich Apache2 !

    Spoiler anzeigen
    So, zuerst müssen wir den mod_evasive installieren, dies tuen wir mit folgendem Befehl.

    Code
    apt-get install libapache2-mod-evasive

    Spoiler anzeigen
    Hiernach müssen wir die Konfigurationen von Apache2 neuladen, dies tuen wir mit

    Code
    /etc/init.d/apache2 force-reload

    Spoiler anzeigen
    Jetzt müssen wir in der Konfigurationen die Option von mod_evasive einfügen, die Konfiguration finden wir unter

    Code
    nano
    Code
    /etc/apache2/apache.conf

    Spoiler anzeigen
    Wir hängen unten folgendes Zitat an:

    Code
    <IfModule mod_evasive20.c>    DOSHashTableSize    3097    DOSPageCount        2    DOSSiteCount        50    DOSPageInterval     1    DOSSiteInterval     1    DOSBlockingPeriod   10</IfModule>

    Spoiler anzeigen
    So, nun würde das ganze theoretisch funktionieren, jedoch können wir zusätzlich folgende Optionen hinzufügen,
    Whitelist
    Wir hinzufügen einfach folgenden Parameter direkt unter dem letztem Argument ( vor </IfModule>! )

    Code
    DOSWhitelist 127.0.0.1

    Spoiler anzeigen

    Hierbei wird die IP 127.0.0.1 bei Apache2-Angriffen nicht gebannt.

    Spoiler anzeigen
    Log
    Wir hinzufügen einfach folgenden Parameter direkt unter dem letztem Argument ( vor </IfModule>! )

    Code
    DOSLogDir "/var/log/mod_evasive"

    Spoiler anzeigen
    E-Mail Benachrichtigung
    Wir hinzufügen einfach folgenden Parameter direkt unter dem letztem Argument ( vor </IfModule>! )

    Code
    DOSEmailNotify mail@domain.com

    Spoiler anzeigen

    Nun drücken wir zuerst STRG+S, danach STRG+X!

    Spoiler anzeigen
    Wir müssen hiernach noch einmal die Konfigurationen von Apache2 neuladen, das müssen wir jedoch nun durch

    Code
    /etc/init.d/apache2 restart

    Spoiler anzeigen

    ausführen.

    Spoiler anzeigen
    Kann ich sichergehen, dass mod_evasive funktioniert?
    Du kannst ein Testscript installieren, welches einen Angriff auf deinem Server simuliert, beachte, dass du am besten die DOSWhitelist 127.0.0.1 eingetragen hast!
    Wir gehen in das Verzeichnis

    Code
    cd /home

    Spoiler anzeigen

    Hier geben wir ein:

    Code
    nano test.pl

    Spoiler anzeigen

    Wir fügen dort mit einem Rechtsklick folgendes Script ein:

    Perl
    #!/usr/bin/perl# test.pl: small script to test mod_dosevasive's effectivenessuse IO::Socket;use strict;for(0..100) {  my($response);  my($SOCKET) = new IO::Socket::INET( Proto   => "tcp",                                      PeerAddr=> "127.0.0.1:80");  if (! defined $SOCKET) { die $!; }  print $SOCKET "GET /?$_ HTTP/1.0\n\n";  $response = <$SOCKET>;  print $response;  close($SOCKET);}

    Spoiler anzeigen

    Das ganze speichern wir nun mit STRG+S , danach STRG+X ab.
    Nun geben wir der Datei bestimmte Rechte zum Ausführen.

    Code
    chmod 0700 test.pl

    Spoiler anzeigen

    Jetzt führen wir das Script aus, das tuen wir mit

    Code
    ./test.pl

    Spoiler anzeigen
    Falls nun dort am Anfang desöfteren ( ca. 20 Mal )

    Code
    HTTP/1.1 200 OK

    Spoiler anzeigen
     
    steht, danach aber dauerhaft

    Code
    HTTP/1.1 403 Forbidden

    Spoiler anzeigen

    hat alles geklappt!
    Super, deine Apache2 Server ist nun für etwas stärkere Angriffe geschützt!


    Anleitung 3: (D)DoS-Deflate

    Spoiler anzeigen

    DoS-Deflate ist ein zusätzlicher, effektiver Schutz gegen (D)DoS Attacken.

    Spoiler anzeigen
    Installation:

    Code
    wget http://www.inetbase.com/scripts/ddos/install.shchmod 0700 install.sh./install.sh

    Spoiler anzeigen

    Wir müssen am Ende das ganze mit der Taste A ( für Accept ) akzeptieren.

    Spoiler anzeigen
    Wir öffnen nun die Konfiguration:

    Code
    nano /usr/local/ddos/ddos.conf

    Spoiler anzeigen
    Das einzige was wir hier Konfigurieren sollten, ist E-MAIL TO, dort geben wir hinterher, anstatt root die E-Mail an.
    Das speichern wir mit STRG+S, dann STRG+X ab.
    Das ganze starten wir neu mit

    Code
    /usr/local/ddos/ddos.sh -c

    Spoiler anzeigen
    So, nun bekommen wir bei jedem Angriff ne Mail, der Angreifer wird für 600 Sekunden geblockt und alle sind zufrieden :)

    Ich hoffe, es hat euch geholfen, wie gesagt, das nutzt nur gegen kleine Angriffe, große mit einem Botnetzwerk lassen sich dadurch nicht abwehren.

    6 Mal editiert, zuletzt von Blu3scReeN () aus folgendem Grund: mod_evasive hinzugefügt|DoS Deflate hinzugefügt

  • Hier handelt es sich um die Manuelle Abwehr eines Angriffs.
    Man muss also immer noch Zugriff zur Konsole haben, damit man deine Methode nutzen kann.


    Meistens ist der Angriff aber so stark, das man gar keinen Zugriff mehr hat.


    Aber wie du bereits schreibst: "Leichten DDOS Angriff ".


    Wobei man hier "leichten" definieren müsste. Was wird als "leichter" Angriff angesehen etc.

  • 1. Das wäre kein DDoS Angriff sondern ein DoS Angriff. Der Angriff geht nur von einer Stelle aus.
    2. Gibt es Scripts, die genau das automatisch machen.
    3. Würde an dieser Stelle eine Attacke wenig ausmachen, denn wenn sie das machen würde, würdest du nicht mehr auf den SSH Server zugreifen können.


    Daher bringt das ganze annähernd nichts.


    mfG

  • 1. Das wäre kein DDoS Angriff sondern ein DoS Angriff. Der Angriff geht nur von einer Stelle aus.
    2. Gibt es Scripts, die genau das automatisch machen.
    3. Würde an dieser Stelle eine Attacke wenig ausmachen, denn wenn sie das machen würde, würdest du nicht mehr auf den SSH Server zugreifen können.


    Daher bringt das ganze annähernd nichts.


    mfG


    Klar, wenn ein einzelner PC dich DDOst?
    Mein Server wurde gerade von 2 Clienten geddost, geblockt, Apache neugestartet, alles klappt.


  • Hast du da auch ne Quelle oder ist das einfach nur daher gesagt?


    http://blog.bodhizazen.net/linux/prevent-dos-with-iptables/
    Das wäre ein Beispiel. Maßnahmen gegen DoS Angriffe gibt es bereits seit längerer Zeit.



    Klar, wenn ein einzelner PC dich DDOst?
    Mein Server wurde gerade von 2 Clienten geddost, geblockt, Apache neugestartet, alles klappt.


    Mal ehrlich. Was verstehst du nicht?
    Ist der Angriff groß genug (das er wirklich was bewirkt), kommst du garnicht dazu den Apache neuzustarten. Ist er nur annäherend groß, hängt sich wahrscheinlich schon netstat beim ausführen auf.
    Ein DoS Angriff hat i.d.R. nur krasse Auswirkungen auf deine Dienste wenn dafür Lücken genutzt werden. (z.B. Slowloris ist eine Methode, die an einer Lücke von mehreren Webservern ansetzt. Das ist aber mittlerweile auch schon teils überall gefixt.)


    mfG


  • Tut mir leid, dass das so ausathen muss, aber du liest anscheinend meine Beiträge nicht. Ich habe geschrieben, falls der Angriff nicht stark ist!


  • Tut mir leid, dass das so ausathen muss, aber du liest anscheinend meine Beiträge nicht. Ich habe geschrieben, falls der Angriff nicht stark ist!


    Ich will dich damit jetzt nicht beleidigen, versteh mich da nicht falsch.
    Es lohnt sich aber aktiv erst soetwas abzuwehren wenn es Auswirkungen hat. Das wäre dann, wenn du nicht mehr auf den SSH Server kommen würdest. Aber genau da ist es zu spät mit deiner Methode.
    Klar, diese Methode lohnt sich bedingt, wenn eine Anwendung sehr anfällig für Angriffe wäre, wenn z.B. MySQL sehr anfällig wäre, wäre es nütztlich dort Leute zu bannen. Eher aber würde es sich lohnen, dass automatisch regeln zu lassen.
    Es gab sogar Scripts, die bannen die IP nur auf diesem Port, finde das Script aber gerade nicht. Dann kann sich ein vermeintlicher Failban immer noch im TS melden.

  • Für Leute die sich grad ins Thema einarbeiten. Einfach und direkt :thumbup:
    Nur mal als eine kleine Info.


    Das ist keine DDoS-Abwehr sondern eine DoS-Abwehr (Distributed Denial of Service) was bei dem Tutorial ja nicht greift.


    [/Klugscheißer Mode Aus]


    MfG :)

    Benutze hauptsächlich folgende Technologien: Hyper-V, KVM, OpenVZ, Xen, PHP, C++, Exchange 2010, Citrix, KDTOP