Installation simple d'un serveur web (LAMP)

FIXME Attention, avec la version 2.4 de apache, ce tuto n'est pas à jour !!!

LAMP = Linux Apache MySQL PHP

Tous les actions sont réalisées avec le compte root

Mise à jour du serveur

apt-get update && apt-get upgrade -y && apt-get dist-upgrade -y

Installation de fail2ban

apt-get install fail2ban

Installation du serveur web

apt-get install apache2 apache2-mpm-prefork php5 mysql-server phpmyadmin

On peut tester d’accéder a la page web ici http://37.187.40.55

Le dossier du site web par défaut est le suivant :

/var/www/

Voir le fichier de configuration :

more /etc/apache2/sites-available/default

Les répertoires de configuration sont les suivant :

  • fichiers de configuration :
ls /etc/apache2/sites-available/
  • les virtualhost activés sont disponible de le répertoire :
ls /etc/apache2/sites-enabled/

Création d'un utilisateur

root@vps64441:~# adduser manchix
Ajout de l'utilisateur « manchix » ...
Ajout du nouveau groupe « manchix » (1000) ...
Ajout du nouvel utilisateur « manchix » (1000) avec le groupe « manchix » ...
Création du répertoire personnel « /home/manchix »...
Copie des fichiers depuis « /etc/skel »...
Entrez le nouveau mot de passe UNIX :
Retapez le nouveau mot de passe UNIX :
passwd : le mot de passe a été mis à jour avec succès
Modification des informations relatives à l'utilisateur manchix
Entrez la nouvelle valeur ou « Entrée » pour conserver la valeur proposée
	Nom complet []:
	N° de bureau []:
	Téléphone professionnel []:
	Téléphone personnel []:
	Autre []:
Cette information est-elle correcte ? [O/n]

Création d'un dossier pour le site web

mkdir  /home/manchix/public_html

Configuration du virtualhost

Création du fichier de configuration :

nano /etc/apache2/sites-available/manchix.org
<VirtualHost *:80>

        DocumentRoot /home/manchix/public_html/

        <Directory "/home/manchix/public_html/">
                allow from all
                Options -Indexes
        </Directory>

       ServerAlias www.manchix.org
       ServerName manchix.org

</VirtualHost>

Création du lien symbolique

a2ensite manchix.org

Recharger la configuration apache

service apache2 reload

On va créer un page web de test :

nano /home/manchix/public_html/index.html
<html>
    <body>
        <h1>It works!</h1>
        <p>Page web du site Manchix.org</p>
    </body>
</html>

On peut tester d’accéder a la page web ici http://manchix.org ou http://www.manchix.org

Les Fichiers

Il est très facile de s’introduire dans un site web quand on connait le login et mot de passe de la base de donnée, surtout que très souvent elle est hébergé sur un autre serveur où MySQL écoute sur les sockets TCP et non UNIX.

Beaucoup de site héberge directement sur leur site web un « backup » de leur site ou de leur basse de donnée.
Donc ne pas stocker les « backup » directement accessible depuis le web ni les fichiers .sql, .inc (qui sont directement téléchargeable) .
Si vous développez vous même vos site web, stockez vos informations de connexion à la base de donnée dans un fichier .php (qui ne sont pas téléchargeable quand PHP est installé et utilisé sur le serveur)

Apache

Version du serveur

Par défaut il est possible de récupérer des informations sur les serveurs web comme les services utilisé, leur versions, le système d’exploitation. Pour récupérer ces informations il suffit d’envoyer un GET / HTTP/1.1 sur le port web du serveur (80 ou 443).

#telnet localhost 80
 Trying 127.0.0.1...
 Connected to localhost.localdomain.
 Escape character is ‘^]'.
 GET / HTTP/1.1
HTTP/1.1 400 Bad Request
 Date: Fri, 30 Mar 2007 09:59:37 GMT
 Server: Apache/2.0.54 (Debian GNU/Linux) PHP/4.3.10-18
 Content-Length: 337
 Connection: close
 Content-Type: text/html; charset=iso-8859-1

Il est facile de masquer ces informations sur Apache.
Sur Debian ou Ubuntu, le fichier a modifier est /etc/apache2/conf.d/security
Les Ligne à modifier sont ServerSignature et ServerTokens de la façon suivante :

ServerSignature Off
ServerTokens Prod

Configuration des vhosts

Directory listing

Afin d’éviter d’afficher le contenu des répertoire web lorsque qu’aucun fichier index n’est présent (pour désactivé l’index of) un simple configuration permet d’éviter ce problème.

Dans le fichier de configuration du site web par défaut /etc/apache2/sites-enable/000-default il suffit d’ajouter l’option suivante :

Option -Indexes
Protection XSS/iframe et MIME-sniffing

Pour se protéger des vulnérabilité XSS, iframe et du sniffing MIME, il suffit d’ajouter la configuration suivant au fichier /etc/apache2/apache2.conf ou dans un fichier .htaccess

<ifModule mod_headers.c>
    Header set X-XSS-Protection "1; mode=block"
    Header always append X-Frame-Options SAMEORIGIN
    Header set X-Content-Type-Options: "nosniff"
</ifModule>

PHP

Version du serveur

Pour des raisons de sécurité nous allons également masquer les informations de version.

Par défaut le header des page web nous donne :

X-Powered-By: PHP/4.X.X

Nous avons besoin de modifier la variable expose_php dans le fichier php.ini
Dans débian ou Ubuntu ce fichier est présent à l’emplacement /etc/php5/apache2/php.ini

Configurer la variable comme ceci :

expose_php = Off

Il est également possible de masquer les erreurs PHP afin éviter de donner des informations sur le serveur.

Voici la configuration :

display_errors = Off

Pou finir il est nécessaire de redémarrer le service apache avec une des commandes suivantes :

/etc/init.d/apache2 restart
service apache2 restart