(Modifié le 14/05/2019)

Debian ,mises à jour de sécurité automatique

Configuration et sécurisation d’un serveur Linux Debian Jessie: Partie 1
Configurer Exim 4 en smarthost pour utiliser le serveur SMTP de votre FAI

Envoi de mail en ligne de commande

Méthode 1 : exim4

Trucs et astuces pour Exim 4

Normalement installé par défaut sur Debian , vérifier
dpkg -l |grep exim

ii  exim4-base                       4.89-2+deb9u1                  amd64        support files for all Exim MTA (v4) packages
ii  exim4-config                     4.89-2+deb9u1                  all          configuration for the Exim MTA (v4)
ii  exim4-daemon-light               4.89-2+deb9u1                  amd64        lightweight Exim MTA (v4) daemon

Si aucune réponse
apt install exim4

Pour configurer Exim il faut lancer la commande :
dpkg-reconfigure exim4-config
L’assistant ce lance, il va falloir répondre à une série de questions :

Type d’installation : Envoi par relais (« smarthost ») — pas de courrier local.
Nom de courrier du système : cinay.pw
Liste d’adresses IP où Exim sera en attente de connexions SMTP entrantes : 127.0.0.1 ; ::1
Autres destinations dont le courrier doit être accepté : Ne rien saisir
Nom de domaine visible pour les utilisateurs locaux : yanspm.com
Nom réseau ou adresse IP du système « smarthost » : yanspm.com:465 C’est ici que l’on renseigne le nom du serveur à qui exim va relayer le courrier.
Faut-il minimiser les requêtes DNS (connexions à la demande) ? : Non
Faut-il séparer la configuration dans plusieurs fichiers ? : Non

Le mot de passe du serveur smtp dans /etc/exim4/passwd.client
*:NOM-UTILISATEUR@DOMAINE.FR:MOT-DE-PASSE-DU-COMPTE
Cette ligne nous permet de nous identifier avec notre compte auprès du serveur SMTP.

Puis l’on termine en rechargeant la configuration d’exim4 :
update-exim4.conf Vérifier installation des outils mail
apt install mailutils
Arrivé à ce point, vous devriez être capable d’envoyer des mails
Lancer la ligne suivante en y insérant votre adresse mail (il est possible que le mail arrive dans vos spams) : echo "Mail envoyé le $(date)" | mail -s "Test envoi de mail depuis $HOST" ne-pas-repondre@yanspm.com

Méthode 2 : ssmtp

Les outils de sécurisations ou de monitoring ont besoin d’émettre des alertes ou des rapports.

Toutes les commandes sont exécutées en mode su

Si Debian contient le client mail nommé Exim4.
On le supprime

apt-get autoremove --purge  exim4*

Installer ssmtp

On commence par installer un agent SMTP.Cette opération est INUTILE dans le cas d’un serveur Yunohost ,passer au paragraphe suivant Outils de messagerie

apt-get install ssmtp

Effacer et recréer le fichier de conf

rm /etc/ssmtp/ssmtp.conf
nano /etc/ssmtp/ssmtp.conf

Le contenu

# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
root=postmaster@yanspm.com

# The place where the mail goes. The actual machine name is required no
# MX records are consulted. Commonly mailhosts are named mail.domain.com
mailhub=yanspm.com:465

# Where will the mail seem to come from?
rewriteDomain=yanspm.com

# The full hostname
hostname=localhost

# Use SSL/TLS before starting negotiation
UseTLS=Yes
#UseSTARTTLS=Yes

# Username/Password
AuthUser=yanspm@yanspm.com
AuthPass=mot_de_passe_compliqué
AuthMethod=LOGIN

# Email 'From header's can override the default domain?
FromLineOverride=yes

Sécuriser ssmtp

Étant donné que votre mot de passe est stocké sous forme de texte clair dans /etc/ssmtp/ssmtp.conf, il est important de sécuriser le fichier.
La sécurisation de ssmtp.conf garantit que:

  • Si les utilisateurs ont un accès non privilégié à votre système, ils ne peuvent pas lire le fichier et voir votre mot de passe de messagerie, tout en leur laissant envoyer des e-mails
  • Si votre compte d’utilisateur est toujours compromis, le pirate ne peut pas lire le fichier ssmtp.conf et donc votre mot de passe de messagerie, à moins qu’il n’ait aussi accès au compte racine

