Apache 2

Cette partie détaille l’installation, la configuration et l’utilisation des modules pour Apache 2 pour renforcer la sécurité de votre site Internet.

Installation

Sous Debian, on peut utiliser les paquets comme d’habitude.

apt-get install apache2 php5 libapache2-mod-php5 php5-gd apache2-dev

Ce que permet le paquet :

  • apache2 → installation du serveur Web
  • php5 → installation de Php pour générer les pages dynamiques
  • libapache2-mod-php5 → fait le lien entre Apache2 et PHP5 pour activer PHP
  • php5-gd → installation de la librairie GD pour générer des images
  • apache2-dev → fournit l’outil “apxs2” pour compiler des modules Apache2

Configuration

Il faut modifier quelques lignes de la configuration Apache2 pour affiner la sécurité.

nano /etc/apache2/apache2.conf

Modifiez la ligne ServerTokens, car nous avons notre serveur en Production, par :

ServerTokens Prod

Puis modifiez la ligne ServerSignature pour empêcher l’affichage de la version du serveur, etc. et donc réduire les données qu’une personne mal intentionnée pourrait récupérer :

ServerSignature Off

Si vous avez des points d’interrogations à la place des accents, il faut décommenter cette ligne :

AddDefaultCharset ISO-8859-1

Modules Apache

Mod Rewriting

Le module Rewriting est très important pour le référencement Google.

Par exemple, au lieu d’avoir votre-site.com/voir_photos.php?id=1234 vous allez pouvoir formater l’URL de cette manière votre-site.com/voir_photos_superbe_motos_650_KLR,1234.
Lorsqu’un internaute cliquera sur votre lien, Apache2 effectuera un remplacement, et récupèrera l’ID 1234 pour afficher correctement la page.

Par défaut, le mod_rewrite est livré avec Apache2.

Un coup de

a2enmod rewrite

et le voila activé !

Il faut maintenant éditer le fichier des VirtualHosts pour l’activer sur les sites.

nano /etc/apache2/sites-enabled/000-default

Puis ajouter la directive

AllowOverride all

dans le fichier.

 # activation url rewriting
 AllowOverride all
 Options FollowSymLinks MultiViews
 Order allow,deny
 allow from all
 # This directive allows us to have apache2's default start page
 # in /apache2-default/, but still have / go to the right place
 RedirectMatch ^/$ /index.html

Ainsi, dès qu’un site se situe dans le dossier ”/var/www” il sera possible de jouer avec les fichier .htaccess !

Mod SuPHP

Le module SUPHP permet à Apache de se faire passer pour le propriétaire du fichier. Cela est très utile lorsque vous hébergez plusieurs sites et que chaque site appartient à un utilisateur Linux. Sans l’utilisation de ce module, il faut donner au groupe Apache les droits sur le dossier de l’utilisateur pour que la création d’un dossier avec la fonction mkdir sous PHP ne génère pas un erreur de type : permission denied !

Ainsi, votre dossier appartient à toto et lorsque toto se connecte par FTP, il transfère ses fichiers dans le dossier géré par Apache et lors des modifications telles que l’envoi d’images de vos internautes, les dossiers et fichiers seront la propriété de toto donc il n’y aura pas de soucis de permissions.

Par contre, SuPHP ne peut pas fonctionner avec le module PHP5, il faut utiliser PHP5 en CGI.

apt-get install libapache2-mod-suphp php5-cgi

Pour configurer les options de PHP, il faut modifier le fichier CGI :

nano /etc/php5/cgi/php.ini

Sous Apache2 il faut autoriser le VirtualHost du site Internet

nano /etc/apache2/sites-enabled/000-default

Options ExecCGI

On vérifie la bonne description du module :

nano /etc/apache2/mods-enabled/suphp.conf

AddHandler x-httpd-php .php .php3 .php4 .php5 .phtml
suPHP_AddHandler x-httpd-php
suPHP_Engine on
# # Use a specific php config file (a dir which contains a php.ini file)
# suPHP_ConfigPath /etc/php4/cgi/suphp/
# # Tells mod_suphp NOT to handle requests with the type .
# suPHP_RemoveHandler

Ensuite on configure le module avec son fichier de configuration :

nano /etc/suphp/suphp.conf

[global]
 ;Path to logfile
 logfile=/var/log/suphp/suphp.log

;Loglevel
 loglevel=info

;User Apache is running as
 webserver_user=www-data

;Path all scripts have to be in
 ;docroot=/var/www
 docroot=/home/sites

