Apache2 – Configuration complète

Cette procédure va couvrir Apache2, de son installation, à sa configuration en passant par la vision sécurité du serveur.

 

INSTALLATION

Ouvrez un terminal et tapez-y :

sudo root

et on y tape le mot de passe root pour s’authentifier avec le compte administrateur de notre linux.

apt-get install apache2 php5 mysql-server php5-mysql libapache2-mod-php5

Entrez un mot de passe administrateur pour le serveur mysql.

C’est installé !

LE TEST :

Maintenant, on va tester notre installation avec un fichier php qui utilisera la fonction phpinfo().

La fonction phpinfo() va faire une requête à notre serveur WEB pour lui demander les paramètres avec lesquels il est configuré. Ainsi, on peut vérifier que tous les modules requis sont installés et fonctionnels.

Dans notre terminal :

nano /var/www/test.php

et collez-y

<?php phpinfo();
?>

On termine par un CTRL+X pour sauvegarder notre fichier et on confirme avec Y ou O suivant votre langue installée.

On relance le serveur Web :

service apache2 restart

Ok, on ouvre le navigateur et on va à l’adresse suivante http://localhost/test.php, qui devrait nous retourner la configuration de notre serveur Web.

 

Pour afficher plus d’informations sur notre serveur Web :

apachectl status

 

CONFIGURATION AVANCEE :

Si il y a la moindre erreur lorsqu’on relance le service apache2, il faut exécuter la commande suivante :

tail -f /var/log/apache2/error.log

Cette commande permet de lister les erreurs rencontrées et de savoir où chercher pour réparer.

 

Maintenant, nous devons connaitre les dossiers importants de notre serveur Apache.

/var/www/ : Il s’agit du dossier de base qui contient les pages de notre site.

/etc/apache2 : Il s’agit du dossier de configuration d’Apache. Toute modification ici nécessite un redémarrage du serveur Web, à l’aide de la commande :

service apache2 restart

Dans ce dossier, nous allons retrouver les fichiers les plus importants que je vais décrire ici :

/etc/apache2/apache2.conf

Ici, on configure le nom d’hôte du serveur Web, nom que l’on entrera dans le navigateur pour accéder au site.

On ajoute cette ligne par exemple : ServerName localhost

 

/etc/apache2/ports.conf

Ce fichier permet d’assigner une ip particulière sur laquelle le serveur écoutera. Très utile dans le cas où la machine qui héberge le serveur Web est équipée de deux cartes réseaux. Il permet aussi de spécifier un port particulier. Ainsi, on pourrais régler le serveur Web sur le port 8888.

Pour faire ainsi, on modifie comme suis :

Pour limiter le serveur Web à servir la machine où il est installé uniquement :

Remplacez la ligne :

Listen 80

par :

Listen 127.0.0.1 80

 

Pour autoriser les connexions depuis votre réseau local vers le serveur WEB :

Modifiez

Listen 80

par

Listen 192.168.1.254 80

en remplaçant par l’ip et port de votre serveur bien entendu.

 

Pour changer le port du site :

Listen 80

par

Listen 192.168.1.254 8888

En procédant ainsi, le serveur Web écoutera sur l’adresse IP 192.168.1.254 et sur le port 8888.

Pour autoriser les connexions depuis Internet :

En plus de la modification ci-dessus, ouvrez le port correspondant vers 192.168.1.254 sur votre routeur/pare-feu si vous souhaitez autoriser les connexions depuis Internet.

 

 

LES HOTES VIRTUELS :

D’ordinaire, le serveur apache distribue les pages web contenues dans /var/www/, dossier dans lequel se trouve le fichier index.html.

Pour pouvoir héberger plusieurs sites sur le même serveur Web, il nous faut créer des hôtes virtuels. Ainsi, suivant l’adresse du site, on pourra tomber sur le site compta ou le site management, ceux-ci étant hébergés sur le même serveur Web.

Nous allons nous déplacer dans /var/www/.

cd /var/www/

Puis dans ce dossier, nous allons créer le dossier site-compta

cd default-site
mkdir site-compta
cd site-compta

Ici, nous allons créer une page web pour le site compta

touch index.html
nano index.html

et on y insère ceci

<h1> Bienvenue sur le site Compta</h1>

On sauvegarde avec un CTRL+X et on valide avec Y ou O.

On remonte dans l’arborescence et on crée un site Management en se basant sur les commandes précédentes

cd ../
mkdir site-management
cd site-management
touch index.html

On le modifie

nano index.html

et on y insère ceci :

<h1> Bienvenue sur le site Management</h1>
On sauvegarde avec un CTRL+X et on valide avec Y ou O.

Nous voila avec deux sites differents hébergés sur le même serveur Web.

Il ne nous reste plus maintenant qu’à configurer correctement notre serveur Web pour lui indiquer que tel nom d’hôte correspond à telle page Web et telle page correspond à un autre nom d’hôte.

LA CONFIGURATION :

Nous allons créer deux fichiers en rapport avec les deux sites que nous voulons distribuer :

Le premier :

nano
/etc/apache2/sites-available/site-compta.conf

 

et on y ajoute ceci :

<VirtualHost *:80>
ServerAdmin postmaster@compta.net
ServerName www.site-compta.net
ServerAlias *.site-compta.net
DocumentRoot /var/www/site-compta/
Directory /var/www/site-compta/
Options Indexes FollowSymLinks MultiView
AllowOverride All
/Directory

ServerSignature Off
/VirtualHost
Et le deuxième :

/etc/apache2/sites-available/site-management.conf et on y ajoute ceci :

La dernière étape : il nous faut utiliser la commande a2ensite pour activer nos hôtes virtuels.

Il faudra lancer la commande a2ensite site-compta pour activer l’hôte virtuel Site-compta

Il faudra lancer la commande a2ensite site-management pour activer l’hôte virtuel Site-management

La commande a2ensite s’attend à recevoir le nom du fichier de configuration présent dans /etc/apache2/sites-available mais sans l’extension .conf.

Ex: Pour activer un hôte virtuel dont on a nommé le fichier de configuration site-vente.conf, il faudra exécuter la commande a2ensite site-vente.

Ces modifications nécessitent que le serveur Web soit redémarré.

Un dernier :

service apache2 restart

et on peut enfin contempler nos hôtes virtuels :

Pour joindre la partie compta : http://localhost/site-compta

Pour joindre la partie management : http://localhost/site-management

Enfin, nous pouvons paramétrer plusieurs adresses IP pour notre serveur Web sur la même interface physique.

Pour ce faire, il suffit de nous rendre dans /etc/network/interfaces et d’y ajouter notre interface : (par convention, une interface virtuelle se nomme comme ceci eth0:0)(Veillez à indenter (TAB) les lignes address,netmask,gateway)

auto eth0:0
iface eth0:0 inet static
address 10.0.0.1
netmask 255.0.0.0
gateway 10.0.0.254

Il nous reste plus qu’à effectuer un petit :

ifup eth0:0

Ainsi, vous pouvez assigner plusieurs adresses à votre carte réseau. La charge sera répartie automatiquement car il s’agit du même contrôleur.

 

 

LA SECURITE

Pour sécuriser notre serveur Web, nous allons paramétrer le fichier .htaccess et nous allons générer un certificat auto-signé.

Nous verrons également les modifications à apporter aux fichiers de configuration pour boucher les trous de sécurité éventuels.

LE FICHIER .htaccess

On paramètre le fichier .htaccess. Une fois placé dans un dossier, ce fichier agit sur toute l’arborescence en dessous de lui.

Autre point important : imaginons que nous ayons deux fichiers .htaccess, un dans /var/www et un autre dans /var/www/site-compta.

Si on définit le paramètre Deny From All est appliqué au .htaccess dans /var/www/, personne ne pourra accéder à tous les sites situés à la racine de notre serveur Web. Puis, si nous définissons le paramètre Allow From All dans le .htaccess qui se situe dans /var/www/site-compta, seul le site-compta sera accessible. En effet, vu que le .htaccess ‘Allow From All’ est dans un sous-dossier, il a réécrit la règle provenant du .htaccess de la racine, mais il a appliqué ce paramètre uniquement pour le dossier où il est placé.

Le seul prérequis est que l’option AllowOverride All doit être activée dans le fichier d’hôte virtuel correspondant à votre site. Remontez dans la rubrique ‘Hôtes virtuels’ de cette procédure pour vous aider. En partant d’une installation fraîche, vous pourrez ajouter dans /etc/apache2/sites-available/000-default.conf (entre les balises <VirtualHost *:80></VirtualHost>):

<Directory /var/www/html/>
AllowOverride All
</Directory>

Remarquez également que si vous souhaiter utiliser un certificat comme nous allons le voir plus loin, il faudra réitérer les changements vers le fichier /etc/apache2/sites-available/ssl-default.conf Sachant cela, nous allons voir quelques cas pratiques. On crée un .htaccess à la racine de notre serveur Web.

