Tags

arm bin_sh blocage blosxom bsd bsdfrance cblog certification chroot cluster dg834 dhcp dns dnsmasq dovecot fail-over fail2ban firefox freebsd ftp git guruplug install ipv6 jail kernel kimsufi lex libre linutop makefile mohawk netbook netbsd nginx ntp ntp.org openbsd openntpd openrd openwrt proxy python reverse rmll route rrdcgi sendmail sieve sl2009 ssd symon update usb var_empty vimperator world xen yacc zfs

Powered by

blOg
maRkdown
awK
shEll

15/11/2011

[ openbsd sendmail ]

201111151920 openbsd sendmail

OpenBSD, Free.fr, Hurricane Electric et le courriel

A la faveur d'une réinstallation sauvage de mon Linutop (qui est passé d'un OpenBSD 4.5 à un OpenBSD 5.0), je me suis rendu compte que ma configuration du courriel laissait à désirer.

Les forces en présence:

Openbsd et sendmail

On laisse de côté les sendmail sapu, postfix/exim/qmail/whatever saymieu, seul opensmtp pourrait trouver grâce à mes yeux mais pour l'instant il ne fait pas la réécriture d'entête.

Pas la peine de me ressortir le couplet sendmail saytrouhay, le fichier de conf saymalfay, toussa ... Je sais. Mais s'il y a bien un avantage à sendmail, c'est qu'il est livré de base. Toujours ça de moins à installer. De plus, les dernières failles commencent à dater un peu et la conf livrée par défaut ne transforme pas la machine en passoire.

Tunnel Hurricane Electric

Pas la peine de me parler de l'ipv6 de chez free. Je salue l'initiative, c'est gentil pour faire mumuse mais un /64 ça fait vraiment pingre. Un grand merci à Hurricane Electric qui, en plus de faire du prosel intelligent (leur certification vaut ce quelle vaut, elle a le mérite d'exister, tout comme leur tshirt) accorde grâcieusement 5 (oui, cinq) /48.

Réinstall sauvage

Oui, je sais, c'est pas compliqué de mettre à jour un openbsd. Mais je suis une loutre (hum, mon mirroir et ma balance parlent plutôt d'une p....n de grosse loutre mais ce sont de grossiers personnages) et je suis du genre à passer de 4.5 à 5.0 à la faveur d'une coupure électrique.

Les objectifs

Envoyer du courriel en utilisant le smtp de mon FAI. Les entêtes des courriels seront réécrites afin de faire référence à l'adresse email de mon FAI. Faire en sorte que la prochaine réinstall sauvage se passe mieux.

Premier exemple

OSTYPE(openbsd)
define(`SMART_HOST', `smtp.free.fr')
FEATURE(genericstable, `hash -o /etc/mail/genericstable')
FEATURE(`no_default_msa')
FEATURE(`local_procmail')
DAEMON_OPTIONS(`Family=inet, address=127.0.0.1, Name=MTA')
DAEMON_OPTIONS(`Family=inet6, address=::1, Name=MTA6, M=O')
MASQUERADE_AS(`free.fr')
FEATURE(masquerade_envelope)
FEATURE(local_no_masquerade)
GENERICS_DOMAIN_FILE(`/etc/mail/genericsdomain')
MAILER(procmail)
MAILER(local)
MAILER(smtp)

Compliqué hein ? Quelques explications:

Je passe sous silence le contenu de /etc/mail/genericstable, il est livré de base et documenté.

Seul soucis avec cette configuration: elle ne fonctionne pas tout à fait. Aucun soucis avec la réécriture des entêtes mais l'utilisation de smtp.free.fr va poser problème comme en témoigne les logs:

# extrait /var/log/mailog
to=<moi@la.bas>, ctladdr=<dsx@linutop.bsdsx.fr>, relay=smtp.free.fr. [IPv6:2a01:e0c:1:1599::10], stat=Service unavailable
DSN: Service unavailable

Solution

Utiliser l'authentification. Il faut activer cette fonctionnalité dans la console de gestion puis modifier notre configuration comme indiqué ici.

Je ne vous cache pas que ici, sapamarche. Je ne sais pas ce que j'ai merdoyé et flemme de résoudre.

Une solution un peu plus loutresque:

define(`SMART_HOST', `[212.27.48.4]')

On se dispense de l'authentification à chaque envoi de courriel et les pros du réseau confirmeront qu'il est plus simple/rapide de joindre 212.27.48.4 plutôt que de passer par un tunnel londonien pour atteindre 2a01:e0c:1:1599::10.

Pour finir

Pour me simplifier la vie, un Makefile sans prétention:

MAKEMAP=        /usr/libexec/sendmail/makemap
MY!=            hostname -s

.SUFFIXES:  .mc .cf

DB_FILES=       genericstable.db
FILES=          genericsdomain

ALL=    ${MY}.cf ${DB_FILES} ${FILES}

.mc.cf:
        @m4 /usr/share/sendmail/m4/cf.m4 ${.ALLSRC} > $@

all: ${ALL}

clean:
        @rm -f ${ALL}

genericstable.db: genericstable
        @${MAKEMAP} hash ${.ALLSRC} < ${.ALLSRC}

genericsdomain:
        @hostname > $@

install: ${ALL}
        @sudo install -g wheel -o root -m 644 ${.ALLSRC} /etc/mail
        @echo "You can add the following line in /etc/rc.conf.local:"
        @echo "sendmail_flags=\"-L sm-mta -C/etc/mail/${MY}.cf -bd -q30m\""

restart:
        @sudo /etc/rc.d/sendmail restart

Le contenu de mon $HOME/etc/mail:

dsx@linutop>ls -l
total 12
-rw-r--r--  1 dsx  wheel  619 Nov 14 22:18 Makefile
-rw-r--r--  1 dsx  wheel  998 Nov 13 12:51 genericstable
-rw-r--r--  1 dsx  wheel  459 Nov 14 22:19 linutop.mc

Le tout en action:

dsx@linutop>make clean && make && make install
You can add the following line in /etc/rc.conf.local:
sendmail_flags="-L sm-mta -C/etc/mail/linutop.cf -bd -q30m"
dsx@linutop>make restart
sendmail(ok)
sendmail(ok)

Le mot de la fin

Oui, j'ai lu ttp://wiki.mutt.org/?MuttFaq/Sendmail. Oui les clients de courriels savent dialoguer directement avec un serveur smtp. Alors à quoi bon tous ces efforts ? Tout simplement parce que participer à un projet opensource cela peut commencer par (dmesg; sysctl hw.sensors) | mail -s 'Linutop v3' dmesg@openbsd.org (et continuer avec sendbug(1), okazou).


Lien vers ce billet