SMTP AUTH sous NetBSD, vite fait

Tags: , , ,
No Comments »

Heureux possesseur d’un téléphone Android, j’utilise comme bon nombre de mes compères le logiciel K9-mail, probablement le meilleur MUA disponible sur cette plateforme, et qui a le bon goût d’être Libre, au contraire des centaines de milliers d’applis merdiques à 0.99€.
Jusqu’à présent, je n’utilisais K9 que pour lire mon mail, essentiellement dans le metro, “on the go”. Et puis finalement, je suis dit qu’il serait fort convivial de pouvoir utiliser mon serveur mail perso depuis un peu partout.
Mon serveur mail, est-il besoin de le préciser, est un domU NetBSD sur lequel sont executés Sendmail et dovecot.
Il y a un certain temps de cela, j’avais documenté la méthode pour FreeBSD, et assez étrangement, jamais pour NetBSD. Je vais donc corriger le tir de ce pas.

La première chose à faire est de préciser que nous souhaitons bénéficier du support TLS et SASL dans sendmail. Ceci est réalisé dans le fichier /etc/mk.conf:

PKG_OPTIONS.sendmail=   tls sasl

Je ne sais pas si cela est lié au fait que la machine sur laquelle j’ai mené l’opération est “encore” en 5.0.2, mais la compilation de cyrus-sasl a misérablement échoué dans sa configuration par défaut. Ceci:

db_ndbm.c: In function '_sasldb_getdata':
db_ndbm.c:95: warning: passing argument 3 of 'utils->getcallback' from incompatible pointer type

M’a mis sur la voie, et j’ai donc ajouté dans mon /etc/mk.conf la ligne suivante:

SASL_DBTYPE=            berkeley

Un make update clean plus loin, tout était installé. Il est à noter que, par défaut, cyrus-sasl ne fournit aucun plugin, aussi, il sera nécessaire d’en installer au moins un, par exemple:

# cd /usr/pkgsrc/security/cy2-login
# make install clean

Qui nous permettra d’utiliser le couple login/password de notre système. Deux étapes sont nécessaires pour utiliser cette méthode, tout d’abord, il faut installer le démon saslauthd, en charge des échange d’authentification plain text:

# cd /usr/pkgsrc/security/cyrus-saslauthd/
# make install clean
# cp /usr/pkg/share/examples/rc.d/saslauthd /etc/rc.d
# echo "saslauthd=YES" >> /etc/rc.conf
# /etc/rc.d/saslauthd start

Puis de préciser au plugin SASL qu’il devra utiliser le démon saslauthd pour l’authentification en provenance de sendmail.

# cat /usr/pkg/lib/sasl2/Sendmail.conf 
pwcheck_method:saslauthd

Nous ajoutons maintenant à sendmail la gestion de ces deux nouvelles fonctionnalités:

