Menu
InformatiWeb Pro
  • Index
  • Admin système
  • Virtualisation

Connexion

Inscription Mot de passe perdu ?
US
  • Windows Server
    • WMS 2012
    • WS2012 R2
    • WS2016
  • Citrix
    • Citrix NetScaler Gateway
    • Citrix XenApp / XenDesktop
    • Citrix XenServer
  • VMware
    • VMware ESXi
    • VMware vSphere
    • VMware Workstation
  • Microsoft
    • Hyper-V
  • RAID
    • Adaptec SmartRAID
  • UPS
    • APC Back-UPS Pro
  • InformatiWeb Pro
  • Admin système
  • Linux
  • Installer et sécuriser un serveur mails complet (Mails, SMTP, Auth via SASL, IMAP, POP3, webmail, TLS et SSL) sous Debian

Installer et sécuriser un serveur mails complet (Mails, SMTP, Auth via SASL, IMAP, POP3, webmail, TLS et SSL) sous Debian

  • Linux
  • 25 février 2015 à 16:52
  • InformatiWeb
  • 4/5
Page précédente

11. Sécurisation du serveur SMTP par une authentification grâce à SASL

Pour authentifier les utilisateurs sur le serveur SMTP, nous allons utiliser leurs identifiants (Adresse mail / Mot de passe).
Ce principe est celui utilisé par Gmail et il permet d'autoriser uniquement nos utilisateurs à envoyer des mails via notre serveur SMTP.
Ainsi, un pirate ne pourra pas spammer en utilisant notre serveur, s’il n'a pas d'adresse mail chez nous.

Pour authentifier nos utilisateurs, nous allons utiliser la base de données MySQL gérée par "PostFixAdmin" car elle contient les adresses mail et les mots de passe cryptés de nos utilisateurs.

Etant donné que les mots de passe sont cryptés par sécurité, dans la BDD MySQL, nous ne pourrons pas utiliser le plugin "sql" de SASL.
Comme indiqué dans la documentation de "Postfix SASL".

Pour authentifier les utilisateurs du serveur SMTP, tout en cryptant leurs mots de passe dans la BDD MySQL, nous allons devoir passer par un plugin "pam_mysql" utilisé par SASL.
En résumé, voici le schéma de connexion au serveur SMTP : Postfix <-> Cyrus SASL <-> saslauthd <-> pam <-> pam_mysql <-> MySQL.

Maintenant que vous savez la théorie, passons à la pratique.

Par sécurité, faites une MAJ de la liste des paquets :

Bash

apt-get update

Pour commencer, installez les paquets de Cyrus SASL pour l'authentification SASL.

Bash

apt-get install libsasl2-modules sasl2-bin

Puis, le paquet "pam_mysql" qui permettra à SASL de se connecter à la base de données MySQL via l'authentification "PAM".

Bash

apt-get install libpam-mysql

Pour Postfix, modifiez le fichier "/etc/postfix/main.cf" en ajoutant ceci :

Plain Text

smtpd_sasl_local_domain = $myhostname
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_path = smtpd
smtpd_sasl_type = cyrus
smtpd_sasl_authenticated_header = yes

Modifiez la restriction "smtpd_recipient_restrictions" de ce même fichier (/etc/postfix/main.cf) comme ceci :

Plain Text

smtpd_recipient_restrictions=reject_unauth_destination, reject_unauth_pipelining

Ces restrictions vous permettront :

  • reject_unauth_destination : de recevoir le courrier qui vous est destiné
  • reject_unauth_destination : mais également d'envoyer des mails qui sont expédiés par vos utilisateurs
  • de ne pas être un open relay et donc d'éviter que votre serveur n'envoie des spams à des serveurs de mails externes.

Si ce n'est pas déjà fait, indiquez votre nom de domaine (exemple : domain.com) comme "myhostname".

Plain Text

myhostname = informatiweb-tuto.net

Puis, ajoutez l'utilisateur "postfix" au groupe "sasl".

Bash

adduser postfix sasl

Ensuite, tapez cette commande :

Bash

dpkg-statoverride --add root sasl 710 /var/spool/postfix/var/run/saslauthd

Pour lier SASL et Postfix, créez le fichier "/etc/postfix/sasl/smtpd.conf".

Plain Text

pwcheck_method: saslauthd
log_level: 3
mech_list: PLAIN LOGIN

Pour SASL, modifiez le fichier "/etc/default/saslauthd" comme ceci :

Plain Text

START=yes
MECHANISMS="pam"
# En n'oubliant pas le "-r" à la fin de la ligne
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"

Pour le plugin "pam_mysql", créez le fichier "/etc/pam.d/smtp".

Plain Text

auth required pam_mysql.so user=postfix passwd=postfix host=127.0.0.1 db=postfix table=mailbox usercolumn=username passwdcolumn=password crypt=1
account sufficient pam_mysql.so user=postfix passwd=postfix host=127.0.0.1 db=postfix table=mailbox usercolumn=username passwdcolumn=password crypt=1

Note : le "user" et le "passwd" sont les identifiants du compte à utiliser pour se connecter à la base de données "postfix" sur le serveur "MySQL".

Maintenant, redémarrez le serveur de mails "Postfix" (qui sert aussi de serveur SMTP) et le serveur d'authentification "SASL".

Bash

service postfix restart
service saslauthd restart

Si ceci s'affiche, c'est bon :

Bash

root@debian:/home/informatiweb# service postfix restart
[ ok ] Stopping Postfix Mail Transport Agent: postfix.
[ ok ] Starting Postfix Mail Transport Agent: postfix.
root@debian:/home/informatiweb# service saslauthd restart
[ ok ] Stopping SASL Authentication Daemon: saslauthd.
[ ok ] Starting SASL Authentication Daemon: saslauthd.

Pour le moment, l'authentification SMTP fonctionne, mais n'est pas obligatoire. Ce qui est normal, car nous utilisons le port 25.

Informations concernant les restrictions pour Postfix :
Comme indiqué dans la documentation de Postfix, les utilisateurs locaux peuvent envoyer des mails via la commande "sendmail".
Cette fonction n'utilise pas votre serveur SMTP (Postifx). Par conséquent, les restrictions que vous appliquez sur le serveur SMTP ne concernent pas ces utilisateurs. Pour empêcher que les utilisateurs n'utilisent cette commande, vous devez utiliser l'option "authorized_submit_users".
Note : Ce principe est le même pour la fonction "mail" de php.

Voici différents moyens d'utiliser cette option :

Plain Text

# Aucun utilisateur local ne peut envoyer de mail via la commande "sendmail".
authorized_submit_users=
# Seul root  peut envoyer des mails via la commande "sendmail".
authorized_submit_users=root
# Seul root  et le serveur web (ainsi que les scripts PHP puisque PHP est un module attaché au serveur web) peuvent envoyer des mails via la commande "sendmail".
authorized_submit_users=root, www-data

Note : Si vous avez configuré Roundcube avec la configuration SMTP par défaut, vous devrez autoriser l'utilisateur www-data (utilisateur sous lequel le serveur web "apache" tourne) dans cette option ou le reconfigurer pour utiliser l'authentification via le port 587.

12. Test telnet

Etant donné que nous avons utilisé la restriction "reject_unauth_destination", l'envoi d'un mail vers un serveur externe ne sera pas possible via le port 25. (Pour le port 587, les clients authentifiés ont le droit de le faire.)
Note : Vous devez tester ceci directement sur votre serveur (ou via ssh) car beaucoup de fournisseurs d'accès à Internet (FAI) bloquent le port 25 pour éviter que les PC infectés n'envoient des spams sans le savoir. Ce qui vous empêche aussi de faire ce test depuis l'extérieur.

Bash

root@debian:~# telnet 127.0.0.1 25
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 informatiweb-tuto.net ESMTP Postfix (Debian/GNU)
ehlo informatiweb-tuto.net
250-informatiweb-tuto.net
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
mail from:<webmaster@informatiweb-tuto.net>
250 2.1.0 Ok
rcpt to:<toto@gmail.com>
554 5.7.1 <toto@gmail.com>: Relay access denied

Si cette erreur se produit aussi sur votre serveur, c'est bon.

13. Activation du port de soumission (587)

Pour obliger les utilisateurs à s'authentifier tout en respectant la norme, vous devez utiliser le port de soumission (587).
Pour cela, vous devrez modifier le fichier "/etc/postfix/master.cf" en décommentant les lignes suivantes :

Plain Text

submission inet n       -       -       -       -       smtpd
 -o smtpd_sasl_auth_enable=yes
 -o smtpd_client_restrictions=permit_sasl_authenticated,reject

Puis, ajoutez la ligne suivante pour remplacer la règle globale "smtpd_recipient_restrictions" (celle définie dans le fichier "main.cf") par celle-ci, pour le port 587 :

Plain Text

 -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject

Pour le moment, le port 25 n'a pas besoin d'authentification et le port de soumission (587) est configuré pour n'autoriser que les clients authentifiés.
Ensuite, redémarrez le service "postfix".

Bash

service postfix restart

Note : Si l'authentification "SMTP" ne fonctionne pas et que l'erreur suivante s'affiche dans le fichier "/var/log/mail.log", c'est probablement un problème dû au chroot de Postfix. Vérifiez le chemin indiqué dans le fichier "/etc/default/saslauthd" et la configuration indiquée dans le point 10 du tutoriel.

Plain Text

postfix/smtpd[25644]: warning: SASL authentication failure: cannot connect to saslauthd server: No such file or directory

Ceci dit, aucun des protocoles n'est encore sécurisé par SSL ou TLS.

Page suivante

Partager ce tutoriel

Partager
Tweet

A voir également

  • Debian / Ubuntu - Détecter les attaques grâce à Logwatch

    Linux 26/12/2014

    Debian / Ubuntu - Détecter les attaques grâce à Logwatch

  • Debian / Ubuntu - Installer un serveur FTP

    Linux 4/2/2014

    Debian / Ubuntu - Installer un serveur FTP

  • Ubuntu - Configurer un serveur LDAP et une interface Web pour le gérer

    Linux 15/1/2014

    Ubuntu - Configurer un serveur LDAP et une interface Web pour le gérer

  • Ubuntu - Mettre à jour son serveur

    Linux 31/1/2014

    Ubuntu - Mettre à jour son serveur

Commentaires

Pas de commentaire

Donnez-nous votre avis

Contenu épinglé

  • Logiciels (Admin système)
  • Logiciels Linux
  • Nos programmes
  • Conditions générales
  • Donnez votre avis

Contact

  • Livre d'or
  • Support technique
  • Contact

® InformatiWeb-Pro.net - InformatiWeb.net 2008-2022 - © Lionel Eppe - Tous droits réservés.

Toute reproduction totale ou partielle de ce site est interdite et constituerait une contrefaçon sanctionnée par les articles L.335-2 et suivants du Code de la propriété intellectuelle.