« OpenSMTPD » : différence entre les versions

De Le Wiki du Forum-Debian.fr
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
Aucun résumé des modifications
 
(7 versions intermédiaires par le même utilisateur non affichées)
Ligne 3 : Ligne 3 :
Ensuite ils ont pour objectif d'en faire un serveur :
Ensuite ils ont pour objectif d'en faire un serveur :
* extrêmement sécurisé
* extrêmement sécurisé
* fiable en toute circonstance (un message reçut devra êter traiter quoi qu'il se passe)
* 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ême mais l'assurance du traitement dans un délai raisonnable)
* 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)
* léger et suffisant pour un usage classique (pas de support de cas particulier)
* simple de configuration
* simple de configuration
Ligne 15 : Ligne 15 :
* MDA = Agent de délivrance des courriels ('''M'''ail '''D'''elivery '''A'''gent) 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.
* MDA = Agent de délivrance des courriels ('''M'''ail '''D'''elivery '''A'''gent) 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 ('''M'''ail '''U'''ser '''A'''gent), c'est voter client de courriel, qu'il soit par interface web (RoundCube, Horde, Hotmail, Gmail, ...) ou en client lourd (Thunderbird, Outlook, Lotus ...).
* MUA = Agent d'utilisation des courriels ('''M'''ail '''U'''ser '''A'''gent), 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 ('''M'''ail '''R'''etrival '''A'''gent), 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 ('''S'''imple '''M'''ail '''T'''ransfert '''P'''rotocol) permet l'envoi et la réception entre MTA des courriels
* SMTP = Protocole simple de transfert de courriel ('''S'''imple '''M'''ail '''T'''ransfert '''P'''rotocol) permet l'envoi et la réception entre MTA des courriels
* POP = Protocole de bureau de poste ('''P'''ost '''O'''ffice '''P'''rotocol) 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.
* POP = Protocole de bureau de poste ('''P'''ost '''O'''ffice '''P'''rotocol) 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 ('''I'''nternet '''M'''essage '''A'''ccess '''P'''rotocol) remplacant du POP il permet d'interagir avec le serveur MDA, les courriers ne sont pas supprimer par défaut et diverses actions sont possible comme la création/modification/suppression/déplacement de dossier et courriels.
* IMAP = Protocole d'accès aux messages d'internet ('''I'''nternet '''M'''essage '''A'''ccess '''P'''rotocol) 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 =
= Installation =
== Jessie==
== Jessie==
Pour cela rien de plus simple un paquet est présent dans les dépots, donc une classique commande d'installation suffit
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
  apt-get install opensmtpd


Ligne 40 : Ligne 41 :


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.
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 [https://github.com/sinecure/OpenSMTPD-deb 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 process de construction.
Il existe [https://github.com/sinecure/OpenSMTPD-deb 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.
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   
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
  deb-src http://ftp.fr.debian.org/debian/ jessie main


je vous recommandes quand même d'ajouter un pinning pour éviter toute mauvaise manipulation
je vous recommande quand même d'ajouter un pinning pour éviter toute mauvaise manipulation
  Package: *
  Package: *
  Pin: release o=Debian, a=jessie
  Pin: release o=Debian, a=jessie
Ligne 53 : Ligne 54 :
# apt-get update
# apt-get update
# apt-get build-dep opensmtpd
# apt-get build-dep opensmtpd
# apt-get install debhelper libpam0g-dev
# apt-get install debhelper libpam0g-dev devscripts


* La première ligne permet de prendre en compte la modification du sources.list
* 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
* La deuxième ligne de récupère différent paquet *-dev nécessaire à la recompilation
* Enfin installation de 2 paquet (et leurs dépendances) nous permettant la création d'un paquet
* 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é :
Ensuite avec votre utilisateur habituel dans un répertoire dédié :
Ligne 69 : Ligne 70 :
  #dpkg -i <mon paquet OpenSMTPD>
  #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 auter MTA encore présent sur votre système, ce qui n'est pas toléré par Debian.
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 ===
=== 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 le précédente méthode pour vous roder puis de récupérer les sources de la version voulue
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
  $wget http://www.opensmtpd.org/archives/opensmtpd-portable-latest.tar.gz
Ligne 80 : Ligne 81 :
  debian/$ dch -n
  debian/$ dch -n


soit en l'éditant avec voter éditeur favori et ajouter le bloc suivant  
Soit en l'éditant avec votre éditeur favori et ajouter le bloc suivant  
<pre>
<pre>
opensmtpd (5.4.1) UNRELEASE; urgency=low
opensmtpd (5.4.1) UNRELEASE; urgency=low
Ligne 87 : Ligne 88 :
-- Vous <vous@VotreMachine>  Thu, 01 Jan 2014 01:30:32 +0100
-- Vous <vous@VotreMachine>  Thu, 01 Jan 2014 01:30:32 +0100
</pre>
</pre>
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  
Puis il suffit de lancer la compilation  
  $ fakeroot ./debian/rules binary
  $ fakeroot ./debian/rules binary
penser a faire cette commande si vous voulez refaire la compilation complète
Penser a faire cette commande si vous voulez refaire la compilation complète
  $ fakeroot ./debian/rules clean
  $ fakeroot ./debian/rules clean
ou pour refaire juste le .deb
Ou pour refaire juste le .deb
  $ fakeroot ./debian/rules binary-deb
  $ fakeroot ./debian/rules binary-deb


Ligne 98 : Ligne 106 :


== Version plus anciennes (Squezee, ...) ==
== Version plus anciennes (Squezee, ...) ==
Un tutoriel se trouve [http://maniatux.fr/index.php?article274/opensmtpd-debian-6-0-squeeze-howto ici], mais come ces version de debian ne sont plus recommandé je ne traite pas le sujet.
Un tutoriel se trouve [http://maniatux.fr/index.php?article274/opensmtpd-debian-6-0-squeeze-howto ici], mais comme ces versions de Debian ne sont plus recommandé je ne traite pas le sujet.


= Configuration =
= Configuration =


== smtpd.conf ==
== smtpd.conf ==
<pre>
# 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
</pre>


== Backends ==
== Backends ==
=== Fichiers ===
=== 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 ===
=== Base de données ===
'''ATTENTION''' Les supports de PostgreSQL, MySQL, SQLite et LDAP n'ont été ajoutés qu'a partir de la version 3.4.1 de OpenSMTPD.
'''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) :
<pre>
#
# 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;
</pre>


= Ressources =
= Ressources =

Dernière version du 9 juin 2014 à 15:41

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