# cd /usr/pkg/share/sendmail/cf
# cat monserveur.mc
[...]
dnl ### SMTP AUTH
define(`confAUTH_MECHANISMS', `LOGIN')dnl
TRUST_AUTH_MECH(`LOGIN')dnl
dnl ### STARTTLS
dnl ### Ces sertificats sont en provenance de CACert.org. Il ne s'agit pas de certificats auto-signés
define(`confCACERT_PATH',`/etc/mail/certs/')dnl
define(`confCACERT', `/etc/mail/certs/cacert.crt')
define(`confSERVER_CERT',`/etc/mail/certs/certificat_serveur.pem')dnl
define(`confSERVER_KEY',`/etc/mail/certs/certificat_privatekey.pem')dnl
[...]

Puis nous compilons et installons la nouvelle configuration:

# make install-cf CF=monserveur
rm -f monserveur.cf
m4 ../m4/cf.m4 monserveur.mc > monserveur.cf || ( rm -f monserveur.cf && exit 1 )
echo "### monserveur.mc ###" >>monserveur.cf
sed -e 's/^/# /' monserveur.mc >>monserveur.cf
chmod 444 monserveur.cf
/usr/bin/install -c -o root -g wheel -m 0444 monserveur.cf /etc/mail/sendmail.cf
/usr/bin/install -c -o root -g wheel -m 0444 monserveur.cf /etc/mail/submit.cf

À l’issue d’un /etc/rc.d/sendmail restart, nous devrions constater les choses suivantes:

# sendmail -d0.1 -bv root | grep SASL
                SASLv2 SCANF SOCKETMAP STARTTLS TCPWRAPPERS USERDB XDEBUG

Et également:

# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220monserveur ESMTP Sendmail 8.14.5/8.14.5; Fri, 11 Nov 2011 13:13:17 +0100 (CET)
ehlo localhost
250-monserveur Hello localhost [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-EXPN
250-VERB
250-8BITMIME
250-SIZE 5000000
250-DSN
250-ETRN
250-AUTH LOGIN
250-STARTTLS
250-DELIVERBY
250 HELP

Ne reste alors qu’à configurer votre MUA pour qu’il utilise votre serveur SMTP sur le port 587 en TLS avec la méthode LOGIN, avec les login/passwd de l’utilisateur souhaité.

Enjoy.

you must unLEaaarn what ou have leaaarned

Tags: , ,
2 Comments »

alors voila, pardon. Y’a -fiou- 2 ans, je bavais comme un vilain sur dspam, et là, là, eh bah je m’incline. In-cro-yable efficacité, je lui ai fait bouffer un millier de hams, un millier de spams, et pouf, le vla-t-y pas qu’il me catche un bon 96% de saloperies. Alors attention, c’est sur mon kimloli, c’est du perso, c’est pas mutualisé pour deux sous. Mais intégration à sendmail les doigts dans le nez (+ procmail):

define(`LOCAL_MAILER_PATH', `/usr/local/bin/dspam')
define(`LOCAL_MAILER_ARGS', `dspam -t -Y -a $h "--deliver=innocent" --user $u -d %u')

Fonctionne nickel balle avec mon nouvel amour, lighttpd. GUI web tout ce qu’il y a de plus sobre et efficace.
Dla bonne.
Le plus pénible a été de lui faire avaler les quelques milliers de mails préalablement nettoyés du markup spamass :

$ formail -s spamassassin -d < spam_corpus > cleaned.spam.inbox
$ formail -s spamassassin -d < ham_corpus > cleaned.ham.inbox

puis

$ formail -s dspam --client --user mes users --class=spam --source=corpus --mode=teft < cleaned.spam.inbox
$ formail -s dspam --client --user mes users --class=innocent --source=corpus --mode=teft < cleaned.ham.inbox

Avec de chaques cotés, des mbox tronquées à grands coups de tail, wc, grep -n et autes bc.

On n'oublie pas d'ajouter le user qui possède le serveur www comme Trusted User :

Trust www

et…

…on fait un gros doigt à nos amis spammeurs.

local

Tags: ,
1 Comment »

update

Non seulement ce qui est ecrit ci dessous est faux mais en plus ca ne marche absolument pas.
En réalité il suffisait de spécifier à la classe w de chercher tous les attributs sendmailMTAClassName=w dans l’arbre, soit :

define(`confCW_FILE', `@ldap: -k sendmailMTAClassName=w -v sendmailMTACLassValue')

dans le fichier .mc

C’est pris à la volée et ca marche impeccablement bien.

P’tit tip en passant, pour verifier tes local-host-names :

echo '$=w' | sendmail -bt


Je me demandais pourquoi donc après avoir ajouté des hosts dans la classe sendmailMTAClassName=w (équivalent de local-host-names), les mails à destination de ces derniers étaient refusés / non relayés si je ne restartais pas sendmail. En fait, et c’est très ennuyeux, il faut effectivement restarter sendmail pour que la classe w soit reloadée. MAIS ASTUCE ! je viens également d’apprendre ici qu’on peut elegamment remplacer le fichier classique des domaines locaux par une entrée dans la mailertable et dans l’access.db pour authoriser son relay. En LDAP ca nous donne :

# mailer, sendmail, gcu.info.dotpure.net
dn: sendmailMTAMapName=mailer,ou=sendmail,dc=gcu.info,dc=dotpure,dc=net
objectClass: top
objectClass: sendmailMTA
objectClass: sendmailMTAMap
objectClass: sendmailMTAMapObject
sendmailMTACluster: dotpure.net
sendmailMTAKey: gcu.info
sendmailMTAMapName: mailer
sendmailMTAMapValue: local:

# access, sendmail, gcu.info.dotpure.net
dn: sendmailMTAMapName=access,ou=sendmail,dc=gcu.info,dc=dotpure,dc=net
objectClass: top
objectClass: sendmailMTA
objectClass: sendmailMTAMap
objectClass: sendmailMTAMapObject
sendmailMTACluster: dotpure.net
sendmailMTAMapName: access
sendmailMTAKey: gcu.info
sendmailMTAMapValue: RELAY

c’est beau hein :)

chula, chupala

Tags: , , , , , ,
2 Comments »

note: cette nouvelle est sujette à modifications en fonction de mon avancement dans la mise en place et la configuration de ma plateforme

Quelques liens glânés de-ci de-la pour monter une plate-forme mail couillue :

. SMTP Auth avec sendmail et FreeBSD
. SMTP Auth, la doc officielle de sendmail.org
. Un overview de l’integration SASL par l’ami asyd
. l’excellent projet MiniVisp de l’ami Hug
. FABULEUSE doc sur l’interfacage sendmail / LDAP
. Sendmail + Auth + TLS
. Utilisation de STARTTLS avec sendmail et l’accessdb
. la liste des parametres compris par confLDAP_DEFAULT_SPEC (binddn, password…)
. à la fin de ce tuto vous trouverez de bons exemples de virtuser LDAP
. FreeBSD fast and secure mail server using sendmail and imap-uw (eeeet si)
.
Secure Email Using Cyrus IMAP, Sendmail, and SASLv2
. Le classique mais toujours efficace OpenLDAP QuickStart Guide
. Le NSS / PAM LDAP HOWTO pour FreeBSD 5.x
. saslauthd + LDAP
. Des astuces pour rendre sendmail plus agressif
. les migration tools de padl.com
. OpenLDAP TLS HOWTO
. Installer le milter DomainKey
. Encore une doc sur domainkey

Voici la partie relative de mon /etc/make.conf

SENDMAIL_CFLAGS=-I/usr/local/include -DSASL=2 -DLDAPMAP -DSTARTTLS
SENDMAIL_LDFLAGS=-L/usr/local/lib
SENDMAIL_LDADD=-lsasl2 -lldap -llber

Et les parties reliées de mon sendmail.mc

define(`confLDAP_DEFAULT_SPEC', ` -h localhost -b dc=imil,dc=net')
FEATURE(ldap_routing)
LDAPROUTE_DOMAIN(`mail.imil.net')

[...]

TRUST_AUTH_MECH(`GSSAPI DIGEST-MD5 LOGIN')
define(`confDEF_AUTH_INFO', `GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN')
define(`confAUTH_MECHANISMS', `GSSAPI DIGEST-MD5 LOGIN')
dnl p: uniquement TLS pour l'authentification type Login
dnl A: Use the AUTH= parameter for the MAIL FROM command only when authentication succeeded.
define(`confAUTH_OPTIONS', `A p')

[...]

define(`confCACERT_PATH', `/etc/mail/ssl')dnl
define(`confCACERT', `/etc/mail/ssl/cacert.pem')dnl
define(`confSERVER_CERT', `/etc/mail/ssl/sendmail.pem')dnl
define(`confSERVER_KEY', `/etc/mail/ssl/sendmail.pem')dnl
define(`confCLIENT_CERT', `/etc/mail/ssl/sendmail.pem')dnl
define(`confCLIENT_KEY', `/etc/mail/ssl/sendmail.pem')dnl

Quelques trucs :

Dans le saslauthd.conf, ne pas oublier :

ldap_search_base: dc=domaine,dc=com
ldap_filter: uid=%u
# pour activer TLS
ldap_start_tls: yes

Pour bénéficier de toutes les propriétés nécessaires, s’assurer d’avoir les includes suivants dans son slapd.conf :

include /usr/local/etc/openldap/schema/core.schema
include /usr/local/etc/openldap/schema/cosine.schema
include /usr/local/etc/openldap/schema/inetorgperson.schema
include /usr/local/etc/openldap/schema/nis.schema
include /usr/local/etc/openldap/schema/misc.schema

Le module ldap_routing de sendmail communique par defaut en LDAPv2, il faut ajouter l’option “-w 3″ à votre confLDAP_DEFAULT_SPEC pour le faire communiquer en LDAPv3.

Mon /etc/ldap.conf, linké à /usr/local/etc/ldap.conf et à /usr/local/etc/nss_ldap.conf

host 127.0.0.1
base dc=imil,dc=net
uri ldap://127.0.0.1/
ldap_version 3
binddn cn=user,dc=imil,dc=net
bindpw unpass
port 389
pam_password clear
# activer le TLS
ssl start_tls

J’utilise dovecot pour l’acces pop / imap, j’ai eu l’agréable surprise de voir qu’il créait seul les mailboxes des utilisateurs à leur premier login, de fait, en settant “/repertoire_en_777/utilisateur” comme homedir dans l’entrée LDAP de l’utilisateur, on se retrouve avec un systeme de provisionning automatique du meilleur gout.

Addon

Après avoir migré l’ensemble des services en TLS, j’ai constaté que dovecot ne permettait malheureusement pas de réaliser l’authentification LDAP sur TLS. Sur les conseils de mon ami Eric, j’ai pondu un rapide patch qui rend ce fonctionnement possible après avoir ajouté :

start_tls = 1

dans le dovecot-ldap.conf

Add-on

Au sujet de domainkey et DKIM, ne pas oublier d’ajouter l’option -i /path/vers/les/hosts/locaux (man dkim-milter), le cas échéant seuls les les mails en provenance de 127.0.0.1 seront signés.

Pour finir, la seule application “standalone” (comprendre, qui n’a pas besoin d’apache / php et tous leurs amis) convenable pour manipuler une database LDAP reste “gq”. J’aurais imaginé que les choses avaient un peu évolué depuis 5 ans mais finalement non.

Add-on

N’oubliez pas de placer la directive :

define(`confLDAP_CLUSTER', `nom-convivial')

Et de renseigner le champs “sendmailMTACluster” dans toutes vos entrées LDAP.

le cas échéant les queries LDAP sont tout simplement ignorées.

De plus, il est inutile de protéger l’accès au subtree ou=sendmail, la doc OpenLDAP nous montre comment libérer ce scope :

access to dn.subtree="ou=sendmail,dc=dotpure,dc=net" by * read

WP Theme & Icons based on GlossyBlue by N.Design Studio
Banner from www.trynthlas.com
Entries RSS Comments RSS Log in
Performance Optimization WordPress Plugins by W3 EDGE