Pour sécuriser ssmtp.conf, procédez comme suit:

Créer un groupe ssmtp:

# groupadd ssmtp

Définissez le propriétaire du groupe ssmtp.conf dans le nouveau groupe ssmtp:

# chown :ssmtp /etc/ssmtp/ssmtp.conf

Définissez le propriétaire de groupe du binaire ssmtp dans le nouveau groupe ssmtp:

# chown :ssmtp /usr/sbin/ssmtp

Assurez-vous seulement que root, et le groupe ssmtp peut accéder à ssmtp.conf:

# chmod 640 /etc/ssmtp/ssmtp.conf

Définissez le bit SGID sur le binaire ssmtp.

# chmod g+s /usr/sbin/ssmtp

Maintenant, tous les utilisateurs réguliers peuvent toujours envoyer des e-mails en utilisant le terminal, mais aucun ne peut lire le fichier ssmtp.conf.

Méthode 3 : msmtp

Comment envoyer un courriel par smtp en ligne de commande ?

  • Il n’est pas nécessaire de surcharger son système d’applications serveur pour l’envoi de courriel. La solution la plus simple est l’utilisation d’un client smtp pour (par exemple) envoyer automatiquement des informations par courriel
  • Le site officiel de msmtp

Installer

sudo apt install msmtp

Configurer

1-Création et ouverture du fichier ~/.msmtprc (dans votre dossier personnel).

Ne pas utiliser de commande sudo. C’est bien l’utilisateur qui envoie les mails.

nano ~/.msmtprc
account default
host smtp.monfai.fr
from prenom.nom@monfai.fr
auth off
#auth on
#si jamais auth off ne passe pas
user prenom.nom
#si votre fai vous identifie plus clairement si vous reprécisez le domaine, alors plutôt cela :
#user prenom.nom@fai.fr
password monmotdepasse

2-Dissimuler ce fichier qui contient votre mot de passe en clair

chmod 600 ~/.msmtprc

Pour avoir plusiers comptes configurés: il suffit de rajouter une ligne account NomDuCompte suivi de la configuration propre à ce compte.

exemple

account celuidelaposte
host smtp.laposte.net
from user@laposte.net
tls on
tls_certcheck off
tls_starttls off
auth on
user user@laposte.net
password motdepasse

Pour utiliser un compte plutôt que celui par défaut (default), on utilisera l’option -a:

echo "bonjour, je viens d'un autre compte" | msmtp **-a** celuidelaposte toto@univers.net

Utilisation

  • Pour envoyer le contenu d’un fichier texte comme message:
    cat readme.txt | msmtp johnny@liday.ch
  • Pour envoyer un fichier binaire, ou compressé en pièce jointe :
    uuencode application.zip | msmtp johnny@liday.ch

Pour préciser le sujet du mail, il faut utiliser Subject: DeQuoiOnParle en tête de message.
Donc si on envoie un fichier readme.txt, à moins qu’il commence par Subject:… le message n’aura pas de sujet
Attention: il faut alors un saut de ligne, une solution simple est d’utiliser printf plutôt que echo.
Exemple: printf "Subject:DeQuoiOnParle\nLeCorpsDuMessage" | msmtp johnny@liday.ch

Ne pas oublier les tags ci dessous en début de votre message électronique sans quoi il ne sera pas forcement accepté par gmail ou autre (non respect de la RFC2822)

   From: mon-adresse@domaine.xx
   To: adresse-destination@domaine.xx
   subject: le sujet de l'Email
   le corps du texte commence à cette ligne
  • Depuis votre client de messagerie, vérifiez que vous avez bien reçu le message attendu

Configurations particulières

gmail impose l’utilisation d’une couche TLS (messagerie yunohost également):

~/.msmtprc
account default
tls on
host smtp.gmail.com
port 587
from nom_user@gmail.com
auth on
user nom_user              # ou nom_user@gmail.com
password password_user
tls_starttls on
tls_certcheck on
tls_trust_file /etc/ssl/certs/ca-certificates.crt

La dernière ligne est spécifique aux systèmes basés sur debian. Elle pointe vers le fichier où sont stockés l’ensemble des certificats racine de conficance du système

Orange sécurisé L’opérateur historique Orange fonctionne avec TLS :