;Path to chroot() to before executing script
 ;chroot=/mychroot

; Security options
 allow_file_group_writeable=false
 allow_file_others_writeable=false
 allow_directory_group_writeable=false
 allow_directory_others_writeable=false

;Check wheter script is within DOCUMENT_ROOT
 check_vhost_docroot=true
;Send minor error messages to browser
 errors_to_browser=false
;PATH environment variable
 env_path=/bin:/usr/bin

;Umask to set, specify in octal notation
 ;umask=0077
 umask=0002

; Minimum UID
 min_uid=1000

; Minimum GID
 min_gid=1000

[handlers]
 ;Handler for php-scripts
 x-httpd-php=php:/usr/bin/php-cgi

;Handler for CGI-scripts
 x-suphp-cgi=execute:!self

On active le module SuPHP et on redémarre Apache2 :

a2enmod suphp
/etc/init.d/apache2 restart

Mod Evasive

Ce module va empêcher / limiter les attaques DDOS en bloquant l’IP qui tente d’effectuer des milliers de requêtes sur le serveur pour mettre à genoux le serveur.

Le module sera téléchargé puis compilé (chez moi, l’installation par paquet n’a pas fonctionné) avec “APXS2” :

cd /tmp
 wget http://www.zdziarski.com/projects/mod_evasive/mod_evasive_1.10.1.tar.gz
 tar xzf mod_evasive_1.10.1.tar.gz
 cd mod_evasive
 apxs2 -i -a -c mod_evasive20.c

Nous allons maintenant créer un fichier qui contient le lien vers le module compilé pour qu’Apache2 puisse l’activer :

nano /etc/apache2/mods-available/mod_evasive.load

# dans le nouveau fichier, coller cette ligne :
LoadModule evasive20_module /usr/lib/apache2/modules/mod_evasive20.so

Puis nous l’activons :

a2enmod mod_evasive

Pour qu’Apache2 prenne en compte ce nouveau module, il va falloir le paramétrer :

DOSHashTableSize 3097

# Nbre d'affichage de la même page par IP : X
DOSPageCount 2

# Nbre d'affichage du même site par IP : X
DOSSiteCount 50

# Interval d'affichage de la même page par IP : X
DOSPageInterval 1

# Interval d'affichage du même site par IP : X
DOSSiteInterval 1

# Durée du blocus (exprimé en secondes)
DOSBlockingPeriod 10

# Notification par adresse email pour être prévenu
DOSEmailNotify adresse@email.com

# nouveau dossier pour y placer le logs du module
DOSLogDir "/var/log/apache2/evasive/"

# Utlisation de iptables pour bannier l'IP qui tente de saturer le serveur
#DOSSystemCommand "/sbin/iptables -I INPUT -s %s -j DROP"

# Liste blanche permettant à une IP d'effecuer un nombre illimité de requètes
#DOSWhiteLt 127.0.0.1

# création du dossier pour les logs du mod Evasive
mkdir /var/log/apache2/evasive

# pensez à bien donner les droits au dossier sinon Apache2 nous pourra écrire dedans
chown -R www-data:www-data /var/log/apache2/evasive

# on relance Apache2 et aucune erreur ne doit apparaitre
/etc/init.d/apache2 reload

Test du bon fonctionnement du module Evasive avec un fichier PERL : ce script va effectuer une cinquantaine de requêtes sur notre serveur Internet.

nano test_mod_evasive.pl

#!/usr/bin/perl
# test.pl: small script to test mod_dosevasive's effectiveness

use IO::Socket;
use strict;

for(0..50) {
 my($response);
 my($SOCKET) = new IO::Socket::INET( Proto => "tcp",
 PeerAddr=> "127.0.0.1:80");
 if (! defined $SOCKET) { die $!; }
 print $SOCKET "GET /?$_ HTTP/1.0\n\n";
 $response = ;
 print $response;
 close($SOCKET);
 }

# rendre le script exécutable
chmod +x test_mod_evasive.pl

# exécution du script
./test_mod_evasive.pl

Le résultat s’affichera dans la fenêtre et au bout d’une dizaine de ligne, il devrait y avoir d’écrit “HTTP/1.1 403 Forbidden” ou “HTTP/1.1 404 Not Found” preuve que le module fonctionne.

Bien évidemment, sans le module activé, toutes les lignes auraient été “HTTP/1.1 200 OK” monopolisant les ressources de tout le serveur pour ce script !

