Installation et Sécurisation d’un serveur dédié – Base

Le but final de ce tuto est de configurer un serveur qui hébergera plusieurs domaines avec leurs propres sites ainsi que les mails correspondants à chacun, de manière sécuriser.

Pour remplir cet objectif on va utiliser apache et php et s’appuyer sur des outils comme suPHP, suexec pour les sécuriser.
Le « serveur mail » sera propulsé par le couple Postfix et Dovecot, sur lesquels on installera des outils comme spamassins, postgrey, amavis et clamAV.

Vu la longueur du tuto, je l’ai découpé en plusieurs articles afin de le rendre plus lisible.

  • Ce tuto a été réalisé sur une dédibox (offre online.net).
  • La distribution est une ubuntu serveur 14.04, j’ai choisi cette distribution pour deux raisons, la première c’est que c’est une base Debian que je commence à bien connaître et que c’est LA distribution où je trouve le plus d’infos pertinente en anglais ET en français, ce qui peut être très utile dans certains cas.
  • Tout le tuto considère que vous êtes en root (sudo -s).

Une fois l’installation de la distribution réalisée via l’interface d’admin de votre serveur, on va procéder à quelques réglage de base afin d’apporter un peu de sécurité. Bien sur, le minimum est d’avoir un mdp de passe fort sur votre compte utilisateur, sinon, tout ceci ne sert à rien.

I/ Sécurisation Basique

1/ Sécuriser SSH

Il faut en premier lieu modifier le port par défaut, le 22 étant une cible privilégiée en éditant le fichier /etc/ssh/sshd_config comme suit :

On va profiter du fait que ssh remplace avantageusement le protocole FTP pour le configurer de manière à ce que l’on puisse se servir de cette fonction sans permettre aux utilisateur SFTP de se logguer sur la machine en console.

On va donc ajouter à la fin du fichier les lignes suivantes :

Tout utilisateur faisant parti du groupe ftponly (qu’il faudra donc créer sur votre serveur) sera donc chroot au dossier /var/www/nom_de_l_utilisateur/ et ne pourra pas utiliser la console, pour plus de sureté je vous invite à remplacer le shell de l’utilisateur par /usr/sbin/nologin

Puis relancer ssh :

 

2/ Mise en place d’UFW:

La gestion d’iptables est extrêmement simplifié avec cet outil, donc profitons en.
On va commencer par lui indiquer sa configuration par défaut puis le port SSH, histoire de pouvoir se connecter au serveur après l’activation, on va également ouvrir tout les ports nécessaire au service installé tout au long de ce tuto.

Activation des règles par défaut:

Ports entrants:

Ports sortants:

Assurez vous bien d’avoir correctement configuré la règle concernant le serveur SSH, sinon, vous serez coincé.

Si tout va bien lorsque vous faites :

Vous devriez obtenir ça :

Vous remarquerez qu’UFW à automatiquement créé les règles en IPV6. Si vous voulez supprimer une règle, le plus simple est d’utiliser la commande suivante :

Pour autoriser le ping depuis votre serveur (utile pour les tests), il faut ajouter les lignes suivantes dans votre fichier /etc/ufw/befores.rules

Voila, votre serveur est déjà un petit peu moins « Open Bar »

II/ Mise en place du socle de base du serveur

1/ Installation du serveur LAMP

On va commencé par installer tout le necessaire

Pendant l’installation, MySQL vous demandera d’indiquer un mdp pour l’utilisateur root, cet utilisateur ayant accés à toutes vos bases MySQL, le mot de passe (complexe) doit être conservé en lieu sur.
On va en profiter pour installer les modules dont on aura besoin plus tard et qui sont, de toute manière, requis pour beaucoup de CMS (phpBB, Prestashop, WordPress…)

Il manque un lien symbolique pour le bon fonctionnement de php5-mcrypt, qu’a cela ne tienne on va l’ajouter :

On enclenche le module SSL

On va procéder à deux trois petit réglage afin de minimiser les informations donner par php et apache.

On édite  /etc/php5/apache2/php.ini

puis /etc/apache2/conf-enabled/security.conf

On va configurer les fichiers Vhost par défauts d’Apache, on édite donc /etc/apache2/sites-available/000-default.conf