/.msmtprc
account default
host smtp.orange.fr
protocol smtp
auth login
tls on
tls_starttls off
tls_certcheck on 
tls_trust_file /etc/ssl/certs/ca-certificates.crt
from mon-adresse@orange.fr
maildomain orange.fr
port 465
user mon-adresse
password mon-motdepasse

gandi.net Paramétrage pour l’utilisation de l’adresse fournie avec les noms de domaines achetés avec gandi.net

~/.msmtprc
account default
host mail.gandi.net
from <adresse de l'émetteur>
tls on
tls_certcheck off
tls_starttls off
auth on
user <adresse Gandi/nom d'utilisateur utilisé pour se connecter à la boîte aux lettres électronique Gandi>
password <mot de passe boîte aux lettres électronique>

Correctif pour la commande mail

Pour que la commande mail fonctionne, vous devrez mettre ce qui suit dans /etc/mail.rc. Veuillez noter que pour avoir l’utilitaire mail, vous devrez installer le paquet mailutils.
Fichier : /etc/mail.rc

set sendmail="/usr/bin/msmtp -t"

Vous pouvez tester que le courrier fonctionne avec la commande suivante :

echo "Ceci est un corps de message" | mail -s "Hello there from mail command line" desti@destinataire.tld

Correctif crontab

Lorsque crontab n’exécute pas une commande, il envoie un message électronique. Pour effectuer l’opération, il utilise l’exécutable sendmail. En ayant installé le paquet msmtp-mta il est créé un lien /usr/sbin/sendmail vers /usr/bin/msmtp.
De cette façon, crontab n’a pas besoin de configuration supplémentaire.

Le problème ici est que crontab envoie toujours un message à un utilisateur local. Si je me connecte en tant qu’utilisateur admin et que je crée une tâche crontab pour cet utilisateur, l’email sera envoyé à admin sur localhost. On peut corriger ce problème à l’aide des approches suivantes. Le fichier /etc/aliases définit les alias de courriel pour l’utilisateur. Par exemple :

# File: /etc/aliases
root: admin@myserver.com, supervisor@myserver.com
default: catch-all@myserver.com

Compte tenu de cette configuration, tous les courriels qui vont à root@localhost seront également envoyés à admin@myserver.com et supervisor@myserver.com. De plus, tous les messages destinés à des utilisateurs inconnus (inexistants) seront envoyés à catch-all@myserver.com.

MAILTO

Crontab offre une façon plus élégante d’envoyer des courriels. Au début du fichier crontab, vous pouvez l’éditer avec crontab -e, déclarer la variable MAILTO :

MAILTO="xand@xand.es"
* * * * * /tmp/aaa.sh

Outils de messagerie

Installer les outils de messagerie

apt-get install mailutils

On test un envoie de mail

echo "Un mail de test" | mail -s "test envoi" destinataire@domaine.tld

Cette commande va envoyer un mail avec comme émetteur le nom FQDN (Full Qualified Domain Name) de la machine.

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

echo "This is the main body of the mail" | mail -s "test mail" destinataire@domaine.tld -aFrom:autreNom\<autrenom@autrenom.fr\>

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

tail /var/log/mail.log

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.

Il faut déclarer le serveur de mail dans votre DNS à l’aide d’une entrée SPF.
Un petit exemple chez OVH

domaine.com IN TXT "v=spf1 include:mx.ovh.com ~all"

Mise à jour automatique du système

Il ne faut pas mettre à jour automatiquement tous les paquets et logiciels installés.
On va donc uniquement appliquer les mises à jour de sécurité.

Mise à jour du système.

apt update && apt upgrade

Suppression des paquets inutiles

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

apt-get install cron-apt

Utilisation
Les fichiers de configurations de Cron-ATP se trouvent dans le répertoire /etc/cron-apt.
Vous y trouverez le fichier de configuration principal, nommé config, ainsi que 9 répertoires, dans l’ordre :

  • action.d : Contient les actions, qui sont les paramètres pour apt-get.
  • config.d : Contient les configurations par action.
  • errormsg.d : Contient les messages à ajouter aux messages d’erreurs standard.
  • logmsg.d : Contient les messages à ajouter aux log et debug standard.
  • mailmsg.d : Contient les messages à ajouter aux courriel standard.
  • mailonmsgs : Contient les messages à ajouter avant le contenu du courriel envoyé. Le fichier contenant le message doit porter le même nom que la directive $MAILON.
  • syslogmsg.d : Contient les messages à ajouter aux messages standard envoyés vers syslog.
  • syslogonmsgs : Contient les messages à ajouter à la ligne de log envoyée à syslog. Le fichier contenant le message doit porter le même nom que la directive $SYSLOGON.

