So schützen Sie sich mit mod_evasive für Apache unter CentOS 7 vor DoS und DDoS

Einführung

Das Apache-Modul mod_evasive, das früher als mod_dosevasive bezeichnet wurde, schützt den Apache-Webserver vor DoS-, DDoS- (Distributed Denial of Service) und Brute-Force-Angriffen. Es kann Ausweichmanöver bei Angriffen durchführen und Missbräuche über E-Mail- und Syslog-Funktionen melden. Das Modul erstellt eine interne dynamische Tabelle mit IP-Adressen und URIs und verweigert eine einzelne IP-Adresse aus einer der folgenden Möglichkeiten:

  • Dieselbe Seite mehr als ein paar Mal pro Sekunde anfordern

  • Mehr als 50 gleichzeitige Anforderungen für dasselbe untergeordnete Element pro Sekunde

  • Anfragen stellen, während vorübergehend auf der schwarzen Liste

Wenn eine der oben genannten Bedingungen erfüllt ist, wird eine Antwort 403 gesendet und die IP-Adresse protokolliert. Optional kann eine E-Mail-Benachrichtigung an den Serverbesitzer gesendet oder ein Systembefehl ausgeführt werden, um die IP-Adresse zu blockieren.

In diesem Lernprogramm wird erläutert, wie Sie mod_evasive auf Ihrem Server installieren, konfigurieren und verwenden.

Voraussetzungen

Bevor Sie mit diesem Lernprogramm beginnen, sollten Sie Folgendes haben:

[[Schritt-1 - Installation von mod_evasive]] == Schritt 1 - Installation von mod_evasive

In diesem Abschnitt installieren wir die Pakete, die erforderlich sind, damit mod_evasive funktioniert, und installieren schließlich mod_evasive.

Zuerst müssen wir das EPEL-Repository (Extra Packages for Enterprise Linux) auf dem Server installieren. EPEL ist eine Fedora Special Interest Group, die hochwertige Open-Source-Add-On-Softwarepakete für Enterprise Linux erstellt, verwaltet und verwaltet. Führen Sie den folgenden Befehl aus, um das EPEL-Repository auf Ihrem Server zu installieren und zu aktivieren:

Auf CentOS 7:

sudo rpm -ivh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm

Auf CentOS 6:

sudo rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

Lassen Sie uns überprüfen, ob das EPEL-Repo aktiviert ist:

sudo yum repolist

Wenn aktiviert, sehen Sie das folgende Repo in der Ausgabe:

epel/x86_64                                                            Extra Packages for Enterprise Linux 7 - x86_64

Lassen Sie uns nun die Basispakete mit dem yum-Pluginprotectbase vor EPEL schützen.

sudo yum install yum-plugin-protectbase.noarch -y

Der Zweck desprotectbase-Plugins besteht darin, bestimmte yum-Repositorys vor Aktualisierungen durch andere Repositorys zu schützen. Pakete in den geschützten Repositorys werden von Paketen in nicht geschützten Repositorys nicht aktualisiert oder überschrieben, selbst wenn das nicht geschützte Repository eine spätere Version aufweist.

Jetzt können wir das Modul mod_evasive installieren. Führen Sie den folgenden Befehl aus, um es zu installieren:

sudo yum install mod_evasive -y

[[Schritt-2 - Überprüfen der Installation]] == Schritt 2 - Überprüfen der Installation

Nachdem mod_evasive installiert ist, überprüfen wir, ob die Konfigurationsdatei installiert wurde und ob das Modul geladen wird.

Während der Installation wurde die Konfigurationsdatei/etc/httpd/conf.d/mod_evasive.conf mod_evasive hinzugefügt. So überprüfen Sie diesen Lauf:

sudo ls -al /etc/httpd/conf.d/mod_evasive.conf

Die Ausgabe sollte ungefähr so ​​aussehen:

-rw-r--r-- 1 root root 3473 Jul 21 01:41 /etc/httpd/conf.d/mod_evasive.conf

