OpenSMTPD

De Le Wiki du Forum-Debian.fr
Aller à la navigation Aller à la recherche

Pourquoi OpenSMTPD

Sur le marché actuel des serveurs de courrier il y a des ancêtres (Courrier), des installés par défaut (Exim), des populaires (Postfix) et parfois des petits nouveaux venant de nos cher cousin les BSD. OpenSMTPD fait parti de cette dernière catégorie, il est issue d'une longue ligné d'outil issu du projet OpenBSD qui nous a sorti des perles comme OpenSSH qui est devenu LE standard. Ensuite ils ont pour objectif d'en faire un serveur :

  • extrêmement sécurisé
  • fiable en toute circonstance (un message reçut devra être traiteé quoi qu'il se passe)
  • résistant à la charge (ils ne visent pas les perfs extrêmes mais l'assurance du traitement dans un délai raisonnable)
  • léger et suffisant pour un usage classique (pas de support de cas particulier)
  • simple de configuration

Donc un serveur parfait pour de l'auto-hébergement

Quelques rappels de base

Malgré le fait que si vous chercher a mettre en place ce genre de serveur vous avez des bases confortables, je vais quand même redéfinir quelques termes liés à l'environnement du courrier électronique.

  • MTA = Agent de transfert des courriels (Mail Transfert Agent), on y classe tout les serveurs proposant du SMTP donc par exemple Postfix, Exim, OpenSMTPD etc. c'est a leur niveau que l'on vient filtrer le SPAM, Virus etc.
  • MDA = Agent de délivrance des courriels (Mail Delivery Agent) il font l'interface entre les MTA et MUA, ils sont chargé de mettre le courrier arrivé dans la bonne boite aux lettres. Ils ont aussi la charge de donner les accès IMAP et POP.
  • MUA = Agent d'utilisation des courriels (Mail User Agent), c'est voter client de courriel, qu'il soit par interface web (RoundCube, Horde, Hotmail, Gmail, ...) ou en client lourd (Thunderbird, Outlook, Lotus ...).
  • MRA = Agent de récupération des courriels (Mail Retrival Agent), permet d'aller récupérer les courriels sur un autre serveur (gmail, Yahoo, lapost.net, ...) pour les intégrer au compte courant. En général il s'agit d'un client POP ou IMAP, les plus connus sont fetchmail, getmail et retchmail.
  • SMTP = Protocole simple de transfert de courriel (Simple Mail Transfert Protocol) permet l'envoi et la réception entre MTA des courriels
  • POP = Protocole de bureau de poste (Post Office Protocol) Permet de récupérer les courriers électroniques situés sur un serveur MDA. Par défaut les courriel ainsi récupérés sont supprimer du serveur.
  • IMAP = Protocole d'accès aux messages d'internet (Internet Message Access Protocol) remplaçant du POP il permet d'interagir avec le serveur MDA, les courriers ne sont pas supprimer par défaut et diverses actions sont possibles comme la création/modification/suppression/déplacement de dossier et courriels.

Installation

Jessie

Pour cela rien de plus simple un paquet est présent dans les dépôts, donc une classique commande d'installation suffit

apt-get install opensmtpd

Whezzy

Là ça se gate, pas de paquet dispo et les backport ne l'ont pas encore pris en compte.

ATTENTION Les méthodes présentées ci-dessous sont des bidouillages, rien ne vaut un paquet issu d'un dépôt officiel Debian

Il existe bien la méthode classique d'installation avec récupération des sources et compilation

$wget http://www.opensmtpd.org/archives/opensmtpd-portable-latest.tar.gz
$tar xvzf opensmtpd-portable-latest.tar.gz
$cd opensmtpd-*
$ ./configure
$ make
$ make install

Mais nous allons feinter pour nous recréer un paquet tout ce qu'il y a de plus propre. Nous aurions pu récupérer le paquet de Jessie pour l'installer directement mais il y a une dépendance a Libc6 dans une version supérieur à ce qui est possible pour Whezzy, le reste des dépendances est satisfait ce qui est une chance. Il existe un script qui permet de construire un paquet Debian avec la dernière version de notre MTA mais personnellement je n'ai pas réussit à aller au bout du processus de construction. La solution que j'ai choisit est de détourner le paquet officiel de jessie pour le compiler avec les dépendances Whezzy. Dans notre sources.list nous allons ajouter une ligne nous permettant de récupérer les sources du paquet.

deb-src http://ftp.fr.debian.org/debian/ jessie main

je vous recommande quand même d'ajouter un pinning pour éviter toute mauvaise manipulation

Package: *
Pin: release o=Debian, a=jessie
Pin-Priority: 490

Puis nous faisons tout d'abord les commandes suivantes

  1. apt-get update
  2. apt-get build-dep opensmtpd
  3. apt-get install debhelper libpam0g-dev devscripts
  • La première ligne permet de prendre en compte la modification du sources.list
  • La deuxième ligne de récupère différent paquet *-dev nécessaire à la recompilation
  • Enfin installation de 3 paquet (et leurs dépendances) nous permettant la création/modification d'un paquet

Ensuite avec votre utilisateur habituel dans un répertoire dédié :

$ apt-get source opensmtpd

Cela vous récupère les sources de OpenSMTPD (pensez à commenter/supprimer les modifications de votre sources.list et preferences) Enfin la commande de compilation

$ fakeroot ./debian/rules binary

Laisser cuire quelques minutes et normalement vous devez obtenir un joli paquet prêt à l'emploi pour votre système. l'installation de ce dernier se fait par un simple

#dpkg -i <mon paquet OpenSMTPD>

Si vous avez une erreur de conflit de « mail-transport-agent » c'est que vous avez Exim ou Postfix ou tout autre MTA encore présent sur votre système, ce qui n'est pas toléré par Debian.

Monter de version

Si vous voulez avoir une version encore plus récente que celle dispo dans Jessie (5.3.3 à l'heure actuelle), la version 5.4.1 par exemple qui apporte le support des bases de données. Pour cela je vous conseil de suivre la précédente méthode pour vous roder puis de récupérer les sources de la version voulue

$wget http://www.opensmtpd.org/archives/opensmtpd-portable-latest.tar.gz
$tar xvzf opensmtpd-portable-latest.tar.gz

Depuis le paquet source de Jessie récupérer le répertoire "debian" et de modifier le fichier "changlog" soit avec la commande suivante

debian/$ dch -n

Soit en l'éditant avec votre éditeur favori et ajouter le bloc suivant

opensmtpd (5.4.1) UNRELEASE; urgency=low
  * Non-maintainer upload.
  * reprise de la version 5.4.1
-- Vous <vous@VotreMachine>  Thu, 01 Jan 2014 01:30:32 +0100

Il est possible que les pachs inclu dans le répertoir «debian» vous soient utile, pour les appliquer il suffit de faire les commandes suivantes : Une première fois pour tester :

$patch -p1 --dry-run<debian/patches/*

Et pour réellement appliquer les patchs :

$patch -p1 <debian/patches/*

Puis il suffit de lancer la compilation

$ fakeroot ./debian/rules binary

Penser a faire cette commande si vous voulez refaire la compilation complète

$ fakeroot ./debian/rules clean

Ou pour refaire juste le .deb

$ fakeroot ./debian/rules binary-deb

Avec cette méthode il se peut que votre MTA ne redémarre pas, cela provient du nouveau fichier de configuration qui n'est pas valide, commentez les lignes incriminées ou configurez le correctement.

Version plus anciennes (Squezee, ...)

Un tutoriel se trouve ici, mais comme ces versions de Debian ne sont plus recommandé je ne traite pas le sujet.

Configuration

smtpd.conf

# This is the smtpd server system-wide configuration file.
# See smtpd.conf(5) for more information.

# To accept external mail, replace with: listen on all
listen on localhost port 10029 tag DKIM

#Si on souhaite ajouter la signature DKIM au mails envoyés
accept tagged DKIM for any relay

# If you edit the file, you have to run "smtpctl update table aliases"
#table aliases file:/etc/mail/aliases

# Fichier contenant les requètes à utiliser
table mytbl postgres:/etc/mail/postgresql.conf

# Uncomment the following to accept external mail for domain "example.org"
#accept from any for domain "example.org" alias <aliases> deliver to mbox

#accept for local alias <aliases> deliver to mbox
# Connection à Dovecot (MDA)
accept for local alias deliver to mda /usr/sbin/dovecot -f -

# On peut relayer a tout le monde
accept for any relay

Backends

Fichiers

C'est la configuration la plus simple et de nombreux tuto et même la doc officiel est largement suffisante pour vous mettre en place cette configuration.

Base de données

ATTENTION Les supports de PostgreSQL, MySQL, SQLite et LDAP n'ont été ajoutés qu'a partir de la version 5.4.1 de OpenSMTPD. De plus pour activer ce support il est nécessaire d'ajouter une des directives suivante dans le fichier debian/rules (a coté des autres "--with-*) avant la compilation/création du package.

--with-experimental-ldap
--with-experimental-mysql
--with-experimental-postgres
--with-experimental-sqlite

De plus pour PostgreSQL la paquet libpq-dev est nécessaire, pour le support ldap, mysql et sqlite je vous laisse trouver le paquet qui va bien.

Sinon vous risquer d'avoir une erreur du type

smtpd: table_create: backend "postgresql" does not exist

Le fichiers de configuration pour une base de donnée est de la forme suivante (à adapter suivant votre BDD) :

#
# Sample PostgreSQL configuration file
#
# This is an example configuration file for using OpenSMTPD with the PostgreSQL
# backend for lookups. OpenSMTPD does not have hardcoded tables and you may
#
#

conninfo		host='127.0.0.1' user='vmailr' password='vmailr@venabulis&27' dbname='smtp'

# Alias lookup query
#
# rows   >= 0
# fields == 1 (user varchar)
#
query_alias                select goto from alias where address=$1;


# Domain lookup query
#
# rows   == 1
# fields == 1 (domain varchar)
#
query_domain                select domain from domain where domain=$1;


# User lookup query
#
# rows   == 1
# fields == 3 (uid int, gid int, directory varchar)
#
query_userinfo                select 500,500,maildir from mailbox where user=$1;


# Credentials lookup query
#
# rows   == 1
# fields == 2 (username varchar, password varchar)
#
query_credentials        select username, password from mailbox where username=$1;


# Netaddr lookup query
#
# rows   == 1
# fields == 1 (netaddr varchar)
#
#query_netaddr        select value from netaddr where value=$1;

Ressources