Administrer son serveur Web - Debian

Etienne P., le Wed Aug 19 2015 14:14:49 GMT+0200 (Central European Summer Time)

Nous allons préciser les différentes étapes pour configurer un serveur sous Debian de manière sécurisée.

En partant du principe que votre distribution est nue, nous allons installer les éléments essentiels pour faire tourner une machine simplement et efficacement.

Pré-requis

Voici les caractéristiques du serveur en question :

Distribution installée : Debian Jessie

Kernel linux : Linux version 3.12.35

Disque système : 20 Go

RAM : 1Go

Processeur : double coeur Intel

Il s'agit en fait d'un serveur virtuel sur lequel on peut faire évoluer les performances à tout instant.

Hormi le kernel et ssh avec accès root, rien n'est présent.

Les sources - Mises à jour

Première étape, nous allons mettre à jour le serveur en incluant les paquets encore en test, ceci est un choix pour rester à jour en permanence (Cf article sur la sécurité du serveur).

Voici notre fichier /etc/apt/sources.list

deb http://mirrors.gandi.net/debian jessie main contrib non-free
deb http://ftp.debian.org/debian unstable main contrib non-free
deb http://ftp.debian.org/debian testing main contrib non-free
deb http://security.debian.org/ testing/updates main contrib non-free
deb http://mirrors.gandi.net/debian jessie-updates main contrib non-free
deb http://mirrors.gandi.net/debian jessie-backports main contrib non-free
 
 
Entrez ensuite les commandes :
 
# apt-get update
# apt-get upgrade
 
Tout devrait se passer sans erreur. Vous pouvez même tester un reboot pour être certain que tout passe convenablement.
 
Vérifiez votre distribution et versions :
 
# cat /proc/version
 

Sécurité

Commençons par ajouter 2 utilisateurs, un administrateur pour les sauvegardes dans un compte séparé d'un autre utilisateur qui sera celui par défaut pour notre serveur Web.
L'utilisateur administrateur pourra se connecter par ssh, l'accès root sera bloqué.
 
# adduser userweb
 

SSH

Comme vu au cours de l'article sur la sécurité de debian, nous allons changer de port SSH et bloquer l'accès root :
 
vi /etc/ssh/sshd_config
 
Port 2222
PermitRootLogin no
AllowUsers USERNAME
 
décommentez :
x11forwarding
 
et redémarrez :
 
# /etc/init.d/ssh restart
 

Le pare-feu

Nous portons notre choix sur UFW qui est simple à utiliser.
 
# apt-get install ufw
 
On ajoute quelques règles pour les ports utilisés :
 
# ufw allow 80
# ufw allow 2222
# ufw allow 443
# ufw allow 25
 
443 pour le https, 80 pour nos sites internet et 2222 (exemple) pour la connexion ssh. Enfin 25 pour les emails sortants.
 
On désactive les autres par défaut avant d'activer le pare-feu.
 
# ufw default deny
# ufw enable
 
Vérification avec # ufw status
 
Pour davantage de précision et paramétres, rendez vous sur la page sécurité de debian.
 
 
En avant pour les emails, mais avant assurez vous de rentrer votre nom de domaine principal dans votre fichier hostname :
 
# vi /etc/hostname
 
nomdomaine.com
 

Exim4

Il s'agit là d'une partie à bien prendre en compte notamment pour éviter de retrouver ses emails dans les indésirables. Voici l'article qui détaille la configuration :
 
Exim4 et configuration antispam
 
Pour installer, entrez la commande suivante :
 
# apt-get install exim4
 
et pour configurer :
 
# dpkg-reconfigure exim4-config
 
Vous allez suivre des étapes pour configurer correctement votre serveur :
 
  1. internet site ; mail is sent and received directly using smtp
  2. system mail name : votredomaine.com (le principal)
  3. Pour la réception - on ne dépendra pas de Exim4 mais de notre hébergeur, donc on renseignera localhost
  4. notre serveur n'est pas serveur de destination d'emails.
  5. pas de relai non plus
  6. Peu importe l'endroit où sont stockés les emails ex : /var/mail (seuls les emails locaux seront stockés - root daemon)
  7. on choisit ensuite de ne pas diviser les fichiers.
  8. renseignez l'utilisation de réception des emails root et postmaster

