OpenSMTPD sous OpenBSD 6.0 avec SSL/VirtualUsers/Dovecot
This article is in French and is available in English here !
Lors de l’AsiaBSDCon 2013, l’équipe d’OpenBSD a pu présenter sa solution de serveur mail nommée OpenSMTPD.
S’agissant d’une solution développée par l’équipe d’OpenBSD, nous retrouvons la philosophie tant appréciée mettant en évidence sécurité, simplicité/clarté et fonctionnalités avancées.
Sécurité :
Le service fonctionne sans privilèges et dans un chroot : /var/empty en l’occurence. La prise en charge du SSL, la déconnexion automatique des clients établissant un lien de longue durée sans effectuer de requêtes, la limitation du nombre de connexions entrantes, etc.
Simplicité :
La syntaxe de configuration utilisée est semblable à celle de PacketFilter et se trouve être orientée « user-friendly ». Vous pourrez le constater dans quelques minutes.
**Fonctionnalités avancées : **
- Gestion des différents type de transport de courier : - mbox
- maildir
- mda
- lmtp (on va le tester !)
- statistiques via smtpctl
- gestion d’utilisateurs virtuels
- gestion SQL
- scheduler
- relay
- etc.
Configuration de base :
OpenSMTPD étant installé par défaut nous allons pouvoir directement nous lancer dans une configuration basique pour commencer.
# vi /etc/mail/smtpd.conf
listen on lo0
listen on em0
table aliases file:/etc/mail/aliases
accept from any for domain "cagedmonster.net" alias <aliases> deliver to mbox
accept for local alias <aliases> deliver to mbox
accept from local for any relay
On écoute sur nos interfaces, on spécifie l’adresse de notre fichier aliases afin d’effectuer des redirections à notre guise.
On va offrir à tous la possibilité de délivrer des mails sur le domaine cagedmonster.net dans mbox (la boîte mail locale de l’user), idem pour les alias.
Enfin, on accepte de relayer les mails envoyés seulement en local.
Tant qu’on y est, on active le service au lancement du système et démarre le service idoine.
# rcctl enable smtpd && rcctl start smtpd
Passons à une configuration un peu plus précise avec l’intégration du TLS :
Il y deux méthodes visant à obtenir un certificat SSL.
- Auto-générer son certificat (qui ne sera pas validé par une autorité reconnue).
- Passer par une autorité telle que LetsEncrypt utilisant Certbot pour générer votre certificat. Auquel cas je vous laisserai le soin de consulter cette page.
Nous allons nous concentrer sur la première.
Génération du certificat :
# openssl genrsa -out /etc/ssl/private/server.key
Generating RSA private key, 2048 bit long modulus
...............................................................+++
..........+++
e is 65537 (0x10001)
# openssl req -new -x509 -key /etc/ssl/private/server.key -out /etc/ssl/server.crt -days 3650
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) []:FR
State or Province Name (full name) []:SomeWhere
Locality Name (eg, city) []:Deauville
Organization Name (eg, company) []:CagedMonster
Organizational Unit Name (eg, section) []:CGM
Common Name (eg, fully qualified host name) []:mail.cagedmonster.net
Email Address []:[adresse masquée]
On fixe les permissions :
# chmod 600 /etc/ssl/server.crt && chmod 600 /etc/ssl/private/server.key
On modifie notre fichier de configuration :
# vi /etc/mail/smtpd.conf
pki mail.cagedmonster.net certificate "/etc/ssl/server.crt"
pki mail.cagedmonster.net key "/etc/ssl/private/server.key"
listen on lo0
listen on em0 port 25 tls pki mail.cagedmonster.net
table aliases file:/etc/mail/aliases
accept from any for domain "cagedmonster.net" alias <aliases> deliver to mbox
accept for local alias <aliases> deliver to mbox
accept from local for any relay
# rcctl restart smtpd
Nous voici avec un serveur mail gérant le SSL, passons à présent à la mise en place de notre serveur IMAP, Dovecot, ainsi qu’à la création des utilisateurs cette fois-ci virtuels.
Déploiement de Dovecot, configuration et création de comptes virtuels :
Nous allons passer par le système de packages d’OpenBSD, vérifiez que les informations contenues dans /etc/pkg.conf soient exactes.
Installation :
# pkg_add dovecot
Activation au démarrage du système :
# rcctl enable dovecot
Création de la structure dédiée aux comptes virtuels :
# useradd -g =uid -c "Comptes Virtuels" -d /var/virtmail -s /sbin/nologin virtmail
# mkdir /var/virtmail
# chown virtmail:virtmail /var/virtmail
Ajout de la prise en charge des tables passwd (merci à bsdsx@freenode pour la précision) :
# pkg_add opensmtpd-extras
Modification de la configuration d’OpenSMTPD :
# vi /etc/mail/smtpd.conf
pki mail.cagedmonster.net certificate "/etc/ssl/server.crt"
pki mail.cagedmonster.net key "/etc/ssl/private/server.key"
table aliases file:/etc/mail/aliases
table passwd passwd:/etc/mail/passwd
table virtuals file:/etc/mail/virtuals
listen on lo0 listen on em0 port 25 tls pki mail.cagedmonster.net
listen on em0 port 587 tls-require pki mail.cagedmonster.net auth <passwd>
accept from local for local alias <aliases> deliver to lmtp "/var/dovecot/lmtp" rcpt-to
accept from any for domain "cagedmonster.net" virtual <virtuals> deliver to lmtp "/var/dovecot/lmtp" rcpt-to
accept from local for any relay
Ici l’objectif est de déclarer les fichiers définissant nos comptes virtuels, permettre une authentification SSL pour les utilisateurs et délivrer directement les courriers dans Dovecot via le socket lmtp.
Voyons maintenant à quoi ressemblent nos fichiers :
# vi /etc/mail/aliases
virtmail: /dev/null www: lina webmaster: lina root: lina abuse: lina lina: [adresse masquée]
# vi /etc/mail/passwd
Nous allons créer notre utilisateur [adresse masquée] et lui intégrer un mot de passe.
# smtpctl encrypt mon-mot-de-passe-personnel $2b$10$MYDvA2r8ws1IAOJS9eZLXOYni2RH5QNKXyG8blOpmqHke6pASBlh2
Voici la nomenclature à respecter dans votre fichier avec un quota de 10G :
[adresse masquée]:$2b$10$MYDvA2r8ws1IAOJS9eZLXOYni2RH5QNKXyG8blOpmqHke6pASBlh2::::::userdb_quota_rule=*:storage=10G
# vi /etc/mail/virtuals
[adresse masquée] virtmail
Configuration de Dovecot :
SSL :
# vi /etc/dovecot/conf.d/10-ssl.conf ssl_cert = </etc/ssl/server.crt ssl_key = </etc/ssl/private/server.key
DOVECOT .CONF :
# vi /etc/dovecot/dovecot.conf
protocols = lmtp imap
passdb {
args = scheme=blf-crypt /etc/mail/passwd
driver = passwd-file
}
userdb {
args = uid=virtmail
gid=virtmail
home=/var/virtmail/%d/%n
driver = static
}
10-MAIL.CONF :
# vi /etc/dovecot/conf.d/10-mail.conf
mail_location = mbox:/var/virtmail/%d/%n
LOGIN.CONF :
Assurez-vous que /etc/login.conf contienne une valeur égale ou supérieure à 1000 pour openfiles-cur
daemon:\ :openfiles-cur=1000:\ # cap_mkdb /etc/login.conf
Sinon vous risquez d’avoir des défaillances au lancement de Dovecot.
Lancement de dovecot :
# rcctl start dovecot
Aller plus loin :
L’article suivant : https://blog.cagedmonster.net/opensmtpd-dovecot-openbsd-mysql-spamd/ vous apprendra à faire reposer OpenSMTPD sur une base MySQL et intégrer une solution anti-spam nommée SPAMD.
Besoin d’aide ?