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
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
# 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
Utilisation du module PHP Suhosin
# apt-get install php5-suhosin
# 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
# vi /etc/apache2/conf.d/security
Avant :
ServerTokens Minimal
Après :
ServerTokens Prod
Avant :
ServerSignature On
Après :
ServerSignature Off
Avant :
TraceEnable On
Après :
TraceEnable Off
Il faut modifier la valeur de MaxRequestsPerChid pour éviter que cela soit en illimité.
Avant :
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
Après :
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 1000
</IfModule>
Il faut ensuite redémarrer Apache pour la prise en compte.
# /etc/init.d/apache2 restart
J'ai décidé d'utiliser le module mod_security pour augmenter la protection d'Apache.
Télécharger les sources du module sur le site de l'éditeur 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
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
<IfModule security2_module>
Include /etc/apache2/modsecurity_rules/*.conf
Include /etc/apache2/modsecurity_rules/base_rules/*.conf
#Include /etc/apache2/modsecurity_rules/optional_rules/*.conf
</IfModule>
# cd ../mods-enabled # ln -s ../mods-available/security.conf
Il faut ensuite redémarrer Apache.
# /etc/init.d/apache2 restart
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
<Directory /usr/share/phpmyadmin/>
SecRuleInheritance Off
php_value suhosin.executor.disable_eval off
</Directory>
Puis redémarrer Apache
# /etc/init.d/apache2 restart