Wie in einem vorhergehenden Beitrag angekündigt, soll fail2ban mod_evasive ergänzen.
Statt nur Apache "403 Forbidden" Fehler ausliefern zu lassen, soll die IP komplett mit iptables geblockt werden.
Dazu brauchen wir:
- einen fail2ban Filter
- ein fail2ban jail
Zu 1): Eine Datei /etc/fail2ban/filter.d/apache-dosevasive.conf anlegen mit folgendem Inhalt:
# Fail2Ban configuration file
#
# Author: Xela
#
# $Revision: 728 $
#
[Definition]
# Option: failregex
# Notes.: regex to match the Forbidden log entrys in apache error.log
# maybe (but not only) provided by mod_evasive
#
# Values: TEXT
#
failregex = ^\[[^\]]*\]\s+\[error\]\s+\[client <HOST>\] client denied by server configuration:\s
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =
Zu 2): In der Datei /etc/fail2ban/jail.local folgendes hinzufügen:
[apache-dosevasive]
enabled = true
filter = apache-dosevasive
action = iptables-allports[name=dos]
logpath = /var/log/apache*/*error.log
bantime = 600
maxretry = 10
Da fail2ban localhost nie blockt (macht Sinn), testen wir von außerhalb.
Und zwar von einer IP, bei der nicht so extrem wichtig ist, ob sie den getesteten Server durchgehend erreichen kann.
Getestet wird mit Apache Benchmark - der kann ordentlich Gas geben:
ab -n 65 -c 25 http://dein-server.com/
Außerdem haben wir noch einen Konsolen Browser zum anschließenden Testaufruf von der selben IP:
w3m http://dein-server.com/
Folgendes sollte nach dem ab-Test passieren:
- w3m bekommt von der selben IP nichts mehr ausgeliefert und läuft in die Timeout
- du bekommst ein Mail von mod_evasive mit der IP der Attacke
- im Ordner /var/lock/mod_evasive/ liegt eine neue Datei "dos-123.12.12.XX" (die Test-IP)
- im fail2ban's Logfile gibt es einen Eintrag mit "fail2ban.actions: WARNING [apache-dosevasive] Ban ...'
- in /var/log/syslog gibt es einen mod_evasive Logeintrag "Blacklisting address 123.12.12.XX: possible DoS attack"
Die Blockade durch mod_evasive und fail2ban wird automatisch wieder aufgehoben.
Nach erfolgreichem Test kann die Datei im Ordner /var/lock/mod_evasive/ wieder gelöscht werden.
xela's Linux Blog am : Apache DOS Attacken erschweren mit mod_evasive