Standardmäßig wird die folgende ZeileLoadModule oben in der Konfigurationsdateimod_evasive.conf hinzugefügt. Öffnen Sie die Datei und fügen Sie die Zeile hinzu, falls sie noch nicht vorhanden ist. Diese Zeile weist den Apache-Webserver an, das Modul mod_evasive zu laden und zu verwenden.

Unter CentOS 7 sollte die Zeile wie folgt lauten:

/etc/httpd/conf.d/mod_evasive.conf

LoadModule evasive20_module modules/mod_evasive24.so

Unter CentOS 6 sollte die Zeile folgendermaßen lauten:

/etc/httpd/conf.d/mod_evasive.conf

LoadModule evasive20_module modules/mod_evasive20.so

Lassen Sie uns die für den Apache-Webserver geladenen Module auflisten und nach mod_evasive suchen:

sudo  httpd -M | grep evasive

Die Ausgabe sollte zeigen:

 evasive20_module (shared)

[[Schritt 3 - Konfigurieren von mod_evasive]] == Schritt 3 - Konfigurieren von mod_evasive

Nachdem die Installation abgeschlossen und verifiziert ist, schauen wir uns die Konfiguration des Moduls an. mod_evasive kann einfach über die Konfigurationsdatei vonmod_evasive.confangepasst werden. In diesem Lernprogramm werden einige Konfigurationsparameter erläutert. In der Konfigurationsdatei finden Sie Informationen zu allen Parametern. Sie enthält eine Beschreibung der einzelnen Parameter.

Eine der Konfigurationsoptionen, die Sie ändern müssen, istDOSEmailNotify. Dies ist eine sehr nützliche Anweisung. Wenn dieser Wert festgelegt ist, wird eine E-Mail an die angegebene E-Mail-Adresse gesendet, sobald eine IP-Adresse auf die schwarze Liste gesetzt wird. Der E-Mail-Text zeigtmod_evasive HTTP Blacklisted 111.111.111.111 an

Wenn Sie beispielsweise mod_evasive-Warnungen senden möchten, um[email protected] zu sagen, bearbeiten Sie die Datei:

sudo nano /etc/httpd/conf.d/mod_evasive.conf

Kommentieren Sie die ZeileDOSEmailNotifyaus, indem Sie die#vor der Zeile entfernen, und ändern Sie die E-Mail-Adresse in Ihre:

/etc/httpd/conf.d/mod_evasive.conf

DOSEmailNotify   [email protected]

[.note] #Note: mod_evasive verwendet/bin/mail zum Senden von E-Mail-Benachrichtigungen. Sie müssen einen Mailserver installiert haben und funktionieren. Informationen zum Einrichten eines einfachen Mailservers, damit E-Mail-Benachrichtigungen funktionieren, finden Sie unterthis tutorial.
#

Ein weiterer Parameter, den Sie möglicherweise einstellen möchten, istDOSWhitelist. Mit dieser Option können IP-Adressen vertrauenswürdiger Clients zur Whitelist hinzugefügt werden, um sicherzustellen, dass sie niemals verweigert werden. Mit der Positivliste soll verhindert werden, dass Software, Skripte, lokale Such-Bots oder andere automatisierte Tools abgelehnt werden, wenn große Datenmengen vom Server angefordert werden.

Um eine IP-Adresse, z. B. 111.111.111.111, auf die Positivliste zu setzen, fügen Sie der Konfigurationsdatei einen Eintrag wie folgt hinzu:

/etc/httpd/conf.d/mod_evasive.conf

DOSWhitelist    111.111.111.111

Bei Bedarf können Platzhalter für die letzten 3 Oktette der IP-Adresse verwendet werden.

Um mehrere IP-Adressen aus verschiedenen IP-Bereichen auf die Positivliste zu setzen, können Sie der Konfigurationsdatei separate DOSWhitelist-Zeilen hinzufügen:

/etc/httpd/conf.d/mod_evasive.conf

DOSWhitelist    111.111.111.111
DOSWhitelist    222.222.222.222

DOSPageCount undDOSSiteCount sind zwei weitere Parameter, die auf weniger aggressive Werte geändert werden sollten, um zu vermeiden, dass Clients unnötig blockiert werden.

