Configuration et sécurisation d’un serveur Linux Debian Jessie: Partie 1

Cette article est une mise à jour de mes précédents articles concernant la configuration et sécurisation d’un serveur Linux Debian. Ici on travail avec la version Jessie.

Le tutoriel sera découpé en trois parties:

  • Configuration de base du système
  • Sécurisation
  • Supervision

Partie 1: Configuration de base du système

Premiers réglages en cas d’installation manuelle du système

Si vous avez loué un serveur dans le cloud, les dépôts de paquets sont probablement déjà réglés correctement pour utiliser le miroir de ce dernier et vous pouvez donc passer au chapitre suivant. En revanche, si vous venez d’effectuer l’installation manuelle du système, par défaut , les dépôts sont réglés pour uniquement chercher les paquets sur le CD-ROM d’installation. On va modifier cela pour utiliser les dépôts en ligne. On modifie le fichier /etc/apt/source.list comme suit:

On en profite pour mettre à jour le système

On va installer un serveur SSH pour se donner accès à la machine à distance.

Par défaut, le serveur SSH n’autorise plus les connections en tant que root. Si vous souhaitez modifier se comportement, rendez vous dans le fichier /etc/ssh/sshd_config et mettez à jour la ligne suivante

Relancer le service SSH pour prendre en compte les changements

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.

Choisissez un mot de passe fort ne faisant pas partie du dictionnaire.

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érique 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. Dans l’exemple, ma machine s’appelle « jessie ».

On l’applique imédiatement avec systemd

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.

La convention est de saisir l’adresse IP, suivit du nom FQDN et enfin le nom court. En troisième ligne j’ai entré l’IP sur le réseau privé mais si vous etes sur une machine dans le cloud qui possède une adresse IP publique directement sur sa carte réseau, c’est cette adresse publique que vous devez saisir.

Pour vérifier que le hostname est bien changé on tape

Pour le nom FQDN

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

Lancement du deamon

On édite le fichier /etc/ntp.conf et on modifie les ligne « server » pour se synchroniser sur les serveurs français

On redémarre le service pour prendre en compte les changements

On vérifie que la synchronisation se fait correctement

En cas de problème, vérifiez les logs

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.

Pour commencer, Debian est livré avec un client mail nommé Exim4. On le supprime

On commence par installer un agent SMTP.

Au moment de l’installation, répondez:

  • site internet
  • laissez le nom FQDN dans la partie nom de courrier

On modifie la configuration dans /etc/postfix/main.cf pour y ajouter la ligne suivante qui force l’utilisation de IPv4

Si le serveur est chez vous, derrière une box internet, il fort possible que votre fournisseur ne laisse pas passer les requêtes SMTP. C’est le cas de orange, qui force l’utilisation de son relais.

Il y a plusieurs raisons à cela :

  • Éviter que des petits malins se montent des serveurs de SPAM
  • Orange monnayent des services de messagerie aux entreprises, ce n’est tout de même pas pour que vous vous montiez tout seul votre solution de messagerie.

Dans ce cas, vous devez préciser le relais comme suis

Et préciser un nom de domaine valide (l’IP publique émettrice du mail doit correspondre au nom de domaine que vous saisissez ici lors d’une recherche DNS inversée)

On relance le service pour prendre en compte les changements

On test un envoie de mail

Cette commande va envoyer un mail avec comme émetteur le nom FQDN de la machine.

Vous pouvez envoyer un mail en modifiant ce nom c’est comme ça

Bien sur, si vous passez par un relais, ce dernier vérifiera que le nom que vous tentez d’utiliser vous appartient bien en effectuant une recherche DNS inversée sur l’IP publique effectuant la requête.

Vous pouvez vérifier que le mail est bien partie dans les logs

Il se peut que votre mail atterrisse dans votre boite de spam. C’est le cas des serveur GMAIL qui vérifie l’entré SPF. Le SPF (Sender Policy Framework) permet au serveur de réception mail de s’assurer que l’email a bien été envoyé par un serveur qui en a le droit.

Pour montrer patte blanche à ce niveau il faut déclarer votre serveur de mail dans votre DNS à l’aide d’une entrée SPF. Un petit exemple chez OVH ici.

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.

Puis on nettoie les paquets inutiles

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

Dans le fichier /etc/apt/sources.list doit se trouver la ligne suivante correspondant au dépôt de sécurité de Debian Jessie. Il faut supprimer les “#” de mise en commentaire si ils sont présents.

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.

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.

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.

Pour tester directement on tape

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

En ce qui me concerne j’ai remplacé la ligne afin d’effectuer mes mises à jours tous les lundi à 1 heure du matin.

C’est terminé pour cette première partie de configuration. Dans la prochaine partie je parlerais de sécurisation du serveur.

 

17 thoughts on “Configuration et sécurisation d’un serveur Linux Debian Jessie: Partie 1”

  1. ZiG dit :

    Bonjour,

    Dans les derniers etapes j’obtiens ca :

    root@linux:/# cron-apt
    mail: invalid option — ‘s’
    mail: invalid option — ‘s’
    mail: fatal: usage: mail [options]

    Comment faire pour corriger please ?

    1. N.i.c.O dit :

      Bonsoir, si vous avez fait un copier coller il est possible que vous ayez embarqué un formatage particulier. Tapez la ligne à la main ou au moins la partie à propos du « -s » pour voir.

      1. ZiG dit :

        La partie de test manuel via la ligne : echo « Un mail de test » | mail -s « test postfix » moua@gmail.com
        Fonctionne très bien (je reçois le mail)
        C’est bien seulement lors de l’utilisation du crontab.

        1. N.i.c.O dit :

          Étrange. Je n’ai jamais eu de problème à ce niveau. D’autan plus que la configuration se trouve que dans un seul fichier de 4 lignes. L’une des lignes comporte peut être un caractère mal formaté. Dans votre mail?

          1. ZiG dit :

            pour info j’ai utiliser ce tuto en complément pour utiliser GMAIL (peut etre un lien)
            https://rtcamp.com/tutorials/linux/ubuntu-postfix-gmail-smtp/

            (desoler pour le flood de post)

          2. N.i.c.O dit :

            Ok, ça pourra peut être aider d’autres personnes.

  2. ZiG dit :

    Nop, pas de caractère spécial dans le mail
    comme si l’alias MAILTO utiliser la fonction sendmail avec l’option -s mal placé

    J’ai trouvé un autre poste avec une solution (fin des commentaires) mais qui ne semble pas fonctionner pour mon cas:
    http://www.linuxquestions.org/questions/linux-general-1/crontab-does-not-send-out-mails-728626/

  3. ZiG dit :

    Re,

    Bon j’ai cherché dans les paramètres apt-conf
    Je ne vois nulle part la syntaxe utilisant le parametres MAILTO et donc la fonction mail

    Je pense que c’est cette fonction qui est mal utilisé (paramètre -s mal placé ou subject vide ?)
    code qui me semble être la : nano /etc/cron.d/cron-apt

    l’erreur indique bien -s paramètre incorrecte :
    mail: invalid option — ‘s’
    mail: fatal: usage: mail [options]

    Je vois vraiment pas … !

    1. N.i.c.O dit :

      Si il n’y a rien sur Google c’est que le problème n’existe pas. Il faut regarder ailleurs. La configuration de postfix peut être ou je ne sais pas. Une purge puis réinstallation du paquet pourra peut être aider aussi.

  4. prisonier dit :

    Bonjour,

    J’ai utilisé votre tuto pour automatiser toutes ces tâches et ainsi éviter les erreurs manuelles. Vous pourrez trouver votre site dans les sources à la fin du README.

    https://github.com/prisonier/armourer

    Bonne journée

    1. N.i.c.O dit :

      Tres bien merci !

    2. N.i.c.O dit :

      Je viens de faire un tour sur votre script. C’est du bon travail. Mais le standard en ce moment est l’utilisation d’un Ansible, Salt, puppet ou autre pour faire ce genre de travail. Sails est de plus un web framework, pas vraiment orienté système. Mais bien joué quand même!

  5. hache dit :

    salut. merci pour ce tuto. j’ai un souci avec mon hostname..coment faire pour le « reset » a default?
    j’y ai donné un nom et je voudrais qu’il n’en ai plus…
    vps avec debian 8
    webmin me donne une erreur..correctement configuré avec connection a : nom-host:10000
    seulement ca mache pas ou avec le nom ou avec l’ip
    webmin installé depuis les sources avec apt/sources list
    j’ai purgé une fois et reinstall … rien.
    pas forcement envie de remettre le vps a zero et tout refaire..merci.

    1. N.i.c.O dit :

      le hostname se trouve dans /etc/hostname et /etc/hosts

  6. jelo dit :

    Super Merci !

  7. Manu dit :

    Bonjour,

    Merci beaucoup pour ce tuto qui m’aide grandement sur pas mal de point.
    Cependant, je me retrouve coincé avec un VPS pour configurer l’heure du serveur.

    Bien qu’il n’y ai pas de restriction pour aller pointer un serveur de temps (ping -c 5 0.pool.ntp.org est OK), lorsque je fait « ntpdate 0.pool.ntp.org » j’obtiens le message « ntpdate[3040]: step-systime: Operation not permitted »

    Avec la commande :
    $ ntpq -p
    ntpq: read: Connection refused

    Est-ce l’hébergeur qui empêche le réglage. Malheureusement, il y a un écart d’environ 2min…

    Merci d’avance pour votre aide.

    Cordialement,
    Manu

    1. N.i.c.O dit :

      Hello, peut être le par feu local. Le serveur ne répond pas en tout cas la effectivement. Vous pouvez faire un nmap sur le serveur distant que vous essayer de joindre le port 123. ça élimine les problèmes réseaux. Pensez également à check les logs /var/log/ntp.log.

Laisser un commentaire

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