Erstellen Fail2Ban MySQL-Filter

Aus 1awww.com - Plesk-Server 1
Wechseln zu: Navigation, Suche

Absichern des MySQL-Server mit Fail2Ban

Erstellen des Fail2Ban - Filters für MySQL

Verzeichnis: /etc/fail2ban/filter.d

Neuanlage der Datei: MySQLd-auth.conf

Inhalt:

# Fail2Ban filter for unsuccesfull MySQL authentication attempts
#
#
# To log wrong MySQL access attempts add to /etc/my.cnf in [mysqld]:
# log-error=/var/log/mysqld.log
# log-warning = 2
#
# If using mysql syslog [mysql_safe] has syslog in /etc/my.cnf

[INCLUDES]

# Read common prefixes. If any customizations available -- read them from
# common.local
before = common.conf

[Definition]

_daemon = mysqld

failregex = ^%(__prefix_line)s(\d{6} \s?\d{1,2}:\d{2}:\d{2} )?\[Warning\] Access denied for user '\w+'@'<HOST>' (to database '[^']*'|\(using password: (YES|NO)\))*\s*$

ignoreregex = 



# DEV Notes:
#
# Technically __prefix_line can equate to an empty string hence it can support
# syslog and non-syslog at once.
# Example:
# 130322 11:26:54 [Warning] Access denied for user 'root'@'127.0.0.1' (using password: YES)
#
# Authors: Artur Penttinen
#          Yaroslav O. Halchenko


jail.conf und Filter mit intirgrieren:

Verzeichnis: /etc/fail2ban/

Ändern der Datei: jail.conf

Inhalt:

#
# MySQL Server - fehlerhafte Authtenitifizierung
#

[mysql-iptables]

enabled  = true
filter   = mysqld-auth
port     = 3600
logpath  = /var/log/mysql/mysql-err.log
maxretry = 6
findtime = 600
bantime  = 43200

Die jail.conf muß ggf. von Ihnen so angepaßt werden, wie diese Ihrem Muster entspricht!

Neustart von Fail2Ban:

Wechsel in Verzeichnis /etc/init.d Dort den Befehl ./fail2ban restart eingeben

Prüfung, ob MySQL Fehlerlog richtig erzeugt wird:

Geben Sie bitte den Befehl ein:

MySQL -u root -p

dann geben Sie bitte ein falsches Passwort ein!

Wechseln Sie in das Verzeichnis /var/log/MySQL und prüfen Sie die Fehler-Log-Datei mit tail MySQL-err.log

Wenn dort der fehlerhafte Passwort-Login verzeichnet worden ist, dann ist dies gut. Andernfalls müssen Sie MySQL anpassen, siehe MySQL DDoS

Prüfung, ob der Fail2Ban - Filter funktioniert:

fail2ban-regex /var/log/mysql/mysql-err.log /etc/fail2ban/filter.d/MySQLd-auth.conf
Wahrscheinlich müssen Sie bis zum nächsten Fail2Ban-Update folgendes anpassen:

Anpassung der Datums-Erkennung:

Wechseln Sie ins Verzeichnis: /usr/share/fail2ban/Server/ Dort editieren Sie bitte die Datei: datedetector.py

Suchen Sie z.B. im vi mit [ESC] /TAI64H

den Abschnitt TAI64H.

Fügen Sie vor diesem Abschnitt folgenden Code-Block ein:

 # MySQL: 130322 11:46:11
                        template = DateStrptime()
                        template.setName("YearMonthDay Hour:Minute:Second")
                        template.setRegex("^\d{2}\d{2}\d{2} +\d{1,2}:\d{2}:\d{2}")
                        template.setPattern("%y%m%d %H:%M:%S")
                        self.__templates.append(template)


Prüfen Sie nun erneut das fail2ban-regex - wie vorher beschrieben - ggf. müssen Sie noch einen Patch durchführen:

Fehler IP[2] (falscher Index) anpassen:

Wechseln Sie in das Verzeichnis: /usr/bin/ Editiren Sie dort: fail2ban-regex

Suchen Sie Abschnitte, wie nachfolgend beschrieben und löschen Sie die Zeilen, die mit - vorher gekennzeichnet sind und fügen Sie die jeweils beiden Zeilen, die mit einem + vorne gekennzeichnet sind dafür ein. Entfernen Sie dann aber die + Zeichen! (2 Zeilen raus und 4 Zeilen neu rein). Die Folgeversion fail2ban-0.8.4 wird auf Debian noch nicht ausgeliefert und diese Zeilen funktionieren auch problemlos in der 0.8.1 !!!


--- .software/fail2ban-0.8.4/fail2ban-regex	2008-03-05 15:18:08.000000000 -0800
+++ /usr/bin/fail2ban-regex	2009-10-10 11:37:15.000000000 -0700
@@ -225,10 +225,12 @@
 					ret = self.__filter.processLine(line)
 					if not len(ret) == 0:
 						if found == True:
-							ret[0].append(True)
+							for r in ret:
+								r.append(True)
 						else:
 							found = True
-							ret[0].append(False)
+							for r in ret:
+								r.append(False)
 						regex.inc()
 						regex.appendIP(ret)
 				except RegexException, e:


Prüfen Sie bitte erneut fail2ban-regex, wie oben beschrieben

Starten Sie Fail2Ban erneut:

Wie oben beschrieben, starten Sie Fail2Ban erneut. Fail2Ban sollte bei einem Missbrauch (wir lassen uns immer darüber vai Mail informieren), dann prüfen Sie direkt, ob in route oder IPtables -L die IP gesperrt worden ist!