DOSPageCount ist das Limit für die Anzahl der Anforderungen für dieselbe Seite pro Seitenintervall (normalerweise auf eine Sekunde festgelegt) durch eine IP-Adresse. Sobald der Schwellenwert für dieses Intervall überschritten wurde, wird die IP-Adresse des Clients zur Sperrliste hinzugefügt. Der Standardwert ist mit 2 ziemlich niedrig eingestellt. Sie können ihn auf einen höheren Wert ändern, z. B. 20, indem Sie Folgendes in/etc/httpd/conf.d/mod_evasive.conf bearbeiten:

/etc/httpd/conf.d/mod_evasive.conf

DOSPageCount 20

DOSSiteCount ist das Limit für die Gesamtzahl der Anforderungen für dieselbe Website durch eine IP-Adresse pro Standortintervall (standardmäßig 1 Sekunde). So ändern Sie den Wert auf einen größeren Wert, z. B. 100 Sekunden:

/etc/httpd/conf.d/mod_evasive.conf

DOSSiteCount 100

Es gibt einige andere Parameter, die Sie ändern können, um eine bessere Leistung zu erzielen.

Eine davon istDOSBlockingPeriod. Dies ist die Zeitspanne (in Sekunden), für die ein Client (IP-Adresse) blockiert wird, wenn er zur Sperrliste hinzugefügt wird. Während dieser Zeit führen alle nachfolgenden Anforderungen vom Client zu einem Fehler 403 (Verboten) und der Timer wird zurückgesetzt (Standardwert ist 10 Sekunden).

Wenn Sie beispielsweise die Sperrzeit auf 300 Sekunden erhöhen möchten:

/etc/httpd/conf.d/mod_evasive.conf

DOSBlockingPeriod    300

Ein anderes istDOSLogDir, das sich auf das von mod_evasive verwendete temporäre Verzeichnis bezieht. Standardmäßig wird/tmp für einen Sperrmechanismus verwendet, der einige Sicherheitsprobleme aufwirft, wenn Ihr System für Shell-Benutzer geöffnet ist. Wenn Sie nicht privilegierte Shell-Benutzer haben, möchten Sie ein Verzeichnis erstellen, das nur für den Benutzer beschreibbar ist, unter dem Apache ausgeführt wird (normalerweiseapache), und diesen Parameter dann in Ihrer Datei mod_evasive.conf festlegen.

Um beispielsweise das von mod_evasive verwendete Verzeichnis auf/var/log/mod_evasive zu setzen, erstellen Sie das Verzeichnis mit:

sudo mkdir /var/log/mod_evasive

Setzen Sie dann den Besitz aufapache Benutzer:

sudo chown -R apache:apache /var/log/mod_evasive

Bearbeiten Sie nun die Konfiguration von mod_evasive und ändern Sie das Verzeichnis wie folgt:

/etc/httpd/conf.d/mod_evasive.conf

DOSLogDir           "/var/log/mod_evasive"

Ein weiterer Parameter istDOSSystemCommand. Wenn ein Wert festgelegt ist, wird der angegebene Befehl immer dann ausgeführt, wenn eine IP-Adresse auf die schwarze Liste gesetzt wird. Mit diesem Parameter können Sie mod_evasive in die auf Ihrem Server installierte Firewall oder ein Shell-Skript integrieren und die von mod_evasive in der Firewall gesperrten IP-Adressen blockieren.

[[Schritt 4 - Laden des mod_evasive-Moduls]] == Schritt 4 - Laden des mod_evasive-Moduls

Nachdem wir die Änderungen in der Konfigurationsdatei vorgenommen haben, müssen wir den Apache-Webserver neu starten, damit sie wirksam werden. Führen Sie den folgenden Befehl aus, um Apache neu zu starten.

Auf CentOS 7:

sudo systemctl restart httpd.service

Auf CentOS6:

sudo service httpd restart

