GreenSQL: mySQL-Firewall

Hinweis: Die aktuelle Version von GreenSQL kompiliert nicht auf FreeBSD. Die Vorgängerversionen haben einen Bug, die die CPU-Last auf 100% ansteigen lassen. Daher: Entweder per monit überwachen lassen oder darauf verzichten. Hinweise an die Entwickler brachten keine Besserung.

Leider gibt es zum Zeitpunkt des Verfassens dieses Tutorials keinen Port von GreenSQL, daher müssen wir einiges selbst machen. Aber immer schön der Reihe nach. Was ist GreenSQL eigentlich? - GreenSQL ist ein mySQL-Proxy, der zwischen den eigentlichen Datenbankserver und den Webserver geschalten wird. GreenSQL erhält also die Abfragen, die normalerweise an den mySQL-Server weitergeleitet werden. Diese Abfragen werden auf ihre Sicherheit hin untersucht und an den Datenbankserver weitergeleitet, falls keine Gefahr besteht. GreenSQL hat vier Betriebs-Modi:
  • Simulations-Modus (Intrusion Detection System)
  • Sperre verdächtiger Abfragen (Intrusion Prevention System)
  • Lern-Modus
  • Datenbank-Firewall
Im Simulationsmodus werden verdächtige Abfragen aufgezeichnet und der Administrator ggf. informiert. Als Prevention System sperrt GreenSQL verdächtige Abfragen direkt, es kann aber auch zu sog. false positives führen. Im Lern-Modus werden für einen bestimmten Zeitpunkt Datenbankabfragen aufgezeichnet und als sicher markiert. Hier kommt die Funktion als Datenbank-Firewall ins spiel, denn nach der Lernphase wird GreenSQL als Datenbank-Firewall betrieben, sodass alle unbekannten Abfragen geblockt werden. Zudem verfügt GreenSQL über ein Webinterface (welches hier allerdings nicht beschrieben wird), über welches GreenSQL gesteuert werden kann. Genug der Theorie, ab ans Werk:
  1. Als erstes überlegst du dir, ob du für GreenSQL eine eigene Jail anlegen willst oder ob du den Proxy in der mySQL-Jail laufen lassen willst. Der Vorteil einer eigenen Jail ist neben der Sicherheit auch der, dass bei den Webanwendungen lediglich die IP-Adresse und nicht auch der Port angepasst werden muss. Ich habe mich für eine Jail entschieden.

  2. Bevor wir uns an die Installation von GreenSQL machen, installieren wir die Abhängigkeiten:

    # cd /usr/ports/devel/bison/ && make install clean

    # cd /usr/ports/devel/libevent/ && make install clean

    # cd /usr/ports/devel/pcre/ && make install clean

    # cd /usr/ports/databases/mysql51-client/ && make install clean

  3. Dann laden wir uns also den aktuellen Quellcode von der Website herunter und entpacken ihn in einem temporären Verzeichnis, bspw. "/tmp". (Leider gibt es auf der Website keinen Direktlink zum Download, daher muss das Archiv erst downgeloaded und dann per SFTP wieder hochgeladen werden.)

    # tar -xzf greensql-fw-x.x.x.tar.gz

  4. Anschliessend wechseln wir in das neue Verzeichnis "greensql-fw-x.x.x" und kompilieren das Binary "greensql-fw":

    # cd /tmp/greensql-fw-x.x.x/ && make

  5. Nach dem Kompilieren kopieren wir das Binary in den Zielordner, an dem es vom Startskript erwartet wird:

    # cp /tmp/greensql-fw-x.x.x/greensql-fw /usr/local/sbin/.

  6. Anschliessend erstellen wir einen Datenbank-Benutzer in unserem existierenden Datenbank-Server zusammen mit einer neuen Datenbank an (bspw. greensql für User und Datenbank). Wie das geht ist nicht Teil dieses Tutorials. Achte darauf, dass die Datenbank von der GreenSQL-Jail aus zugänglich ist.

  7. Nachdem die Datenbank erstellt ist, importieren wir das SQL-File "mysql_create_tables.sql" aus dem Verzeichnis "/tmp/greensql-fw-x.x.x/db/". Vorher solltest du aber noch folgende Zeile (29) anpassen:

    insert into proxy values (0,'Default Proxy',INET_ATON('GREENSQL-IP'),GREENSQL-PORT,'MYSQL-HOSTNAME',INET_ATON('MYSQL-IP'),MYSQL-PORT,'mysql',1);

  8. Wenn das erledigt ist, erstellen wir das GreenSQL-Verzeichnis und kopieren die Konfigurationsdateien aus dem Verzeichnis "/tmp/greensql-fw-x.x.x/conf/" in das GreenSQL-Verzeichnis "/usr/local/etc/greensql/" bzw. das Startskript nach "/usr/local/etc/rc.d/":

    # mkdir -p /usr/local/etc/greensql/

    # cp /tmp/greensql-fw-x.x.x/conf/* /usr/local/etc/greensql/.

    # cp /tmp/greensql-fw-x.x.x/freebsd/greensql-fw.sh /usr/local/etc/rc.d/.

  9. Jetzt, wo die Konfigurationsdateien am richtigen Ort sind, müssen wir sie also an unsere Serverumgebung anpassen. Die "mysql.conf" müssen wir nicht anfassen, lediglich die "greensql.conf" muss angepasst werden. Die Abschnitte die zu bearbeiten sind, müssen wie folgt aussehen:

    [database]
    dbHost = IP-des-DB-Servers
    dbPort = 3306
    dbName = greensql
    dbUser = greensql
    dbpass = Passwort-des-GreenSQL-DB-Users

    [client]
    host = IP-des-DB-Servers
    port = 3306
    user = Root-Username-des-DB-Servers
    password = Root-Password-des-DB-Root-Users

  10. Jetzt müssen wir noch den User anlegen, unter dem GreenSQL laufen soll (unterprivilegierter User):

    # pw user add greensql -d /nonexistent -s /sbin/nologin

  11. Wie bei jedem FreeBSD-Startskript, passen wir noch die "rc.conf" an, um GreenSQL zu aktivieren. Folgende Zeile fügen wir also ein:

    greensql_enable="YES"

  12. Jetzt ist eigentlich erstmal soweit alles fertig, wir starten also GreenSQL das erste Mail mir folgendem Befehl:

    # /usr/local/etc/rc.d/greensql-fw start

  13. Wenn jetzt der GreenSQL-Prozess läuft (ps aux gibt Auskunft), kannst du bei deinen Webanwendungen die IP-Adresse des Datenbankservers durch die der GreenSQL-Jail austauschen. Achte aber darauf, dass auch der entsprechende Datenbank-User für die GreenSQL-Jail-IP im Datenbankserver freigeschalten ist.

  14. Um die Performance zu verbessern, solltest du Logging ausschalten. Diese weitere Konfigurationsoptionen findest du auf der Website, auch wie du die verschiedenen Betriebsmodi umstellst. Da dies sehr individuell ist (ich würde bspw. das IPS verwenden), soll dies nicht Teil dieses Tutorials sein.
Einen Kommentar hinzufügen

Einen Kommentar hinzufügen

This is a captcha-picture. It is used to prevent mass-access by robots. (see: www.captcha.net)
Code im diesem Bild:
Ihr Name(*):
Kommentar(*):