Tags

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

Powered by

blOg
maRkdown
awK
shEll

26/12/2013

[ liste diffusion privee sendmail opensmtpd ]

201312261800 liste diffusion privee sendmail opensmtpd

Liste de diffusion privée

De nos jours, utiliser sendmail n'est pas très courant. C'est pourtant le serveur de courriel que j'utilise le plus car il est livré de base avec FreeBSD. Grand consommateur de jail, j'ai naturellement mis en place cette solution quand j'ai dû m'occuper de la partie courrier électronique d'une association.

Je pars du postulat que la configuration DNS est au point, que l'association a pour nom lassau, que la jail est prête (un simple tar xpf base.txz -C /chemin/vers/ma/jail fera parfaitement l'affaire), qu'elle a pour nom mail.lassau.org et qu'elle est démarrée.

Je commence par préparer la configuration de sendmail:

$ sudo jexec mail.lassau.org /bin/csh 
# cd /etc/mail
# make

Je prépare un fichier d'alias dédié:

# cat /etc/mail/lassau
## Association lassau, l'association qu'il vous faut ! ##
ca: president,secretaire
owner-ca: ca-request
ca-request: president

contact: president
info: president
paypal: tresorier,secretaire

secretaire: matignon@gouv.fr
tresorier: bercy@gouv.fr
president: elysee@gouv.fr

## Mailing list asso ##
asso: :include:/etc/mail/asso_lassau.org
asso-request: president
asso-help: president
asso-list: president
asso_owner: president
owner_asso: president

## Alias des adherents qui veulent une adresse en @lassau.org ##

foo: foo@example.com
bar: bar@example.com
truc: bidule@machin.com

L'alias asso comprend la liste des adhérents:

# cat /etc/mail/asso_lassau.org
foo@example.com
bar@example.com
bidule@machin.com
chose@pouet.fr
jesaispas@la.bas

Je rajoute les lignes suivantes au fichier /etc/mail/mail.lasso.org.mc (généré par la commande make précédente):

define(`ALIAS_FILE', `/etc/mail/aliases,/etc/mail/lassau')
define(`confMAX_MESSAGE_SIZE', `2000000')

Qui dit make dit Makefile:

# grep ^SENDMAIL_ALIASES Makefile
SENDMAIL_ALIASES?=      /etc/mail/aliases /etc/mail/lassau
# make
# make aliases
# make install
# make restart

Seul point noir: l'alias asso@lassau.org est accessible par tout le monde, et surtout par des vilains qui veulent nous vendre au large des péniches de vinaigre. Idéalement, seules les adresses contenues dans le fichier /etc/mail/asso_lassau devraient avoir le droit d'envoyer du courriel à asso@lassau.org. Les afficionados de Postfix utilisent une recette à base de check_recipient_access et de smtpd_recipient_restrictions. Avec sendmail, c'est un poil plus ... ardu:

# tail -n 14 mail.lassau.org.mc | cat -n
 1  dnl Config lassau
 2  LOCAL_CONFIG
 3  F{ASSO}/etc/mail/asso_lassau.org
 4  LOCAL_RULESETS
 5  SLocal_check_rcpt
 6  R$*                     $: $>canonify $1
 7  Rasso <@ $=w . > $*     $: $>from_laussau $&f
 8  RBAD                    $#error $@ 5.7.1 $: "554 Go die "
 9  R$*                     $@ OK
10
11  Sfrom_lassau
12  R$={ASSO}               $@ GOOD
13  R$*                     $: BAD

Je suis d'accord, ça pique un peu les yeux. Revoyons la scène au ralenti:

Il est certain que même avec la traduction, on ne peut pas dire que cela soit clair comme de l'eau de roche. En ce moment je fait mumuse avec des jails taillées sur mesure (lire ici et ). Je n'avais pas trop envie d'utiliser sendmail dans ce cas précis et il y a quelques temps qu'opensmtpd me fait de l'oeil. Pour ceux qui veulent du lisible et compréhensible:

listen on lo1

table lassau db:/etc/mail/lassau.db
table asso_lassau db:/etc/mail/asso_lassau.org.db

reject from any sender !<asso_lassau> for domain "lassau.org" recipient "asso@lassau.org"
accept from any for domain "lassau.org" alias <lassau>
accept for any relay

Je ne suis pas un pro de Postfix mais je doute qu'on puisse faire aussi concis, simple et lisible (et non, "accept for any relay" ne correspond pas à un open-relay).


Lien vers ce billet

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