Authentification SMTP
1. Présentation
Par défaut, Postfix accepte de relayer tout les messages qui lui sont soumis :
Les messages en provenance ou à destination des utilisateurs de messagerie hébergés par le serveur de messagerie Postfix.
Les messages en provenance ou à destination des utilisateurs de messagerie non hébergés par le serveur de messagerie Postfix.
Pour ce second point, cela présente un problème de sécurité. En effet, le serveur est en configuration open relay. En d’autre terme, un utilisateur mal intentionné peut s’en servir pour relayer du spam.
Ainsi, il est nécessaire de mettre en place un mécanisme d’authentification permettant de s’assurer que les courriels émis proviennent bien d’un utilisateur hébergé par le serveur de messagerie.
Cette authentification s’appuiera sur le mécanisme d’authentification utilisé pour vérifier les comptes utilisateurs UNIX du serveur. Ce mécanisme s’appelle PAM et sera interrogé grâce au module sasl qui servira d’interface entre Postfix et PAM.
2. Installation
- Installation du module saslauthd :
root@alice.lan: # apt-get install sasl2-bin
- Editer le fichier de configuration /etc/default/saslauthd, puis remplacer :
START=no
- Par :
START=yes
Par défaut, le mécanisme d’authentification utilisé est pam (paramètre MECHANISMS) ce qui nous conviens pour le moment (authentification via les comptes UNIX existants).
- Remplacer aussi la ligne :
OPTIONS= »-c -m /var/run/saslauthd »
- Par :
OPTIONS= »-c -m /var/spool/postfix/var/run/saslauthd »
- Création du répertoire /var/spool/postfix/var/run/saslauthd avec les permissions adéquates :
root@alice.lan: # mkdir -p /var/spool/postfix/var/run/saslauthd
root@alice.lan: # chown -R root:sasl /var/spool/postfix/var/run/saslauthd
root@alice.lan: # chmod 710 /var/spool/postfix/var/run/saslauthd
- Ajout l’utilisateur Postfix au groupe sasl :
root@alice.lan: # adduser postfix sasl
- Création du fichier /etc/pam.d/smtp et insertion les éléments suivants :
@include common-auth
@include common-account
@include common-password
@include common-session
- On démarre le daemon saslauthd :
root@alice.lan: # service saslauthd start
3. Configuration de Postfix
- Ajouter les lignes suivantes à la fin du fichier /etc/postfix/main.cf :
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions =
__permit_mynetworks,
__permit_sasl_authenticated,
__reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $mydomain
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_sasl_type = cyrus
cyrus_sasl_config_path = /etc/postfix/sasl
- Créer le fichier /etc/postfix/sasl/smtpd.conf et y insérer les lignes suivantes :
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
- Un redémarrage du serveur est nécessaire pour la prise en compte des nouveaux paramètres :
root@alice.lan: # service saslauthd start
4. Tester la configuration
4.1. Tentative d’envoi sans authentification
- Simulons via telnet sur le port SMTP tcp/25, une tentative d’envoi de courriel depuis le serveur de messagerie Postfix – sans authentification :
root@alice.lan: > telnet 10.0.0.44 25
Trying 10.0.0.44…
Connected to 10.0.0.44.
Escape character is ‘^]’.
220 alice.lan ESMTP Postfix
mail from:<root@mail.glx>
250 2.1.0 Ok
rcpt to:<nicolas@cachelou.fr>
554 5.7.1 <nicolas@cachelou.fr>: Relay access denied
221 2.7.0 Error: I can break rules, too. Goodbye.
Connection closed by foreign host.
- Voici les traces laissée dans le fichier de journalisation /var/log/mail.log :
Jan 30 13:17:32 alice.lan postfix/smtpd[20759]: NOQUEUE: reject: RCPT from pfalk.net.ncad.fr[10.0.0.48]: 554 5.7.1 nicolas@cachelou.fr: Relay access denied; from=root@mail.glx to=nicolas@cachelou.fr proto=SMTP
- Le fichier recense bien la tentative de relayage d’un courriel depuis l’hôte pfalk.net.ncad.fr avec pour motif de refus : Relay access denied.
4.2. Tentative d’envoi avec authentification
- Simulons via telnet sur le port SMTP tcp/25, une tentative d’envoi de courriel depuis le serveur de messagerie Postfix – avec authentification :
root@alice.lan: > telnet 10.0.0.44 25
Trying 10.0.0.44…
Connected to 10.0.0.44.
Escape character is ‘^]’.
220 alice.lan ESMTP Postfix
auth login YWxpY2U=
334 UGFzc3dvcmQ6
YWxpY2U=
235 2.7.0 Authentication successful
mail from:<root@mail.glx>
250 2.1.0 Ok
rcpt to:<nicolas@cachelou.fr>
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
test
.
250 2.0.0 Ok: queued as 8EDAD62881
- Voici les traces laissée dans le fichier de journalisation /var/log/mail.log :
Jan 30 14:48:59 alice.lan postfix/smtpd[24312]: CD53F62881: client=pfalk.net.ncad.fr[10.0.0.48], sasl_method=login, sasl_username=alice@alice.lan
Jan 30 14:49:05 alice.lan postfix/cleanup[24315]: CD53F62881: message-id=<>
Jan 30 14:49:05 alice.lan postfix/qmgr[24195]: CD53F62881: from=root@mail.glx, size=190, nrcpt=1 (queue active)
Jan 30 14:49:07 alice.lan postfix/smtp[24316]: CD53F62881: to=nicolas@cachelou.fr, relay=aspmx.l.google.com[173.194.78.27]:25, delay=16, delays=14/0.13/1.2/0.56, dsn=5.7.1, status=bounced (host aspmx.l.google.com[173.194.78.27] said: 550-5.7.1 [109.190.9.125 11] Our system has detected that this message is 550-5.7.1 not RFC 2822 compliant. To reduce the amount of spam sent to Gmail, 550-5.7.1 this message has been blocked. Please review 550 5.7.1 RFC 2822 specifications for more information. dq1si3286812wib.75 – gsmtp (in reply to end of DATA command))
Jan 30 14:49:07 alice.lan postfix/cleanup[24315]: 31F5F63799: message-id=20140130134907.31F5F63799@alice.lan
Jan 30 14:49:07 alice.lan postfix/qmgr[24195]: 31F5F63799: from=<>, size=2576, nrcpt=1 (queue active)
Jan 30 14:49:07 alice.lan postfix/bounce[24317]: CD53F62881: sender non-delivery notification: 31F5F63799
Jan 30 14:49:07 alice.lan postfix/qmgr[24195]: CD53F62881: removed
Jan 30 14:49:07 alice.lan postfix/local[24318]: 31F5F63799: to=root@mail.glx, relay=local, delay=0.3, delays=0.05/0.12/0/0.13, dsn=2.0.0, status=sent (delivered to command: procmail -a « $EXTENSION »)
Jan 30 14:49:07 alice.lan postfix/qmgr[24195]: 31F5F63799: removed
Le nom d’utilisateur et le mot de passe sont encodés en Base64.
- D’après les logs enregistrés dans le fichier, l’authentification a réussi. Cependant, l’envoi du mail vers nicolas@cachelou.fr a échoué car le fournisseur du service de messagerie GMail a refusé le message. GMail n’accepte pas les messages sans objet.