Apache/mod evasive

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist mit keiner aktuell unterstützten Ubuntu-Version getestet! Bitte hilf mit, indem du diesen Artikel testest. Wiki/FAQ - häufig gestellte Fragen (Abschnitt „Wikiartikel-testen“).

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. Installation von Programmen

  2. Ein Terminal öffnen

  3. Root-Rechte

  4. Einen Editor verwenden

Inhaltsverzeichnis
  1. Installation
  2. Konfiguration
  3. Kontrolle
  4. Problembehandlung
  5. Links

Dieser Artikel beschränkt sich auf die Sicherung des Webservers Apache durch das Modul mod_evasive 🇬🇧. Einen übergeordneten Artikel findet man im Wiki unter Apache/Sicherheit.

mod_evasive ist ein Modul, welches ähnlich einem Intrusion Prevention System (IPS) Muster eines möglichen Angriffs im Netzwerk erkennt. Dieses Modul konzentriert sich auf Denyal of Service (DoS) über das Protokoll HTTP, DDoS und Brute-Force-Attacken. Erkennt dieses Modul einen Angriff über eine IP-Addresse, so wird diese zeitbegrenzt auf allen Ports gesperrt. Zudem wird der Serveradministator per E-Mail informiert. Dies setzt einen funktionierenden MTA voraus.

Beispiel: Gibt man in einem beliebigen Browser die URL/IP-Addresse eines Servers ein und hält die Taste F5 für eine Minute gedrückt, so wird diese Seite immer neu geladen. Multipliziert man dies nun mit die Anzahl von anfragenden Clients (z.B. 100 oder 1000), simuliert man einen klassischen DDoS-Angriff, welcher in einem möglichen Bufferüberlauf des Servers enden kann.

Achtung!

Apache-Module sollte man immer in ihren /etc/apache2/mods-available/*.conf-Dateien ändern, nie in ihren /etc/apache2/mods-enabled/*.load-Dateien!

Installation

mod_evasive ist direkt in den Paketquellen von Ubuntu enthalten. Benötigt wird folgendes Paket [1]:

Paketliste zum Kopieren:

sudo apt-get install libapache2-mod-evasive 

Oder mit apturl die Pakete installieren. Link: apt://libapache2-mod-evasive

Anschließend muss das Modul noch aktiviert werden. Dies geschieht am einfachsten mit den folgenden Befehlen im Terminal [2][3]:

sudo a2enmod evasive 

Konfiguration

Um die Logdatei von mod_evasive für Apache schreibbar zu machen, muss ein neues Verzeichnis mit entsprechenden Rechten erzeugt werden:

sudo mkdir /var/log/mod_evasive
sudo chown www-data:root /var/log/mod_evasive 

Um die E-Mail-Benachrichtigungen von mod_evasive] 🇬🇧 per Sendmail zu erhalten, muss ein Symlink erstellt werden.

sudo ln -s /usr/bin/mail /bin/mail 

Experten-Info:

Wer mod_evasive nicht aus den offiziellen Paketquellen installiert, kann im Make-file den Pfad von /bin/mail auf /usr/bin/mail ändern.

Nun editiert [4] man noch die Konfigurationsdatei /etc/apache2/mods-available/evasive.conf:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<ifmodule mod_evasive20.c>
   DOSHashTableSize 3097
   DOSPageCount 2
   DOSSiteCount 50
   DOSPageInterval 1
   DOSSiteInterval 1
   DOSBlockingPeriod 10             ## Dauer der Blockade der einzelnen IP-Addresse in Sekunden
   DOSSystemCommand "echo +%s > /proc/net/xt_recent/badguys" oder "su root -c '/sbin/iptables -A INPUT -s %s -j DROP'"   ## Befehl an das System -> %s ist die SourceIP des Angreifers
   DOSLogDir "/var/log/mod_evasive"   ## Log-Verzeichnis
   DOSEmailNotify root@localhost    ## E-Mail-Adresse für Benachrichtigungen
   DOSWhitelist 127.0.0.1           ## Lokale Anfragen zulassen. Hier kann man auch einzelne IP-Adressen ausschließen.
</ifmodule>

Nach einem neuerlichen Laden der Konfiguration ist das Modul in gewünschter Weise aktiv:

sudo service apache2 restart
sudo service apache2 force-reload 

Kontrolle

Gibt man in einem beliebigen Browser die URL/IP-Addresse eines so geschützten Servers ein und hält die Taste F5 gedrückt, so erhält man (abhängig von der Bandbreite des Clients) nach ca. 2 - 5 Sekunden die folgende Meldung im Browser:

"http 403 - access denied"

Hält man die Taste F5 weiter gedrückt, bekommt man die Meldung, dass der Server nicht erreichbar ist. Zudem wird der Serveradministrator per E-Mail informiert. Der Inhalt der E-Mail sieht in etwa so aus (man beachte den Absender www-data):

Return-path: <www-data@meinedomain.net>
Envelope-to: root@meinedomain.net
Delivery-date: Sun, 23 Dec 2012 03:07:07 +0100
Received: from www-data by HOST with local (Exim 4.76)
	(envelope-from <www-data@meinedomain.net>)
	id 1Tmay2-0005Av-Dw
	for root@meinedomain.net; Sun, 23 Dec 2012 03:07:06 +0100
Date: Sun, 23 Dec 2012 03:07:05 +0100
To: root@meinedomain.net
User-Agent: Heirloom mailx 12.5 6/20/10
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-Id: <E1Tmay2-0005Av-Dw@HOST>
From: www-data <www-data@meinedomain.net>
X-SA-Exim-Connect-IP: <locally generated>
X-SA-Exim-Mail-From: www-data@meinedomain.net
X-SA-Exim-Scanned: No (on HOST); SAEximRunCond expanded to false

To: root@meinedomain.net
Subject: HTTP BLACKLIST 85.127.221.215

mod_evasive HTTP Blacklisted 85.127.221.215

In der /var/log/syslog steht so etwas wie:

Dec  23 03:07:05 HOST mod_evasive[2609]: Blacklisting address 85.127.221.215: possible DoS attack.

In der /var/log/mod_evasive steht so etwas wie:

dos-85.127.221.215

In der /var/log/apache2/error.log steht so etwas wie:

[Son Dec 23 03:07:05 2012] [error] [client 85.127.221.215] client denied by server configuration: /var/www/

Problembehandlung

Dieses Modul arbeitet nur mit dem Webserver Apache. Fehler sind in den folgenden Log-Dateien ersichtlich: