====== 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