Samedi 17 décembre 2016 (Modifié le Samedi 28 mars 2020)

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

msmtp est un client SMTP.

Dans son mode de fonctionnement par défaut, il lit un courrier à partir d’une entrée standard et l’envoie à un serveur SMTP prédéfini qui s’occupe de sa bonne distribution. Les options de la ligne de commande et les codes de sortie sont compatibles avec sendmail.

Installer

sudo apt install msmtp

Version

msmtp --version
msmtp version 1.8.3
Plateforme : x86_64-pc-linux-gnu
Librairie TLS/SSL : GnuTLS
Librairie d'authentification : GNU SASL
Méthodes d'authentification supportées :
plain scram-sha-1 external gssapi cram-md5 digest-md5 login ntlm 
Support IDN : activé
NLS: activé, LOCALEDIR : /usr/share/locale
Support de porte-clés: aucun(e)
Nom du fichier de configuration système : /etc/msmtprc
Nom du fichier de configuration utilisateur : /home/user/.msmtprc

Copyright (C) 2019 Martin Lambers and others.
This is free software.  You may redistribute copies of it under the terms of
the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.
There is NO WARRANTY, to the extent permitted by law.

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.

# Exemple pour un fichier de configuration utilisateur ~/.msmtprc
#
# Ce dossier porte sur le TLS et l'authentification. Les fonctionnalités non utilisées ici sont les suivantes
# journalisation, délais, proxy SOCKS, paramètres TLS, notification de l'état de livraison
# (DSN), et plus encore.


# Définissez les valeurs par défaut pour tous les comptes suivants.
defaults

# Utilisez le port de soumission du courrier 587 au lieu du port SMTP 25.
port 587

# Utilisez toujours le TLS.
tls on

# Établir une liste d'AC de confiance pour le TLS. La valeur par défaut est d'utiliser les paramètres du système, mais
# vous pouvez sélectionner votre propre dossier.
#tls_trust_file /etc/ssl/certs/ca-certificates.crt
# Si vous sélectionnez votre propre fichier, vous devez également utiliser la commande tls_crl_file pour
# vérifier les certificats révoqués, mais malheureusement obtenir les listes de révocation et
# Il n'est pas simple de les tenir à jour.
#tls_crl_file ~/.tls-crls


# Un service de courrier électronique gratuit
account freemail

# Nom d'hôte du serveur SMTP
host smtp.freemail.example

# Comme alternative au tls_trust_file/tls_crl_file, vous pouvez utiliser tls_fingerprint
# pour épingler un seul certificat. Vous devez mettre à jour l'empreinte digitale lorsque le
# le certificat du serveur change, mais un attaquant ne peut pas vous piéger pour que vous acceptiez
# un certificat frauduleux. Obtenez l'empreinte digitale avec
# msmtp --serverinfo --tls --tls-certcheck=off --host=smtp.freemail.example
#tls_fingerprint 00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:00:11:22:33

# Enveloppe - à partir de l'adresse
from joe_smith@freemail.example

# Authentification. Le mot de passe est donné en utilisant l'une des cinq méthodes, voir ci-dessous.
auth on
user joe.smith

# Méthode de mot de passe 1 : Ajoutez le mot de passe au porte-clés du système (system keyring), et laissez msmtp l'obtenir
# automatiquement. Pour définir le mot de passe du porte-clés en utilisant le libsecret de Gnome :
# $ secret-tool store --label=msmtp \
#   host smtp.freemail.example \
#   service smtp \
#   utilisateur joe.smith

# Méthode de mot de passe 2 : stocker le mot de passe dans un fichier crypté, et indiquer à msmtp
# la commande à utiliser pour le décrypter. Cette commande est généralement utilisée avec GnuPG, comme dans
# cet exemple. Habituellement, gpg-agent demande une fois le mot de passe de décryptage.
passwordeval gpg2 --no-tty -q -d ~/.msmtp-password.gpg

# Méthode de mot de passe 3 : Enregistrez le mot de passe directement dans ce fichier. En général, il n'est pas
# une bonne idée de stocker les mots de passe dans des fichiers en texte clair. Si vous le faites quand même, à
# Assurez-vous au moins que ce fichier ne peut être lu que par vous-même.
#password secret123

# Méthode de mot de passe 4 : enregistrez le mot de passe dans ~/.netrc. 
# Cette méthode n'est probablement pas plus pertinente.

# Méthode de mot de passe 5 : ne pas spécifier de mot de passe. Msmtp vous le demandera
# Cela signifie que vous devez être en mesure de taper dans un terminal lorsque le msmtp fonctionne.


# Une deuxième adresse de courrier au même service de courrier électronique gratuit
account freemail2 : freemail
from joey@freemail.example


# Le serveur SMTP de votre FAI
account fai
host mail.fai.example
from smithjoe@fai.example
auth on
user 12345


# Définir un compte par défaut
account default : freemail

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.