Vérifiez le fichier de configuration généré dans /etc/exim4/update-exim4.conf.conf

Plutôt qu'utiliser les fichiers divisés, on modifiera le fichier /etc/exim4/exim4.conf.template pour ajouter les lignes du tutoriel sur Exim4.

Note : ajoutez les lignes respectivement comme indiqué :

#####################################################
### end transport/30_exim4-config_maildir_home
#####################################################
 
#####################################################
### transport/30_exim4-config_remote_smtp_dkim
#####################################################
 
et
 
#####################################################
### end router/150_exim4-config_hubbed_hosts
#####################################################
 
#####################################################
### router/180_exim4-config_local_primary_dkim
#####################################################

Et on redémarre, ajoute la bonne entrée au DNS et test.

# echo "my test" | mail -s "test message" votre@email
 
 
Poursuivons avec l'installation et le paramétrage de Mysql, Php et Apache2.
 

Mysql

Entrez la commande suivante :
 
# apt-get install mysql-server
 
Choisissez un bon mot de passe pour le root et ensuite ajoutez vos bases de données et utilisateurs associés.
 

Php

# apt-get install php5
 
et ajoutons quelques modules utiles :
 
# apt-get install php5-mysql php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl
 

Apache devrait déjà être installé.

il reste à ajouter un degré de sécurité dans /etc/php5/apache2/php.ini :
 
expose_php=Off
 
si ce n'est pas déjà le cas.
 
Ensuite nous activons quelques modules :
 
l'url rewriting
 
# a2enmod rewrite
 
et pour chacun des sites :
 
# a2ensite votresite.com
 
et on redémarre de cette façon :
 
# service apache2 reload
 
 
Une fois que vous avez ajouté vos virtualhosts et configuré vos bases, tout devrait fonctionner. Il ne reste plus qu'à vous occuper des sauvegardes automatiques.
 

Gandi et 2 adresses IP .

Si vous êtes chez Gandi et avez 2 adresses IP configurées, voici les lignes à ajouter au fichier :

/etc/sysctl.conf

net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_announce = 0
net.ipv4.conf.lo.arp_announce = 0
net.ipv4.conf.eth0.arp_announce = 0
net.ipv4.conf.eth1.arp_announce = 0
net.ipv4.conf.all.arp_filter = 0
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.arp_filter = 0
net.ipv4.conf.eth0.rp_filter = 0
net.ipv4.conf.eth0.arp_filter = 0
net.ipv4.conf.eth1.rp_filter = 0
net.ipv4.conf.eth1.arp_filter = 0

Ensuite lancez la commande:
# sysctl -f /etc/sysctl.conf

 

Prévoyance.

 
Si votre hébergeur vous le permet, faites une copie image de votre serveur régulièrement.
Il est primordial également d'isoler quotidiennement vos bases de données.
 
Voici un script à lancer en tâche cron pour procéder aux sauvegardes :
 
#!/bin/sh
mysqldump --opt -u nomutilisateur --password=lemotdepasse -h localhost nombase > /home/sauvegarde.sql
mysqldump --opt -u nomutilisateur --password=lemotdepasse -h localhost autrebase > /home/sauvegarde2.sql
 
y=`date +%Y`
m=`date +%m`
d=`date +%d`

tar cf -  /home/*.sql | gzip > /home/DB.$d.$m.$y.tar.gz
rm /home/*.sql
ncftpput -u ftputilisateur -p lepassftp adresseinternetautreserveur dossiersurserveru /home/DB.$d.$m.$y.tar.gz

 
 
Il faut aussi penser à opérer une rotation des fichiers sauvegardés, voici à titre d'exemple un script pour supprimer les fichiers vieux de plus de 15 jours :
 

#!/bin/sh

find /home/administrator/bk/* -type f -mtime +15 -exec rm {} \;

 

Tâche Cron

 
Ajoutez enfin en tâche cron les scripts ci-dessus de sorte à ne plus vous en occuper :
 
# crontab -e
 
Exemple de fichier :
 
# tous les jours à 0h10
10 0 * * * /home/cron/backupDB.sh
40 1 * * * /home/cron/cleanbk.sh
 

0 commentaire(s)

Laissez un petit mot

Votre adresse email ne sera pas publiée ni utilisée à des fins commerciales.