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 :
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.
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.
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.
Linux 12/12/2014
Linux 12/9/2015
Linux 8/9/2016
Linux 31/1/2014
Contenu épinglé
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.
Pas de commentaire