touch /var/www/site-compta/.htaccess nano /var/www/site-compta/.htaccess

Et nous allons y ajouter ceci :

AuthUserFile /etc/apache2/.htpasswd
AuthName "Connexion au site compta"
AuthType Basic
Require valid-user

LA RESTRICTION D’ACCES

Vous l’aurez deviné ce fichier permettra de restreindre l’accès au site-compta uniquement.

Nous allons créer également le fichier .htpasswd dans lequel le serveur Web cherchera les identifiants et mots de passe pour autoriser ou non l’accès à telle ou telle ressource.

touch /etc/apache2/.htpasswd
nano /etc/apache2/.htpasswd

Et on y ajoute ceci :

utilisateur:motdepasse

Une fois ceci fait, ouvrez l’url http://localhost/site-compta et le serveur vous demandera de vous authentifier et ne vous laissera passer que si votre couple utilisateur/motdepasse correspond à l’un de ceux qui se trouve dans /etc/apache2/.htpasswd.

Veillez à respecter cette syntaxe, c’est à dire un couple utilisateur:motdepasse séparés par deux points et un couple par ligne.

Dans un souci de sécurité, nous veillerons à utiliser la fonction php_crypt à l’aide de ce script codé par M@teo21 de chez openclassroom

Créez un fichier crypt_me.php

<?php
if (isset($_POST['login']) AND
isset($_POST['pass']))
{
$login = $_POST['login'];
$pass_crypte = crypt($_POST['pass']); // On
crypte le mot de passe
echo '<p>Ligne à copier dans le .htpasswd
:<br />' . $login . ':' . $pass_crypte . '</p>';
}
else // On n'a pas encore rempli le formulaire
{
?>
<p>Entrez votre login et votre mot de
passe pour le crypter.</p>
<form method="post">
<p>
Login : <input type="text"
name="login"><br />
Mot de passe : <input type="text"
name="pass"><br /><br />
<input type="submit" value="Crypter
!">
</p>
</form>
<?php
}
?> 

Mettez ensuite ce fichier crypt.php dans /var/www/ et accédez-y depuis votre navigateur.

http://localhost/crypt.php

C’est simple : vous entrez un utilisateur et son mot de passe, vous cliquez sur Crypter, et il ne vous reste plus qu’à coller la ligne qui vient d’apparaître dans votre fichier .htpasswd.

 

 

CACHER LES INFORMATIONS DU SERVEUR

Par défaut, Apache affiche la version du système d’exploitation que vous utilisez, ainsi que d’autres informations. Une personne malveillante peut utiliser ces informations pour mieux cibler son attaque sur votre serveur, nous allons donc les cacher.

Éditez le fichier /etc/apache2/apache2.conf

Nota : sur Apache/2.2.11 (entre autres, Ubuntu 9.04) ces directives sont à placer dans /etc/apache2/conf.d/security

Recherchez la ligne contenant :

ServerSignature

et mettez

ServerSignature Off

Recherchez la ligne contenant :

ServerTokens

et mettez

ServerTokens Prod

Empêcher le parcours d’un répertoire

Les modifications apportées ici le sont sur le fichier /etc/apache2/sites-available/000-default.conf. Si vous souhaitez appliquer ses modifications à vos hôtes virtuels, veillez à effectuer ces modifications également sur chaque fichier de configuration d’hôte virtuel.

Pour empêcher le parcours du répertoire /var/www/html ajoutez l’option -Indexes:

<Directory /html>
  Order Allow,Deny
  Allow from all
  Options -Indexes
</Directory>

Désactiver les inclusions coté serveur

Toujours au même endroit, (dans un tag <Directory>) :

Options -Includes

Désactiver l’exécution de scripts CGI

Si vous n’utilisez pas de scripts CGI ajoutez cette option :

Options -ExecCGI

Empêcher Apache de suivre les liens symboliques

Options
-FollowSymLinks

Empêcher le téléchargement de fichiers .htaccess

AccessFileName .httpdoverride
<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
</Files>

Vous pouvez choisir les adresses IP qui ont accès ou non à vos pages.

Par exemple : autoriser l’accès seulement depuis votre poste :

Order Deny,Allow
Deny from all
Allow from 127.0.0.1

ou encore sur votre réseau local :

Order Deny,Allow
Deny from all
Allow from 192.168.0.0/24

ou interdire une IP précise :

Order Allow,Deny
Allow from all
Deny from
192.168.0.5