Update: Version Debian 8 dispo.
Aujourd’hui je reçois enfin mon serveur dédié OVH ! Il s’agit d’un serveur de la gamme Kimsufi 2013 d’OVH.
Un serveur personnel c’est bien. On peut y installer toutes sortes d’applications pour héberger ses données, ses jeux, ou encore montrer ses photos perso aux copains sans pour autant les offrir a la NSA a Facebook. Enfin, avant tout cela il faut bien penser qu’un serveur avec les fesses à l’air sur internet ça se fait très vite violer par toutes sortes de scripts chinois qui se baladent. Il est donc important de mettre en place une certaine sécurisation. Cet article a pour but de proposer une configuration et une sécurisation d’un serveur dédié Linux Debian Wheezy.
Partie 1: Configuration
Changement du mot de passe ROOT
Que cela soit OVH ou un autre, votre hébergeur vous a fournit un mot de passe de connexion ssh par défaut. Un fois connecté grâce à ce dernier, la première étape va consister à le changer.
1 |
passwd root |
Création d’un compte pour la connexion
Il faut un compte utilisateur pour se loguer sur la machine de façon a interdire par la suite la connexion direct en root.
1 |
adduser test |
Le répertoire personnel de l’utilisateur « test » est automatiquement créé (/home/test
).
Verrouillage SSH par clé uniquement
On se log sous l’utilisateur créé précédemment.
1 |
su test |
On se place dans son home
1 |
cd |
Génération de la paire de paire de clé RSA
1 |
ssh-keygen |
Vous n’êtes pas obligé de saisir une passphrase quand on vous le propose. La commande a crée 2 fichiers dans un dossier caché nommé .ssh .
On copie la clé publique dans le fichier des clés autorisées par le serveur.
1 |
cat .ssh/id_rsa.pub >> .ssh/authorized_keys |
La clé privée nommée id_rsa est a récupérer sur votre poste client.
Si vous travaillez depuis un poste client Linux je vous invite à utiliser l’outil Gigolo pour transférer des fichiers facilement. Sinon sous Windows il y a WinSCP.
Sous Linux la clé privé doit être placée dans le répertoire de votre utilisateur dans /home/moua/.ssh/id_rsa
La connexion à vôtre serveur sous l’utilisateur que vous venez de créer doit à présent se faire sans aucun mot de passe. Pour se connecter depuis un Linux il suffit de taper la commande
1 |
ssh test@<ip_de_votre_serveur> |
Sous Windows vous devez spécifier l’utilisation de cette clé dans Putty. La clé id_rsa doit être au préalable converti au format ppk. Pour cela vous devez utiliser l’outil puttygen disponible sur le site officiel. Ce dernier vous permet également de générer une paire de clé privée/publique.
Cette étape est très importante! N’effectuez pas les manipulations suivantes sans être sur que la connexion sans mot de passe est bien fonctionnelle !
On va maintenant éditer le fichier de configuration du serveur ssh et apporter les modifications qui suivent
1 2 3 4 5 6 7 |
AllowUsers test # cette ligne est à ajouter PermitRootLogin no RSAAuthentication yes PubkeyAuthentication yes ChallengeResponseAuthentication no PasswordAuthentication no AuthorizedKeysFile %h/.ssh/authorized_keys |
On redémarre le service SSH pour prendre en compte les modifications
1 |
/etc/init.d/ssh restart |
Et voila ! Seul l’utilisateur que vous avez créé est autorisé à ce connecter à votre serveur et uniquement à l’aide de sa clé ssh privé. Une fois logué vous pouvez ensuite passer root sur vôtre serveur avec la commande:
1 |
su |
Changer le hostname
Le hostname est le nom de la machine hôte. son identité diffusé sur le réseau, le nom d’un périph connecté au réseau en gros.Il se compose de deux parties:
- Le petit nom du serveur
- Le nom FQDN (Le nom de domaine)
Pour modifier le petit nom du serveur on édite le fichier /etc/hostname. Dans ce fichier on va juste donner un nom sans domaine.
Pour le nom de domaine on modifie le fichier /etc/hosts. Ce dernier permet de bypasser (forcer la résolution DNS entre l’ ip et nom de machine. On oblige cette « ip » a avoir ce « nom » de correspondance.)
Pour résumer, les fichiers hostname et hosts dialoguent ensemble.
Voila à quoi ressemble mon fichier hosts
1 2 |
127.0.0.1 localhost 127.0.1.1 mespotesgeek.f glados |
Pour vérifier que le hostname est bien changé on tape
1 |
hostname |
Pour le nom de domaine
1 |
hostname -f |
Heure du serveur
Avoir un serveur à la bonne heure est très important pour les journaux d’événements (que on appel « log » en barbus). Pour cela on utilise le protocole NTP (Network Time Protocol). C’est un protocole qui permet à un ordinateur de synchroniser son horloge sur un autre ordinateur de précision plus élevée via internet.
Installation du paquet qui va bien
1 |
apt-get install ntp |
Lancement du deamon
1 |
/etc/init.d/ntp start |
On édite le fichier /etc/ntp et on modifie les ligne « server » pour se synchroniser sur les serveurs français
1 2 3 4 |
server 0.fr.pool.ntp.org server 1.fr.pool.ntp.org server 2.fr.pool.ntp.org server 3.fr.pool.ntp.org |
On redémarre le service pour prendre en compte les changements
1 |
/etc/init.d/ntp restart |
On vérifie que la synchronisation se fait correctement
1 2 3 4 5 6 7 |
ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== -merlin.deuza.ne 95.142.165.40 4 u 61 64 377 31.966 -33.405 4.844 +box.speed47.net 213.251.128.249 2 u 56 64 377 34.202 -52.445 13.314 +dalek.roflcopte 195.83.222.27 2 u 61 64 377 30.766 -4.002 2.926 *freya.syari.net 193.190.230.66 2 u 58 64 377 34.555 -4.598 11.451 |
Envoi de mail
Ce point est incontournable dans l’administration d’un serveur. Les outils de sécurisations ou de monitoring que nous mettrons en place ont besoin d’émettre des alertes ou des rapports.
Ici on va configurer le serveur pour qu’il utilise le SMTP de google car les SMTP d’OVH sont souvent bloqués. Les mails sont considérés comme SPAM.
Linux propose un multitude d’outils pour envoyer ou recevoir des mail. Les puristes barbus doivent déjà être en train de taper apt-get install postfix. Seulement voila, c’est lourd, compliqué à mettre en place et ça offre une surface d’attaque pour nos amis les scripts chinois. On va donc installer un simple petit agent de transfert de mail appelé Nullmailer.
Pour commencer, Debian est livré avec un client mail nommé Exim4. On le supprime.
1 2 3 4 5 |
dpkg -r exim4 dpkg --purge exim4 dpkg --purge exim4-base dpkg --purge exim4-config dpkg --purge exim4-daemon-light |
Installation de Nullmailer
1 |
apt-get install nullmailer |
Pendant l’installation il demande un nom de courrier système. Vous pouvez saisir ce que vous voulez comme nom.
Ensuite il demande les informations du serveur smtp. Pour un compte Google il faut rentrer la ligne suivante
1 |
smtp.gmail.com smtp --port=465 --auth-login --user=moua@gmail.com --pass=blabla --ssl |
Il est possible de le changer plus tard dans le fichier /etc/nullmailer/remotes.
On redemarre le service Nullmailer pour prendre en compte les changements
1 |
/etc/init.d/nullmailer restart |
Un petit test d’envoi de mail
1 |
echo "Un mail de test" | mail -s "test nullmailer" moua@gmail.com |
Mise à jour automatique du système
Dans cette partie on va mettre en place un système de mise à jour automatique.
Il n’est pas conseillé de mettre à jour automatiquement tous les paquets et logiciels installés. Cela parce que dans certains cas, des changement profond on étaient appliqués et la mise à jour demande une intervention de l’administrateur. On va donc uniquement appliquer les mises à jour de sécurité. Ces mises à jour ont pour seul but de combler les vulnérabilités du système au fur et à mesure de la découverte de failles.
Pour commencer, on applique immédiatement une mise à jour du système.
1 2 |
apt-get update apt-get upgrade |
Puis on nettoie les paquets inutiles
1 |
apt-get autoremove && apt-get autoclean |
L’automatisation sera pris en charge par l’outil cron-apt. Cron-apt permet de vérifier à intervalle régulier, via le crontab , si des mises à jours sont disponibles et va les installer.
Installation
1 |
apt-get install cron-apt |
Dans le fichier /etc/apt/sources.list doit se trouver la ligne suivante correspondant au dépôt de sécurité de Debian Wheezy. Il faut supprimer les “#” de mise en commentaire.
1 2 |
deb http://security.debian.org/ wheezy/updates main deb-src http://security.debian.org/ wheezy/updates main |
Nous allons créer un fichier qui ne contiendra que les repository de sécurité Debian. C’est ce fichier qui sera ensuite utilisé par cron-apt.
1 |
grep security /etc/apt/sources.list > /etc/apt/security.sources.list |
On édite le fichier de configuration de cron-apt sous /etc/cron-apt/config pour y ajouter les lignes suivantes(celui-ci est vierge d’origine). J’utilise pour ma part apt-get mais vous pouvez utiliser aptitude si vous préférez.
1 2 3 4 |
APTCOMMAND=/usr/bin/apt-get OPTIONS="-o quiet=1 -o Dir::Etc::SourceList=/etc/apt/security.sources.list" MAILTO="moua@domaine.xxx" MAILON="always" |
Par défaut, cron-apt télécharge les mise à jour mais ne les installe pas. Pour corriger cela on se rend sous /etc/cron-apt/action.d/3-download et on supprime le paramètre -d de la ligne.
1 |
dist-upgrade -y -o APT::Get::Show-Upgraded=true |
Pour tester directement on tape
1 |
cron-apt |
Il n’est pas impossible que la console se fige un moment si le serveur ssh est mis à jour. Attendez alors un moment que le script termine son taf et elle devrait se débloquer toute seule.
Une fois le script a terminé de bosser vous recevez un mail avec les changements effectués sur la machine.
Le programme utilise une tache cron pour se lancer automatiquement. Depuis la nouvelle version il faut spécifier le créneau horaire dans le fichier /etc/cron.d/cron-apt. Par défaut il se lance chaque jour à 4 heure du matin comme ceci
1 |
0 4 * * * test -x /usr/sbin/cron-apt && /usr/sbin/cron-apt |
En ce qui me concerne j’ai remplacé la ligne afin d’effectuer mes mises à jours tous les lundi à 1 heure du matin.
1 |
0 1 * * 1 test -x /usr/sbin/cron-apt && /usr/sbin/cron-apt |
C’est terminé pour cette première partie de configuration. Dans la prochaine partie je parlerais de sécurisation du serveur.
Bonjour,
Tutoriel très sympa à lire…
Seulement j’ai un petit problème, j’ai suivi les étapes à la lettre pour s’authentifier avec une clé RSA et ça ne fonctionne pas.
L’erreur sur Putty : Unable to use key file « C:\Users\XXXXXXX\Documents\RSA\XXXXXX.ppk » (OpenSSH SSH-2 private key)
J’ai essayer 2 fois, toujours la même erreur !
Auriez-vous une idée s’il vous plait ?
Bonjour, il semble en effet qu’il manque une étape dans mon tutoriel. Sur Windows il faut utiliser le générateur de Putty pour convertir la clé en .ppk.
Effectivement, j’ai téléchargé PuttyGen sur le site officiel, j’ai chargé ma clé privée pour la convertir en .ppk, maintenant ça fonctionne très bien.
Une dernière chose, dans « /etc/ssh/sshd_config » cette ligne est commenté :
#AuthorizedKeysFile %h/.ssh/authorized_keys
Il faut la décommenté…
Merci
bonjour,
merci pour ce tuto très utile.
il y a cependant un gros souci, concernant cron-apt : votre solution télécharge les mises à jour de sécurité mais ne les installe pas !
Il faut modifier le fichier /etc/cron-apt/action.d/3-download et enlever le « -d » qui est download only mode :
upgrade -y -o APT::Get::Show-Upgraded=true
hope it helps
C’est exacte. Un oubli de ma part je vais corriger l’article merci!
Bonjour.
Suite à l’installation de nullmailer, Linux m’a demandé d’installer mailutils.
J’ai bel et bien réglé mon serveur smtp.gmail.com, mon auth-login ainsi que le port. Mais, mailutils installé ou pas, je ne reçois aucun mail.
J’ai essayé avec les 2ports proposés pour le serveur Gmail : 465 ou 25. L’adresse que j’ai mis dans le fichier remotes est la même que celle que j’utilise en adresse cliente.
Je voudrais bien une petite aide car l’utilisation des alertes mail est un des points auquel j’ai bien suivi votre tuto.
Caractéristiques du serveur :
Machine hébergée chez ONLINE.net
ubuntu 12.04.2_LTS (64BITS)
Cordialement.
Psykko.
Les mails arrivent peut être en spam? Vous pouvez, si vous avez un nom de domaine, faire votre propre serveur smtp à l’aide de postfix. Il existe de nombreux tuto sur internet à ce sujet.
Rien n’arrive en spam. Je testerais dans ce cas avec postfix !
Je viens d’essayer ces paramètre dans le remotes :
[YOUR-SMPT-SERVER.COM] smtp –auth-login –user=[USER] –pass=[PASSWORD]
Mais même sans citer de port particulier ni de protocole, cela ne fonctionne pas.
Bonjour.
Merci pour ce tuto bien utile.
Concernant Nullmailer, je conseille de voir plus de détails sur ce site (en anglais): http://raspberry.znix.com/2013/03/nullmailer-on-raspberry-pi.html
A savoir que c’est dans le /etc/nullmailer/adminaddr que l’on configure la redirection des mails adressés à root.
Nullmailer et Gmail ne cohabitent pas bien : gmail détecte une activité suspecte et bloque l’adresse :/
C’est exact. je suis passé sur postfix du coup. Il faut bien penser à déclarer le reverse DNS pour pas être placé en spam par contre.
Peut être une rapide maj du tuto du coup ?
Nan parce que la doc sur nullmailer est pas glop, et pour un tuto accés débutant, il n’est expliqué nul part, si le moua@gmail.com correspond à l’adresse émettrice ou le destinataire par exemple.
Merci d’avance !
Oui, un article est en cours d’écriture pour le passage sur Debian 8.