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.
Ce guide est obsolète. Veuillez ne pas le suivre.
Ce guide est testé sur:
- Debian 6.0 Squeeze
Avertissement
GreenSQL est un outil très puissant pour parer aux injections SQL. Cependant, il est très restrictif. Sa mise en place est complexe, et demande beaucoup de travail pour créer les règles de liste blanche application par application.
GreenSQL est une application open-source jusqu'à la version 1.3.0 présentée dans cet article. L'installation de la dernière version gratuite de cet outil nécessite de s'enregistrer sur le site de l'éditeur.
Prérequis
Ce guide nécessite le script mysql-tools disponible dans le guide Installer et configurer MySQL sur Debian.
Paramètres
Renseignez le numéro de la version à installer:
VERSION="1.3.0"
Installation
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, le serveur MySQL n'est accessible que pour la machine sur laquelle il est installé. Si vous souhaitez étendre son utilisation à d'autre machine, configurez GreenSQL pour écouter 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 si il n'y en a pas déjà un présent. Par exemple, installez LigHTTPd en suivant le guide Installer Lighttpd 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.