Installer le parefeu de base de données GreenSQL sur Debian
GreenSQL est un outil de prévention des injections SQL fonctionnement sur le principe de serveur mandataire. Il se glisse entre votre serveur MySQL et vos application pour protéger vos base de données des utilisateurs malveillants.
Remarque : Ce guide nécessite le script mysql-tools disponible dans le guide Installer et configurer MySQL sur Debian.
Note personnelle
Si GreenSQL est un outil très puissant pour limiter les attaques sur votre serveur, c'est avant tout car il est très limitatif. J'ai cessé de l'utiliser car il demande énormément de temps pour créer les règles de liste blanche application par application.
Installation
Renseignez la version que vous souhaitez installer :
VERSION="1.3.0"
Téléchargez le paquet adapté à votre architecture :
ARCH="$(command dpkg --print-architecture)" OS="Debian_5.0" if [ -z "$(command apt-cache search libevent1)" ]; then # For Debian Squeeze (and Ubuntu). OS="xUbuntu_10.04" fi command wget "http://www.greensql.net/download/get?os=${OS}&platform=${ARCH}&filename=greensql-fw_${VERSION}_${ARCH}.deb" \ --output-document="/tmp/greensql-fw.deb"
Installez les dépendances de GreenSQL :
if [ -z "$(command apt-cache search libevent1)" ]; then # For Debian Squeeze (and Ubuntu). command apt-get install libevent-1.4-2 else command apt-get install libevent1 fi
Créez un utilisateur système greensql (l'utilisateur créé par le paquet Debian n'est pas système) :
command adduser --system --shell /bin/sh --home /var/lib/greensql greensql
Installez GreenSQL :
DEBIAN_FRONTEND='noninteractive' command dpkg -i "/tmp/greensql-fw.deb"
Créez la base de données pour votre installation GreenSQL (le mot de passe demandé est celui de votre utilisateur "root" MySQL) :
MYSQL_PARAMS=$(command mysql-tools create-db GREENSQL)
Récupérez les paramètres de la nouvelle base de données :
MYSQL_HOST="$(echo "${MYSQL_PARAMS}" | command grep -e "^MYSQL_HOST" \ | cut --delimiter="=" --fields="2-")" MYSQL_DB="$(echo "${MYSQL_PARAMS}" | command grep -e "^MYSQL_DB" \ | cut --delimiter="=" --fields="2-")" MYSQL_USER="$(echo "${MYSQL_PARAMS}" | command grep -e "^MYSQL_USER" \ | cut --delimiter="=" --fields="2-")" MYSQL_PASSWORD="$(echo "${MYSQL_PARAMS}" | command grep -e "^MYSQL_PASSWORD" \ | cut --delimiter="=" --fields="2-")" echo "${MYSQL_PARAMS}"
Initialisez la base de données de GreenSQL :
command mysql --user="${MYSQL_USER}" --password="${MYSQL_PASSWORD}" \ --host="${MYSQL_HOST}" "${MYSQL_DB}" < "/usr/share/doc/greensql-fw/greensql-mysql-db.txt"
Mettez à jour le fichier de configuration de GreenSQL :
command sed -i \ -e "s/.*dbhost.*/dbhost=${MYSQL_HOST}/" \ -e "s/.*dbname.*/dbname=${MYSQL_DB}/" \ -e "s/.*dbuser.*/dbuser=${MYSQL_USER}/" \ -e "s/.*dbpass.*/dbpass=${MYSQL_PASSWORD}/" \ "/etc/greensql/greensql.conf"
Redémarrez votre serveur GreenSQL :
/etc/init.d/greensql-fw restart
GreenSQL est maintenant installé et écoute sur le port 3305.
Pour aller plus loin
Désactiver le proxy PostgreSQL
Si vous ne souhaitez pas utiliser GreenSQL pour PostgreSQL, désactivez la configuration concernée de GreenSQL :
MYSQL_HOST="$(command grep -e "^dbhost" /etc/greensql/greensql.conf \ | cut --delimiter="=" --fields="2-")" MYSQL_DB="$(command grep -e "^dbname" /etc/greensql/greensql.conf \ | cut --delimiter="=" --fields="2-")" MYSQL_USER="$(command grep -e "^dbuser" /etc/greensql/greensql.conf \ | cut --delimiter="=" --fields="2-")" MYSQL_PASSWORD="$(command grep -e "^dbpass" /etc/greensql/greensql.conf \ | cut --delimiter="=" --fields="2-")" MYSQL_PORT="$(command grep -e "^dbport" /etc/greensql/greensql.conf \ | cut --delimiter="=" --fields="2-")" if [ -z "${MYSQL_PORT}" ]; then MYSQL_PORT="3306" fi command mysql --host="${MYSQL_HOST}" --port="${MYSQL_PORT}" \ --user="${MYSQL_USER}" --password="${MYSQL_PASSWORD}" "${MYSQL_DB}" \ --execute="DELETE FROM proxy WHERE dbtype='pgsql';" /etc/init.d/greensql-fw restart
Installer GreenSQL sur le port par défaut de MySQL
Si vous souhaitez que GreenSQL écoute sur le port par défaut de MySQL, ceci afin de systématiser simplement son utilisation, échangez le port d'écoute de MySQL avec celui de GreenSQL :
command sed -i -e '/\[mysqld\]/,/^\(port[\t ]*=\).*$/{s/^\(port[\t ]*=\).*/\1 3305/}' \ "/etc/mysql/my.cnf" MYSQL_HOST="$(command grep -e "^dbhost" /etc/greensql/greensql.conf \ | cut --delimiter="=" --fields="2-")" MYSQL_DB="$(command grep -e "^dbname" /etc/greensql/greensql.conf \ | cut --delimiter="=" --fields="2-")" MYSQL_USER="$(command grep -e "^dbuser" /etc/greensql/greensql.conf \ | cut --delimiter="=" --fields="2-")" MYSQL_PASSWORD="$(command grep -e "^dbpass" /etc/greensql/greensql.conf \ | cut --delimiter="=" --fields="2-")" MYSQL_PORT="$(command grep -e "^dbport" /etc/greensql/greensql.conf \ | cut --delimiter="=" --fields="2-")" if [ -z "${MYSQL_PORT}" ]; then MYSQL_PORT="3306" fi command mysql --host="${MYSQL_HOST}" --port="${MYSQL_PORT}" \ --user="${MYSQL_USER}" --password="${MYSQL_PASSWORD}" "${MYSQL_DB}" \ --execute="UPDATE proxy SET frontend_port=3306, backend_port=3305 WHERE dbtype='mysql';" command sed -i -e 's/.*dbport.*/dbport=3305/' "/etc/greensql/greensql.conf" /etc/init.d/greensql-fw stop /etc/init.d/mysql restart /etc/init.d/greensql-fw start
Rendre accessible MySQL protégé par GreenSQL pour le réseau local
Par défaut, votre serveur MySQL n'est accessible que pour la machine sur laquelle il est installé. Si vous souhaitez étendre son utilisation à d'autre machine, faites en sorte que GreenSQL écoute sur toute les interfaces réseau, et plus seulement localhost :
MYSQL_HOST="$(command grep -e "^dbhost" /etc/greensql/greensql.conf \ | cut --delimiter="=" --fields="2-")" MYSQL_DB="$(command grep -e "^dbname" /etc/greensql/greensql.conf \ | cut --delimiter="=" --fields="2-")" MYSQL_USER="$(command grep -e "^dbuser" /etc/greensql/greensql.conf \ | cut --delimiter="=" --fields="2-")" MYSQL_PASSWORD="$(command grep -e "^dbpass" /etc/greensql/greensql.conf \ | cut --delimiter="=" --fields="2-")" MYSQL_PORT="$(command grep -e "^dbport" /etc/greensql/greensql.conf \ | cut --delimiter="=" --fields="2-")" if [ -z "${MYSQL_PORT}" ]; then MYSQL_PORT="3306" fi command mysql --host="${MYSQL_HOST}" --port="${MYSQL_PORT}" \ --user="${MYSQL_USER}" --password="${MYSQL_PASSWORD}" "${MYSQL_DB}" \ --execute="UPDATE proxy SET frontend_ip='0.0.0.0' WHERE dbtype='mysql';" /etc/init.d/greensql-fw restart
Activer l'interface Web d'administration de GreenSQL
Installez un serveur HTTP sur votre serveur si il n'y en a pas déjà un présent. Sinon, installez LigHTTPd en suivant mon guide Installer Lighttpd et PHP 5 sur Debian.
Copiez les sources de l'interface Web de GreenSQL :
command cp -r "/usr/share/greensql-fw" "/opt/greensql-fw"
Créez un dossier de cache pour l'interface d'administration :
command mkdir --parent "/var/cache/greensql-fw" command chown -R www-data:www-data "/var/cache/greensql-fw"
Configurez l'interface d'administration pour quelle se connecte à la base de données de configuration de GreenSQL :
MYSQL_DB="$(command grep -e "^dbname" /etc/greensql/greensql.conf \ | cut --delimiter="=" --fields="2-")" MYSQL_USER="$(command grep -e "^dbuser" /etc/greensql/greensql.conf \ | cut --delimiter="=" --fields="2-")" MYSQL_PASSWORD="$(command grep -e "^dbpass" /etc/greensql/greensql.conf \ | cut --delimiter="=" --fields="2-")" command sed -i \ -e "s/^\$db_name.*/\$db_name = \"${MYSQL_DB}\";/" \ -e "s/^\$db_user.*/\$db_user = \"${MYSQL_USER}\";/" \ -e "s/^\$db_pass.*/\$db_pass = \"${MYSQL_PASSWORD}\";/" \ -e 's|^$cache_dir.*|$cache_dir = "/var/cache/greensql-fw";|' \ "/opt/greensql-fw/config.php"
Il vous reste à configurer votre serveur HTTP pour afficher cette interface d'administration. Si vous utilisez Lighttpd, vous pouvez utiliser le code suivant :
if [ -d /etc/lighttpd/conf-available ]; then command echo '# Alias for greensql-fw directory alias.url += ( "/greensql-fw" => "/opt/greensql-fw/", )' > /etc/lighttpd/conf-available/50-greensql-fw.conf command lighty-enable-mod greensql-fw /etc/init.d/lighttpd force-reload fi
Votre interface d'administration GreenSQL est alors accessible à l'adresse fournie par la commande (résultat à adapter à votre configuration) :
echo "http://${HOSTNAME}/greensql-fw"
Les identifiants pour vous y connecter sont :
- Nom d'utilisateur : admin
- Mot de passe : pwd
Veillez à changer de mot de passe dès votre première connexion.
Remerciements
- Merci aux développeurs de GreenSQL.