Mod Cband

Le module Cband est très pratique, surtout pour un site qui contient des vidéos ou des fichiers à télécharger : en effet, ce module va permettre de limiter la bande passante allouée par IP (donc pour chaque internaute) mais aussi par VirtualHost (donc par site Internet hébergé).

Par exemple, je peux allouer seulement 50 Mbits de bande passante pour toute ma plateforme Web, laissant ainsi de la marge pour les autres applications.
Sans ce module, si une personne mal intentionnée lancent 1 ou plusieurs gros téléchargements de mes fichiers à partir d’un autre serveur dédié, il y a de fortes chances pour que ma plateforme soit saturée, or si la limite globale est de 50 MBits, cette personne plafonnera à 50 Mbits et mon serveur devrait rester en activité sans trop souffrir.

Installation du module en utilisant les paquets :

apt-get install libapache2-mod-cband

Activons le module avec

a2enmod cband

Il faut ensuite le référer dans le fichier de configuration d’Apache2 (par exemple tout en bas du fichier) :

nano /etc/apache2/apache2.conf

Il faut ajouter les 2 lignes suivantes :

CBandScoreFlushPeriod 1
 CBandRandomPulse On

Puis redémarrer Apache2 :

/etc/init.d/apache2 force-reload

Nous allons éditer le fichier de configuration des VirtualHosts gérés par Apache2 :

nano /etc/apache2/sites-enabled/000-default

Voici un exemple de VirtualHost avec une limitation de la bande passante par client et globalement pour un site.
Notre site est par exemple situé dans le dossier ”/var/www/domaine”

ServerAdmin webmaster@localhost
 ServerName rxxxxx.ovh.net
 DocumentRoot /var/www/
 # 90 Mbps pour Apache - 200 requetes/sec - 20 connexions simultanees
 CBandSpeed 90Mbps 200 20
 # Par personne : 7 Mbps - 35 requetes/sec - 3 connexions simultanees
 CBandRemoteSpeed 7096 35 3

# affichage des stats de Cband
# les stats seront visibles dans le dossier /var/www/administration/mod_cband_stats
SetHandler cband-status

# dossier sites
# activation url rewriting
 AllowOverride all
 Options FollowSymLinks MultiViews
 Order allow,deny
 allow from all
# This directive allows us to have apache2's default start page
# in /apache2-default/, but still have / go to the right place
 RedirectMatch ^/$ /index.html

Voici la liste des unités de mesures disponibles et comprises par le module Cband :

Vitesses de transfert:

kbps
Mbps
Gbps

La valeur par défaut est kbps.

Dans cet exemple, tous les sites Internet stockés dans le dossier ”/var/www” ne pourront pas dépasser les 90 Mbps de bande passante, les 200 requêtes par secondes et les 20 connexions simultanées. Lorsqu’un internaute ira sur votre site, il ne pourra pas télécharger à plus de 7 Mbps, 35 requêtes par secondes et les 3 connexions simultannées.

Redirection de domaine.com vers www.domaine.com

Lorsqu’un visiteur entre le nom de domaine de votre site Internet, vous aimeriez bien que les “WWW” apparaissent avant le nom de domaine ? Cela est tout à fait réalisable avec le fichier des VirtualHosts (hé oui, toujours celui-la 😉 ).

Il faut donc l’éditer :

nano /etc/apache2/sites-enabled/000-default

 DocumentRoot /var/www/domaine
 ServerAdmin webmaster@domaine.fr
 ServerName domaine.fr
 ServerAlias domaine.fr www.domaine.fr
 # activation url rewriting
 AllowOverride all
 Options FollowSymLinks MultiViews
 Order allow,deny
 Allow from all

# Et ici la redirection de tous les ServerAlias vers www.monsite.com
 RewriteEngine on
 RewriteCond %{HTTP_HOST} !^www\.domaine\.fr [NC]
 RewriteCond %{HTTP_HOST} !^$
 RewriteRule ^/(.*) http://www.domaine.fr/$1 [L,R=301]

N’oubliez pas de redémarrer :

/etc/init.d/apache2 restart

A présent, une requête sur “domaine.fr” renverra l’internaute sur “www.domaine.fr” ! 🙂

Liste de tous les modules Apache2 disponible

Si vous cherchez un module en particulier, le site d’Apache saura vous répondre : http://httpd.apache.org/docs/2.0/mod/

Avec mots-clefs , , , , , , .Lien pour marque-pages : permalien.

Laisser un commentaire