Vor etwa einem  Monat habe ich darüber berichtet, dass Imrazor.de einer DoS-Attacke ausgesetzt war.  Nach ein paar Recherchen versuchte ich fail2ban so zu konfigurieren, dass eine DoS-Attacke erkannt und blockiert wird.

Das hatte jedoch den negativen Effekt, dass auch IP-Adressen blockiert wurden, die meiner Seite nichts böses wollten. Trotz mehrmaligem Umkonfigurieren der Skripte konnte ich keine zuverlässigen Ergebnisse erzielen. Ich deaktivierte also das fail2ban-Skript wieder und wartete ab, ob mich wieder eine DoS-Attacke ereilen würde.

Bis vorgestern ging es gut. Aber gegen Abend des 12.03. legte mir wieder ein Angriff von einer israelischen IP-Adresse den Apache2 mit aggressiven Anfragen lahm. Diesmal konnte ich zwar schneller gegensteuern, da ich direkten Zugriff auf den Server hatte, jedoch lies es mir keine Ruhe, dass Apache2 und damit der Blog solchen Angriffen hilflos ausgeliefert ist.

Ich machte mich also wieder auf die Suche und forschte dieses mal in alle Richtungen, ohne explizit fail2ban für den Schutz nutzen zu wollen.

Irgendwann stieß ich dann auf die Apache2-Erweiterung mod_evasive.

Dieses Modul wurde genau für die Abwehr von DoS-Attacken entwickelt. Es detektiert die Zugriffe auf den Apache2 in einem gewissen Zeitraum. Wird eine definierte Schwelle überschritten, liefert der Web-Server nur noch 403 Forbidden Meldungen an den Angreifer aus.

Ich habe nicht lange überlegt und das Modul installiert und eingerichtet, in der Hoffnung, dass es den Server beim nächsten Angriff entsprechend schützen kann.

Hier eine kurze Anleitung, was zu tun ist um mod_evasive zu nutzen:

sudo apt-get install libapache2-mod-evasive

Als erstes muss natürlich das Modul mit obigem Befehl installiert werden. Danach legen wir ein Hash-Log-Verzeichnis an und versehen es mit den passenden Rechten.

sudo mkdir -p /var/lock/mod_evasive
sudo chown -R www-data.root /var/lock/mod_evasive

Als nächstes benötigt mod_evasive noch eine Konfigurationsdatei mit den individuellen Parametern:

sudo nano /etc/apache2/mods-available/evasive.conf

Diese Datei befüllen wir mit nachfolgenden Parametern:

Quellcode   
<IfModule mod_evasive20.c>
    DOSHashTableSize 3097
    DOSPageCount 2
    DOSSiteCount 25
    DOSPageInterval 1
    DOSSiteInterval 1
    DOSBlockingPeriod 30
    DOSLogDir "/var/lock/mod_evasive"
    DOSEmailNotify yourname@yourdomain.com
    DOSWhitelist 127.0.0.1
    DOSWhitelist 127.0.0.*
    DOSSystemCommand "su - root -c 'iptables -I INPUT -s %s -j DROP'"
</IfModule>

Die Zeilen bedeuten im einzelnen:

  • DOSHashTableSize: Die Größe der HashTable  pro Verbindung. Eine größere HashTable bedeutet eine höhere Geschwindigkeit, jedoch auch mehr RAM-Verbrauch.
  • DOSPageCount: Anzahl der Requests pro Seite innerhalb einer bestimmten Zeit (mit DOSPageInterval festgelegt), nach denen weitere Requests blockiert werden.
  • DOSSiteCount: Anzahl der Requests pro Website innerhalb einer bestimmten Zeit (mit DOSPageInterval festgelegt), nach denen weitere Requests blockiert werden.
  • DOSPageInterval: Zeitraum für den DOSPageCount in Sekunden.
  • DOSSiteInterval: Zeitraum für den DOSSiteCount in Sekunden.
  • DOSBlockingPeriod: Zeitraum für wie lange ein Angreifer blockiert wird, in Sekunden.
  • DOSLogDir: Pfad zur Log-Datei
  • DOSEmailNotify: Mail-Adresse an die ein Hinweis verschickt wird, wenn mod_evasive aktiv werden musste.
  • DOSWhitelist: IP Adresse die ignoriert wird.
  • DOSSystemCommand: Ein Systemkommando, das ausgeführt werden soll. In unserem Fall wird die IP mittels iptables weggeblockt.

Nach dem Erstellen der Konfigurationsdatei muss Apache2 noch neu gestartet werden, damit die Änderungen auch übernommen werden:

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

Ob das Ganze auch funktioniert, kann man mit einem bereits mitgelieferten Perl-Skript testen. Dazu wird das Skript mit nachfolgendem Befehl aufgerufen und die Ausgabe beobachtet. Nach ein paar Anfragen wird der Web-Server 403 Forbidden zurückliefern, wenn alles richtig konfiguriert wurde.

sudo perl /usr/share/doc/libapache2-mod-evasive/examples/test.pl

Beim nächsten DoS-Angriff werde ich berichten, ob mod_evasive den erhofften Schutz brachte 🙂

Auch interessant:

Linux Workstation für Bildbearbeitung und 4K-Video... Nach ewigen Zeiten, um genau zu sein nach fast 10(!) Jahren, habe ich mich dazu entschlossen einen neuen Desktop-Rechner bzw. eine neue Workstation z...
Unifi Controller startet nach Upgrade nicht –... Wer einen Unifi Controller von Ubiquiti unter Ubuntu-Server oder Debian betreibt kennt das Problem: Man installiert unifi über Paketquellen in klas...
Professionelle Bildbearbeitung unter Linux Professionelle Bildbearbeitung unter Linux - Es muss nicht immer Windows oder Mac sein. Fotografie und Linux Vielleicht wäre der Titel "Professionel...
Automatisierte Sicherung einer Webseite unter Linu... Automatisierte Sicherung einer Webseite unter Linux -  Wer wie ich seine Seite im Netz unter Linux betreibt und diese komplett selbst administriert, d...
Neuer Speicher für Desktoprechner Nach einem überraschenden Festplattendefekt meiner Systemplatte ist mir quasi mein "Arbeitstier" schlagartig ausgefallen. Nichts mehr mit Fotos sortie...
Rechtschreibprüfung in KMail (Kontact) Immer wenn ich längere Mails mit KMail (Bestandteil von Kontact) schreibe, frage ich mich, ob meine Rechtschreibung wirklich so gut ist und ich tatsäc...