[.note] #Note: Bitte beachten Sie, dass mod_evasive anscheinend mit den FrontPage Server Extensions in Konflikt steht. Möglicherweise möchten Sie auch die Einstellungen Ihres Apache-Webservers überprüfen, um sicherzustellen, dass mod_evasive ordnungsgemäß funktioniert. Vorgeschlagene Apache-Optimierungen sollten einen sehr hohen Wert fürMaxRequestsPerChild, aber nicht unbegrenzt (ein Wert von Null bedeutet unbegrenzt) undKeepAlive aktiviert haben, wobeiKeepAliveTimeout relativ lang eingestellt sind.
#

[[Schritt-5 - Test-mod_evasive]] == Schritt 5 - Mod_evasive testen

Lassen Sie uns einen kurzen Test durchführen, um festzustellen, ob das Modul ordnungsgemäß funktioniert. Wir werden ein Perl-Skripttest.pl verwenden, das von mod_evasive-Entwicklern geschrieben wurde. Um das Skript auszuführen, müssen wir zuerst das Paketperlauf dem Server installieren, indem wir:

sudo yum install -y perl

Das Testskript wird mit mod_evasive an folgendem Speicherort installiert:

/usr/share/doc/mod_evasive-1.10.1/test.pl

Standardmäßig fordert das Testskript 100 Mal hintereinander dieselbe Seite von Ihrem Apache-Webserver an, um mod_evasive auszulösen. Im letzten Abschnitt haben wir mod_evasive so geändert, dass Anforderungen pro Sekunde für dieselbe Seite toleranter sind. Wir müssen das Skript auf 200 Anforderungen in einer Reihe anstatt auf 100 ändern, um sicherzustellen, dass alle Benachrichtigungsmethoden von mod_evasive ausgelöst werden.

/usr/share/doc/mod_evasive-1.10.1/test.pl bearbeiten:

sudo nano /usr/share/doc/mod_evasive-1.10.1/test.pl

Suchen Sie die folgende Zeile:

/usr/share/doc/mod_evasive-1.10.1/test.pl

for(0..100) {

Ersetzen Sie100 durch200:

/usr/share/doc/mod_evasive-1.10.1/test.pl

for(0..200) {

Speichern und schließen.

Führen Sie zum Ausführen des Skripts Folgendes aus:

sudo perl /usr/share/doc/mod_evasive-1.10.1/test.pl

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
...

Das Skript sendet 100 Anfragen an Ihren Webserver. Der Antwortcode 403 gibt an, dass der Zugriff vom Webserver verweigert wird. mod_evasive meldet sich auch bei syslog an, wenn die IP-Adresse gesperrt ist. Überprüfen Sie die Protokolldatei mit:

sudo tailf /var/log/messages

Es sollte eine Zeile ähnlich der folgenden anzeigen:

Jul 29 00:11:18 servername mod_evasive[18290]: Blacklisting address 127.0.0.1: possible DoS attack.

Die Angabe der IP-Adresse wird von mod_evasive blockiert.

Wenn Sie mod_evasive so konfiguriert haben, dass E-Mail-Benachrichtigungen gesendet werden, wenn eine IP-Adresse gesperrt ist, befindet sich in Ihrem Posteingang eine E-Mail mit folgendem Inhalt:

mod_evasive HTTP Blacklisted 127.0.0.1

Fazit

mod_evasive ist hervorragend geeignet, um einzelne Server-, Skript- und verteilte Angriffe abzuwehren. Dies ist jedoch nur für die Verarbeitung und Beantwortung ungültiger Anforderungen bis zur Gesamtbandbreite und Prozessorkapazität Ihres Servers nützlich. Aus diesem Grund ist es eine gute Idee, dieses Modul für maximalen Schutz in Ihre Server-Firewall zu integrieren. Ohne eine wirklich gute Infrastruktur und eine vorhandene Firewall kann ein starkes DDoS Sie möglicherweise trotzdem offline schalten. Wenn ein Angriff sehr schwer und hartnäckig ist, müssen Sie möglicherweise auf eine hardwarebasierte DDoS-Schadensbegrenzungslösung umsteigen.