Erstellen Fail2Ban MySQL-Filter
Inhaltsverzeichnis
- 1 Absichern des MySQL-Server mit Fail2Ban
- 1.1 Erstellen des Fail2Ban - Filters für MySQL
- 1.2 jail.conf und Filter mit intirgrieren:
- 1.3 Neustart von Fail2Ban:
- 1.4 Prüfung, ob MySQL Fehlerlog richtig erzeugt wird:
- 1.5 Prüfung, ob der Fail2Ban - Filter funktioniert:
- 1.6 Anpassung der Datums-Erkennung:
- 1.7 Fehler IP[2] (falscher Index) anpassen:
- 1.8 Starten Sie Fail2Ban erneut:
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:
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!