Les fichiers doivent avoir les mêmes noms que ceux présents dans “action.d”.
Par exemple si vous avez un fichier nommé “5-install” dans le répertoire “action.d”, et que vous voulez un message d’erreur personnalisé, le fichier à créer dans le répertoire “errormsg.d” doit également être nommé “5-install”.

Pour simplement illustrer le fonctionnement, si vous ajoutez un fichier contenant “Bonjour !”, nommé “0-update”, dans le répertoire /etc/cron-apt/mailmsg.d.
Tous les courriels envoyés par Cron-APT commenceront par “Bonjour !”.

Le fichier “config”
Le fichier “config” est à paramétrer. Les deux principaux éléments à vérifier sont les variables “APTCOMMAND”, qui détermine la commande à utiliser (apt-get par défaut, ou aptitude), et MAILTO, qui détermine à qui envoyer les rapports (root par défaut, ou une adresse email quelconque).
APTCOMMAND=/usr/bin/apt-get
MAILTO="root"


Par défaut Cron-APT va vérifier la disponibilité de mises à jour, les télécharger sans les installer et enfin envoyer un courriel à l’utilisateur “root” pour avertir si besoin. Il s’agit déjà d’une aide précieuse.

Dans le fichier /etc/apt/sources.list doit se trouver la ligne suivante correspondant au dépôt de sécurité de Debian Jessie (la ligne deb-src n’est pas dans le fichier systématiquement , uniquement utilisé pour les sources )

deb http://security.debian.org/ jessie/updates main
deb-src http://security.debian.org/ jessie/updates main

Création du fichier security.sources.list utilisé par cron-apt et qui ne contiendra que le(s) dépôt(s) de sécurité Debian.

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 ou modifier les lignes suivantes.

APTCOMMAND=/usr/bin/apt-get
OPTIONS="-o quiet=1 -o Dir::Etc::SourceList=/etc/apt/security.sources.list"
MAILTO="destinataire@domaine.tld"
MAILON="always"

Par défaut, cron-apt télécharge les mise à jour mais ne les installe pas.
Pour déclencher la mise à jour automatique après téléchargement , modifier le fichier /etc/cron-apt/action.d/3-download

nano /etc/cron-apt/action.d/3-download

et supprimer le paramètre -d dans la ligne suivante.

dist-upgrade -y -o APT::Get::Show-Upgraded=true

Pour un test immédiat

 cron-apt

Patienter !!!

Le script terminé ,un mail sera expédié avec la liste des mises à jour réalisées.

Le programme utilise une tache cron pour se lancer automatiquement.
Pour spécifier le créneau horaire modifier le fichier /etc/cron.d/cron-apt.
Par défaut il se lance chaque jour à 4 H

0 4 * * *  test -x /usr/sbin/cron-apt && /usr/sbin/cron-apt

Exemple pour une mise à jour tous les lundi à 1 heure du matin.

0 1 * * 1  test -x /usr/sbin/cron-apt && /usr/sbin/cron-apt

Mises à jour de sécurité debian (exemple complet)

Toutes les instructions suivantes sont exécutées après passage en mode su ou sudo
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.
apt install cron-apt
Création du fichier security.sources.list utilisé par cron-apt et qui ne contiendra que le(s) dépôt(s) de sécurité Debian.
grep security /etc/apt/sources.list > /etc/apt/security.sources.list
On édite le fichier de configuration de cron-apt /etc/cron-apt/config

APTCOMMAND=/usr/bin/apt
OPTIONS="-o quiet=1 -o Dir::Etc::SourceList=/etc/apt/security.sources.list"
MAILTO="yanspm@yanspm.com"
MAILON="always"

Pour déclencher la mise à jour automatique après téléchargement , supprimer option -d dans le fichier /etc/cron-apt/action.d/3-download
dist-upgrade -y -o APT::Get::Show-Upgraded=true
Test immédiat cron-apt
Patienter quelques minutes!
Par défaut l’exécution est programmée à 4h00 chaque jour, pour spécifier un créneau horaire modifier le fichier /etc/cron.d/cron-apt.