Vous êtes ici : Accueil / Debian GNU/Linux / Archives / Installer le parefeu de base de données GreenSQL sur Debian

Installer le parefeu de base de données GreenSQL sur Debian

Par Pierre-Yves Landuré Dernière modification 08/02/2014 07:42

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