MySQL DDoS
Inhaltsverzeichnis
MySQL DDoS
DDoS-Angriffe auf MySQL-Datenbanken und kaum jemand bemerkt diese!
Hintergründe:
Angriffswellen erfolgen auf alle Server weltweit und in der Regel lassen sich diese Angriffsspuren in den Log-Files erkennen, doch bei MySQL ist dies standardmäßig nicht der Fall!
Extreme Belastung der Server:
Bei den Grundeinstellung von MySQL führen jegliche Angriffe, die auf den Port 3306, also den Port, der bei den neuere Versionen für externe Zugriffe frei geschaltet ist, auch dazu noch zu Nameserver-Abfragen. Der MySQL-Server versucht nämlich die IP in den Servernamen aufzulösen!
Aus der Historie:
MySQL-Server:
Früher war grundsätzlich der externe Zugang zu MySQL durch --bind-address 127.0.0.1 untersagt. In den neueren Versionen ist in der my.cnf der externe Zugang von Außen auf MySQL erlaubt. Leider können wir nicht genau fest stellen, seit wann!
Plesk-Panel:
Bis Plesk-Panel Version 9.4 wurden den Usern nur Zugriff vom lokalen Server eingeräumt. Ab Version 10.0 wird jedem User, der über Plesk in MySQL angelegt wird, Zugriff auf die Datenbanken von extern, erlaubt!
Keine Protokollierung von unerlaubten Login-Versuchen:
Verschlimmernd, daß also MySQL von extern grundsätzlich erreichbar ist und Plesk grundsätzlich alle User den Zugriff extern ermöglicht, kommt die Tatsache, daß Login-Versuche ohne jegliche Protokollierung erfolgen können und daß sogar in Massen! Alle anderen Dienste auf Servern, wie SSH/FTP etc. dagegen protollieren diese Einlogg-Versuche und fallen direkt auf. Die Protokollierung kann jedoch eingeschaltet werden, ist aber als Standard nicht gesetzt!
Massnahmen zur Absicherung:
Jeder Administrator muß überlegen, ob er nun wieder den externen Zugang zu MySQL ermöglichen will oder nicht! Das Sperren ist einfach möglich, sicherlich aber nicht die beste Idee für einen shared Hosting - Server!
Externen Zugriff auf MySQL verbieten:
Kommentieren Sie in der my.cnf die Zeile bind-address=127.0.0.1 aus, indem Sie einfach das # - Symbol vor der Zeile entfernen
Protokollierung der Login-Versuche einschalten:
Ändern Sie in der my.cnf wie folgt:
log_slow_queries = /var/log/MySQL/MySQL-slow.log long_query_time = 2 log_error = /var/log/MySQL/MySQL-err.log log_warnings = 2
Zusammenfassend: log_slow_queries loggt dann in die Datei, wenn Abfragen länger als 2 Sekunden benötigen, was in der long_query_time definiert ist. Log-Error ist die Fehler-Log-Datei, in die MySQL eintragen soll. Prüfen Sie auch, ob standardmäßig bereits das Verzeichnis /var/log/MySQL angelegt worden ist! Log_warnings 2 sorgt dafür, daß auch Login-Versuche protokolliert werden!
Abfangen von Massen-Login-Versuchen:
- Installieren Sie fail2ban auf Ihrem Server, bei debian leicht über apt-get install fail2ban
- Prüfen Sie, ob in /etc/fail2ban/filter.d ein Filter für MySQL angelegt worden ist.
- Unter der aktuellen Debian Wheezy - Version ist dies nicht der Fall!
- Anleitung für die Erstellen Fail2Ban MySQL-Filter