Puis on fait la même chose pour le Vhost SSL par défaut.
Normalement le fichier s’appelle default-ssl.conf, il est selon moi plus judicieux de leur donner un nom avec ce type car apache, va tester les configurations et s’arreter sur celle qui correspond à la demande soumise par le navigateur, il est donc intéressant que les fichiers par défaut soit les premiers

Donc on renomme en premier le fichier

On génère le certificat SSL auto-signé

et on l’édite pour avoir la configuration suivante :

Pour forcer les users à utiliser le SSL, vous pouvez ajouter ça à votre fichier .htaccess que vous placerez à la racine du site (/var/www/html/ par exemple)

2/ Installation de suexec et de suPHP

Le couple suexec et suPHP permettent de cloisonner l’exécution de chaque site dans l’environnement d’un utilisateur propre à chaque hébergement, ce qui permet d’éviter qu’un site compromis puisse altérer les autres.

Mise en place des paquets:

Dans le dossier /etc/apache2/suexec vous trouverez un ficher www-data contenant les lignes suivantes :

Il faudra créer un fichier similaire pour chaque utilisateur différent où, bien sur, il faudra remplacer le chemin /var/www par celui menant au site (/var/www/nom_de_l_utilisateur)

Il faut ensuite éditer le fichier de configuration de suPHP /etc/suphp/suphp.conf comme suit :

La valeur umask 0022 permet de limiter les permissions des fichiers, avec cette configuration seul les permissions 755 pour les dossiers et 644 pour les fichiers sont autorisées.
Dans docroot, on indique les dossier /usr/share pour pouvoir faire fonctionner les scripts comme phpmyadmin.
Les valeurs min_uid et min_gid, sont celles de l’utilisateur www-data (consultable à l’aide la commande « id www-data »), personnellement, une fois que le serveur est fonctionnel, je crée un utilisateur www-public qui remplacera www-data, afin de ne permettre qu’au process utilisateur (avec un id superieur à 1000) l’exécution de ces scripts, cependant, la configuration étant assez sensible à mettre en place, je ne le fais qu’une fois que je sais que tout marche dans la configuration de base.

On désactive php5, on active suPHP et suexec

On verra plus loin dans ce tuto comment créer les différent utilisateur et les modifications à apporter au fichier de conf des différents vhost pour prendre en compte se fonctionnement.

3/ Installation de memcache

Mise en place des paquets :

on edite /etc/memcached.conf

La valeur par défaut est de 64, vous pouvez l’augmenter, il s’agit de la valeur maximum qu’atteindra memcache, donc si il n’en a pas besoin il occupera moins de mémoire.

4/ Installation des paquets mail-server

Afin d’assurer le service mail, il faut que le nom de votre serveur soitt FQDN, on va donc commencer par le nommer correctement, par convention le nom du serveur sera mail.example.com.

On édite /etc/hosts comme suit :

Mise en place des paquets :

Pendant l’installation il vous faudra configurer Postfix, vous devez indiquez « Internet Site » pour le type d’utilisation, puis pour le nom, cela doit être le nom FQDN de votre serveur (mail.example.com), ne générer pas les certificat SSL pour dovecot. On modifiera la configuration pour prendre en compte les certificats généré précédemment plus tard.

On va ensuite installer les paquets encessaire à la gestiond e MySQL par dovecot et postfix ainsi que différent outils nécessaire à al sécurisation des mails:

Tout comme tout à l’heure pour mcrypt on rajoute le lien manquant pour php5-imap et on l’active :

Ce paquet va nous être utile pour l’utilisation de postfix admin et la plupart des script webmail comme roundcube ou autre.

Ensuite afin de rendre les modules antispam et antivirus performant on va installer les paquets suivants :

On termine par un

Et voila, le socle du serveur est installé, maintenant que la base est là, il va falloir passer à la configuration, le plus long étant celle du serveur mail en lui même.

Mais ce sera dans une seconde partie.

N’hésitez pas poser des questions, j’essaierai d’y répondre si je peux.

 

 

About

View all posts by

2 thoughts on “Installation et Sécurisation d’un serveur dédié – Base

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *