Hi all,

As i wrote few months ago i have write an article in French about Opensmtpd
and i don't want to write some bullshits about it.
Could you please have a look to it and make me know about mistake i could
make.
Thanks a lots.


The article is not posted yet so i put the corpus right here.

Olivier Calzi

Article Start:


Nous utilisons tous des services de messagerie en ligne tel que Gmail,
Outlook, Yahoo... Mais si vous vouliez prendre le contrôle de vos mails?
comment faire?

Comparons la technologie Exchange de Microsoft avec ces CAL's et ces
licences et son budget ou  les technologies open-source comme Sendmail,
Postfix ou dans notre cas OpenSMTPD.

Afin d'avoir un service aussi-complet que Gmail il faudra mettre en place
plusieurs briques et OpenSMTPD en fait partie. OpenSMTPD est  un service
SMTP libre utilisant le-dit protocole comme défini dans la RFC 5321. Il
permet d'échanger des e-mails avec d'autres systèmes utilisant ce protocole.

OpenSMTPD est un service "jeune" qui a voulu reprendre la simplicité de
compréhension et de configuration du firewall Packet Filter d'OpenBSD. Ce
service est implémenté depuis OpenBSD 4.6 dans la branche "unstable" et
depuis OpenBSD 5.3 en tant que stable.

Le MAN est la premières phase de l'approche pour utiliser ce service, il
fournit les premières étapes pour un déploiement propre.

*smtpd* is not enabled by default.In order to use it as the system
mailer, ensure the mail queue is empty, then stop sendmail(8)
<http://www.openbsd.org/cgi-bin/man.cgi?query=sendmail&sektion=8&arch=&apropos=0&manpath=OpenBSD+Current>:

# /etc/rc.d/sendmail stop
Modify the current mailwrapper(8)
<http://www.openbsd.org/cgi-bin/man.cgi?query=mailwrapper&sektion=8&arch=&apropos=0&manpath=OpenBSD+Current>
settings by editing */etc/mailer.conf*:
           sendmail        /usr/sbin/smtpctl
           send-mail       /usr/sbin/smtpctl
           mailq           /usr/sbin/smtpctl
           makemap         /usr/libexec/smtpd/makemap
           newaliases      /usr/libexec/smtpd/makemap

Disable the sendmail clientmqueue entry in crontab(1)
<http://www.openbsd.org/cgi-bin/man.cgi?query=crontab&sektion=1&arch=&apropos=0&manpath=OpenBSD+Current>.

Rebuild the aliases database, and enable the daemon:

# newaliases
# echo "sendmail_flags=NO" >> /etc/rc.conf.local
# echo "smtpd_flags=" >> /etc/rc.conf.local
# /etc/rc.d/smtpd start

Maintenant que le paramétrages du service au niveau du système est faite
nous allons passer à la configuration du fichier "smtpd.conf".

listen on all

table aliases db:/etc/mail/aliases.db

# Uncomment the following to accept external mail for domain "example.org"
#
# accept from any for domain "example.org" alias <aliases> deliver to mbox
accept from any for domain "dev.unix-experience.fr" alias <aliases>
deliver to maildir
accept for local alias <aliases> deliver to maildir
accept for any relay

Le service est à présent configuré, il nous reste à accepter les
connections externes sur le port 25 avec Packet Filter et à redémarrer le
service smtpd avec la commande */etc/rc.d/smtpd restart*.

Pour vérifier votre configuration Opensmtpd comme pour PF il existe la
commande* smtpd -n*.

Pour lancer smtpd en mode debug lancer la commande *smtpd -dv*.

Configurez maintenant Packet Filter (rappel: fichier */etc/pf.conf*)

 pass in proto tcp to self port smtp

Vérifiez maintenant la syntaxe et chargez le jeux de règles:

#Pour verifier la syntaxe
pfctl -nf /etc/pf.conf

#Pour charger les nouvelles regles
pfctl -f /etc/pf.conf

Pour conclure cette partie, réalisons un test:

telnet dev.unix-experience.fr 25
Connected to dev.unix-experience.fr.
Escape character is '^]'.
220 hermes.my.domain ESMTP OpenSMTPD

Allons un peux plus loin dans notre configuration et renforçons la sécurité:
Chiffrement TLS

listen on pcn0 port 25 tls-require hostname Hermes

Accordons une analyse de cette ligne de configuration du fichier smtpd.conf

*listen on pcn0 port 25* : le service écoutera sur l'interface pcn0 sur le
port 25 ( si le paramètre "all" est actif, le service écoutera sur toutes
les interfaces)

*tls-require* : Force les clients à établir une connexion sécurisée avant
d'être autorisés à dialoguer au SMTP, l'option *tls* seule peux suffire
mais *tls-require* renforce globalement. Il faut noter que l'utilisation de
ces options nécessite la création de certificats.
Ces certificats peuvent être spécifiés par l'ajout de l'option *certificate
*<name>.crt, <name>.key, <name>.dh présent dans le répertoire
/etc/mail/certs/. Néanmoins si cette option n'est pas présente, le service
recherchera des certificats sous la forme pcn0.crt et pcn0.key qui
correspond au nom de l'interface sur laquelle nous écoutons. Il est utile
de noter que si nous ne créons qu'un certificat et sa clé et non le CA
ainsi que le DH le service utilisera  ces paramètres par défaut.

*hostname Hermes* : permet de spécifier un nom pour la bannière smtpd.
Test d'envoi

Nous allons à présent réaliser un test d'envoi de mail via la commande

*mail*, en ayant lancé smtpd en mode debug, ainsi nous pourrons comprendre
les interactions par les logs.

echo "Ceci est un message de test" |mail -v -s "TEST MAIL" root@localhost

<<< 220 hermes.my.domain ESMTP OpenSMTPD
>>> EHLO localhost
<<< 250-hermes.my.domain Hello localhost [local], pleased to meet you
<<< 250-8BITMIME
<<< 250-ENHANCEDSTATUSCODES
<<< 250-SIZE 36700160
<<< 250 HELP
>>> MAIL FROM: <r...@hermes.my.domain>
<<< 250 Ok
>>> RCPT TO: <root@localhost>
<<< 250 Recipient ok
>>> DATA
<<< 354 Enter mail, end with "." on a line by itself
>>> .
<<< 250 e636d771 Message accepted for delivery
>>> QUIT
<<< 221 Bye

Ceci est le détail des interaction qui ont eu lieu pendant la communication
avec le serveur SMTP. On y retrouve les champs du destinataire et de
l'émetteur.

Si on regarde les logs de plus près, nous pouvons observer que le service
est extrêmement verbeux:

smtp-in: New session 000000001f305e85 from host 0@localhost [local]
debug: aliases_get: returned 1 aliases
debug: 0x12ad371d0000: end of message, msgflags=0x0000
smtp-in: Accepted message e636d771 on session 000000001f305e85:
from=<r...@hermes.my.domain>, to=<root@localhost>, size=245, ndest=1,
proto=ESMTP
debug: scheduler: evp:e636d771a30c37cc scheduled (mda)
debug: lka: userinfo <getpwnam>:unixexperience
smtp-in: Closing session 000000001f305e85
debug: mda: new session 000000002962b8f8 for user "unixexperience"
evpid e636d771a30c37cc
debug: smtp: 0x12ad371d0000: deleting session: done
debug: mda: no more envelope for "unixexperience"
debug: mda: got message fd 3 for session 000000002962b8f8 evpid e636d771a30c37cc
debug: mda: querying mda fd for session 000000002962b8f8 evpid e636d771a30c37cc
debug: smtpd: forking mda for session 000000002962b8f8:
"/home/unixexperience/Maildir" as unixexperience
debug: mda: got mda fd 4 for session 000000002962b8f8 evpid e636d771a30c37cc
debug: mda: end-of-file for session 000000002962b8f8 evpid e636d771a30c37cc
debug: mda: all data sent for session 000000002962b8f8 evpid e636d771a30c37cc
debug: smtpd: mda process done for session 000000002962b8f8: exited okay
delivery: Ok for e636d771a30c37cc: from=<r...@hermes.my.domain>,
to=<root@localhost>, user=unixexperience, method=maildir, delay=1s,
stat=Delivered
debug: mda: session 000000002962b8f8 done
debug: mda: user "unixexperience" becomes runnable
debug: mda: all done for user "unixexperience"

Nous pouvons alors décrire les étapes de réception du mail par dans un
premier par le MTA qui à rechercher un alias liant le destinataire
(root@localhost), une fois identifié comme l'utilisateur "unixexperience",
le MTA transmet le message au MDA interne de opensmtpd en  attribuant alors
l'"evpid" que l'on peux interprété comme "enveloppe identifer" au mda.

Ensuite une session interne s'initialise ou le message va être délivré dans
l'emplacement Maildir correspond à l'utilisateur unixexperience.
Configuration d'un relai

Nous pouvons considérer vouloir faire relayer nos mail par notre service
smtp dans le cadre ou les ports ou la destination de notre smtp est bloquée
à notre emplacement géographique ou tout simplement pour en faire un relais
Nous allons donc ajouter une règle qui relaierons nos mails via GMAIL.

Voici à quoi ressemble notre fichier smtpd.conf:

listen on pcn0 port 25 tls-require auth hostname Hermes
listen on pcn0 port 465 smtps auth  hostname Hermes

table secrets db:/etc/mail/secrets.db
table aliases db:/etc/mail/aliases.db

# Uncomment the following to accept external mail for domain
"example.org"http://www.unix-experience.fr/wp-admin/post.php?post=2889&action=edit&message=10
#
# accept from any for domain "example.org" alias <aliases> deliver to mbox
accept from local for any relay via tls+
auth://la...@smtp.gmail.com:587 auth <secrets>

Pour arriver à cette configuration nous avons dût réaliser plusieurs
actions.

touch "label idgoo...@gmail.com:PASSWD" >> /etc/mail/secrets
makemap /etc/mail/secrets
chmod 640 /etc/mail/secrets*
chown root:_smtpd /etc/mail/secrets*

Nous avons donc crée un fichier contenant les informations d'identification
pour utiliser le relais de google. Ensuite nous avons crée le fichier
"secrets.db" qui sera utililsé par smtpd, nous avons restreints les
permission sur ce fichier ainsi que son propriétaire et le groupe auxquels
ils appartiennent pour que ceux-ci puissent être lisible par le daemon
d'OpenSMTPD. Nous avons renseigné ce fichier sous cette forme dans
"smtpd.conf".

table secrets db:/etc/mail/secrets.db

Maintenant la régle du relai:

accept from local for any relay via
tls+auth://la...@smtp.gmail.com:587 auth <secrets>

*accept from local for any  *: Nous acceptons les envoie de mail localement
pour n'importe quel destination.

*relay via tls+auth://la...@smtp.gmail.com:587
<http://la...@smtp.gmail.com:587> auth <secrets> *: Nous relayons via une
authentification TLS en utilisant les information d'authentification
correspondant à l'étiquette label sur le smtp de Gmail sur le port 587 en
utilisant la table secrets.
Conclusion:

Nous reprendrons OpenSMTPD dans un article consacré à la mise en place d'un
serveur mail complet avec la technologie de virtualisation libvirt.

Ce qu'il faut retenir de OpenSMTPD:

- Produit en cours de développement- Ajout de nouvel fonctionnalité dans le
futur
- Facilité de compréhension de la configuration

Ce qui est valable aujourd'hui pour son utilisation ne le sera sans doute
plus demain.

Source:

Merci à la Mailing List d'OpenSMTPD pour m'avoir éclaircit sur le
fonctionnement des étiquettes.

http://www.opensmtpd.org/fr/list.html

http://www.openbsd.org/cgi-bin/man.cgi?query=smtpd&sektion=8

END
Cordialement
Olivier Calzi

Reply via email to