====== Sécurisation du couple Apache / PHP ====== ===== PHP ===== ==== Désactivation de fonctions ==== Pour sécuriser PHP, j'ai choisi de désactiver des fonctions. Pour cela il faut éditer le fichier /etc/php5/apache2/php.ini # vi /etc/php5/apache2/php.ini Avant : disable_functions = Après : disable_functions = chgrp, chmod, chown, debugger_on, diskfreespace, dl, email, ftp_connect, exec, get_current_user, getmxrr, getmypid, getmyuid, imap_mail, leak, link, listen, mb_send_mail, openlog, passthru, pfsockopen, php_uname, popen, rmdir, sem_acquire, sem_get, set_time_limit, shm_attach, shm_open, socket, syslog, system, tmpfile, phpinfo ==== Désactivation des erreurs sur l'écran ==== Il faut ensuite désactiver la remontée des erreurs sur l'écran. # vi /etc/php5/apache2/php.ini Avant : display_errors = On Après : display_errors = Off ==== Désactivation de l'affichage de la version de PHP ==== # vi /etc/php5/apache2/php.ini Avant : expose_php = On Après : expose_php = Off Une fois ces modifications faite, il faut redémarrer Apache. # /etc/init.d/apache2 restart ==== Module suhosin ==== Utilisation du module PHP Suhosin === Installation === # apt-get install php5-suhosin === Configuration === # vi /etc/php5/apache2/conf.d/suhosin.ini extension=suhosin.so [suhosin] suhosin.log.syslog.facility = 9 suhosin.log.syslog.priority = 1 suhosin.executor.include.max_traversal = 4 suhosin.executor.disable_emodifier = on suhosin.executor.disable_eval = on suhosin.sql.bailout_on_error = on suhosin.mail.protect = 2 suhosin.session.encrypt = Off Une fois ces modifications faite, il faut redémarrer Apache. # /etc/init.d/apache2 restart ===== APACHE ===== ==== Désactivation de remontées d'Apache ==== # vi /etc/apache2/conf.d/security === ServerTokens === Avant : ServerTokens Minimal Après : ServerTokens Prod === ServerSignature === Avant : ServerSignature On Après : ServerSignature Off === TraceEnable === Avant : TraceEnable On Après : TraceEnable Off ==== MaxRequestsPerChild ==== Il faut modifier la valeur de MaxRequestsPerChid pour éviter que cela soit en illimité. Avant : StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 0 Après : StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 1000 Il faut ensuite redémarrer Apache pour la prise en compte. # /etc/init.d/apache2 restart ==== Mod_Security2 ==== J'ai décidé d'utiliser le module mod_security pour augmenter la protection d'Apache. === Installation === Télécharger les sources du module sur le site de l'éditeur [[http://www.modsecurity.org/download/modsecurity-apache_2.5.12.tar.gz|modsecurity-apache_2.5.12.tar.gz]] Décompressez l'archive dans un répertoire temporaire # tar xvfz modsecurity-apache_2.5.12.tar.gz Il faut ensuite compiler ces sources Pré-requis : # apt-get install apache2-prefork-dev # apt-get install libxml2-dev # apt-get install lua50 # apt-get install liblua5.1-0 # apt-get install liblua5.1-0-dev # apt-get install build-essential Compilation : # cd modsecurity-apache_2.5.12/apache2 # ./configure --with-apxs=/usr/bin/apxs2 # make # make install Le module /usr/lib/apache2/modules/mod_security2.so est crée. Il faut maintenant le charger dans Apache. Pour cela, j'ai crée un fichier pour le charger par Apache. # vi /etc/apache2/mods-available/security.load LoadFile /usr/lib/libxml2.so LoadFile /usr/lib/liblua5.1.so LoadModule security2_module /usr/lib/apache2/modules/mod_security2.so # cd /etc/apache2/mods-enabled # ln -s ../mods-available/security.load # ln -s ../mods-available/unique_d.load === Règles === Les règles mises en places sont celles fournies dans les sources du module. Pour cela, il faut que voue recopiez le répertoire rules dans le répertoire /etc/apache2 # cp -Rp rules /etc/apache2/ # mv rules modsecurity_rules Ensuite, il faut charger le contenu de se répertoire. Pour cela on va créer un fichier de configuration # vi /etc/apache2/mods-available/security.conf Include /etc/apache2/modsecurity_rules/*.conf Include /etc/apache2/modsecurity_rules/base_rules/*.conf #Include /etc/apache2/modsecurity_rules/optional_rules/*.conf # cd ../mods-enabled # ln -s ../mods-available/security.conf Il faut ensuite redémarrer Apache. # /etc/init.d/apache2 restart ===== PHPMyAdmin ===== Il faut ajouter les lignes suivantes pour que le PHPMyAdmin continue de fonctionner suite à toutes les modifications précédentes. Ajouter soit dans le VHost qui pointe sur le PHPMyAdmin, soit dans le fichier de configuration de phpmyadmin. # allow phpmyadmin SecRuleInheritance Off php_value suhosin.executor.disable_eval off Puis redémarrer Apache # /etc/init.d/apache2 restart