Configuration de Postfix

De wikilivois
Aller à la navigationAller à la recherche

Package Gentoo: Postfix

Tous les fichiers de configuration de postfix se trouvent dans le répertoire /etc/postfix.
Les principaux de fichiers configuration sont :

  • main.cf
  • master.cf

Lancer postfix reload après un changement des fichiers de configuration.

Attention : Ne pas oublier de lancer la commande /usr/bin/newaliases à l’installation de postfix.


Test de l'envoi de mail:

echo Test | mail -s Test christophe_nospam@livois.com

Paramètres primordiaux

http://www.postfix.org/BASIC_CONFIGURATION_README.html

Exemple Explication
myorigin $mydomain Le nom de domaine des mails « outbound »
mydestination livois.com Noms de domaines acceptés pour les mails entrants.

A noter qu'il ne faut pas indiquer les domaines virtuels.

mynetworks 127.0.0.1, 192.168.x.0/24 Réseau de confiance des utilisateurs qui peuvent utiliser le serveur smtp
relayhost smtp.free.fr , rien passerelle vers laquelle relayer les mails (indirect delivery) ou rien (direct delivery)
relay_domains livois.net autorise de relayer pour des domaines destinations

Autres paramètres :

myhostname ok par défaut Nom FQDN du serveur SMTP
mydomain ok par défaut Le nom de domaine internet du serveur mail. Par défaut, cela correspond à $myhostname moins la première partie. $mydomain est utilisée comme valeur par défaut pour un grand nombre de paramètres.

Attention : afin d'éviter les boucles perpétuelles il faut lister tous les hostnamesde la machine, notamment $myhostname, et localhost.$mydomain.

La gestion des adresses

Canonical address mapping (canonical_maps)
Address masquerading (masquerade_domains)
Virtual address aliasing (virtual_alias_maps)

Mail transport switch

Destination matches Default delivery agent Controlling parameter
$mydestination ou $inet_interfaces local $local_transport
$virtual_mailbox_domains virtual $virtual_transport
$relay_domains relay $relay_transport
none smtp $default_transport

Si la table transport est activée, elle prend le pas sur la table par défaut.

<licode file=/etc/postfix/main.cf> transport_maps=hash:/etc/postfix/transport.cf </licode>

Exemple de fichier transport: <licode file=/etc/postfix/transport> postfix.org smtp:smtp.free.fr:25 </licode>

L'exemple suivant transfère tous les mails postfix.org vers le serveur smtp de free. cf http://www.postfix.org/transport.5.html

Ne pas oublier de « postmapper » le fichier: #postmap /etc/postfix/transport.cf

Relocated users table (utilisateurs ou domaines qui n’existent plus)
Alias database
alias_maps=hash:/etc/aliases
alias_database=hash:/etc/aliases
Redirection de mail (fichier .forward dans le home du user pour les redirections de mail)
Utilisateurs inexistants Par défaut le message est renvoyé à l’expéditeur sinon voir luser_relay.

Comptes virtuels et multi-domaines

http://www.postfix.org/VIRTUAL_README.html

Postfix peut servir à héberger :

  • des domaines qui ne sont pas directement associés au serveur lui-même
  • un MX de backup pour d'autres domaines, il ne sert pas de destination finale dans ce cas là.

L'utilisation de domaines virtuels a les avantages suivants:

  • les mails info@domaine1.net et info@domaine2.net arrivent à des endroits différents
  • l'utilisation de base plus adaptées (mysql ou ldap) pour un grand nombre de comptes
  • l'utilisation d'une adresse catchall
  • la creation de comptes mails sans comptes systèmes

2 concepts différents:

  • les alias virtuels
  • les mailbox virtuelles

<licode file=/etc/postfix/main.cf> virtual_alias_domains = livois.com, info.test virtual_alias_maps = hash:/etc/postfix/virtual virtual_mailbox_base = /home/vmail virtual_mailbox_domains = info.test livois.com virtual_mailbox_maps = hash:/etc/postfix/vmailbox virtual_minimum_uid = 104 virtual_uid_maps = static:104 virtual_gid_maps = static:104 mydestination = $myhostname, localhost.$mydomain, localhost </licode>

Attention: La variable « mydestination » ne doit pas contenir l'information des domaines virtuels.

Création de l'utilisateur vmail

#groupadd -g 104 vmail
#useradd -u 104 -g 104 -c "Virtual Mail user" -s /bin/false -d /home vmail
#mkdir -p /home/vmail/livois.com
#chown 104:104 /home/vmail/livois.com

Les boîtes aux lettres mails seront crées dans /home/vmail/livois.com

Alias virtuels

<licode file=/etc/postfix/virtual> postmaster@livois.com postmaster </licode>

#postmap /etc/postfix/virtual

Mailbox virtuelles

<licode file=/etc/postfix/vmailbox> info@test.com info.test/info chris@test.com info.test/chris clem@livois.com livois.com/clem chris@livois.com livois.com/chris @livois.com livois.com/chris </licode>

#postmap /etc/postfix/vmailbox

Vérification

#postmap -q info@example.com hash:/etc/postfix/virtual
#postmap -q info@example.com ldap:/etc/postfix/virtual.cf

Configuration LDAP

Prérequis – configuration de LDAP
Editer /etc/openldap/slapd.conf (cf doc Linux & LDAP)

Editer main.cf

<licode file=/etc/postfix/main.cf> ldap_server_host = localhost ldap_search_base = o=hebergement,dc=livois,dc=com

domains_server_host = $ldap_server_host domains_search_base = $ldap_search_base domains_query_filter =(&(objectClass=VirtualDomain)(vd=%s)(accountActive=TRUE)(delete=FALSE)) domains_result_attribute = vd domains_bind = no domains_scope = one

aliases_server_host = $ldap_server_host aliases_search_base = $ldap_search_base aliases_query_filter = (&(objectClass=VirtualMailAlias)(mail=%s)(accountActive=TRUE)) aliases_result_attribute = maildrop aliases_bind = no

accounts_server_host = $ldap_server_host accounts_search_base = $ldap_search_base accounts_query_filter = (&(objectClass=VirtualMailAccount)(mail=%s)(accountActive=TRUE)(delete=FALSE)) accounts_result_attribute = mailbox accounts_bind = no

accountsmap_server_host = $ldap_server_host accountsmap_search_base = $ldap_search_base accountsmap_query_filter = (&(objectClass=VirtualMailAccount)(mail=%s)(accountActive=TRUE)(delete=FALSE)) accountsmap_result_attribute = mail accountsmap_bind = no

virtual_alias_maps = ldap:accountsmap, ldap:aliases virtual_mailbox_base = /home/vmail virtual_mailbox_domains = ldap:domains virtual_mailbox_maps = ldap:accounts virtual_minimum_uid = 104 virtual_uid_maps = static:104 virtual_gid_maps = static:104 </licode>

Configuration SASL

http://en.wikipedia.org/wiki/SASL

http://www.postfix.org/SASL_README.html#server_sasl

http://www.bortzmeyer.org/postfix-sasl.html

SASL veut dire Simple Authentication and Security layer. Il permet au serveur smtp de demander un login et un mot de passe. Cela rend donc possible d'ouvrir le serveur smtp à une communauté sans que le serveur soit un relai ouvert. Ainsi, si les destinataires des mails d'un domaine (ex: les utilisateurs avec un mail en @livois.com) utilisent le même serveur smtp (ce que rend possible sasl), il devient possible de configurer le SPF pour diminuer le spam.

Package Gentoo: postfix +sasl, cyrus-sasl

Cyrus SASL

Authentification pwcheck

Cette authentification s'appuie sur le fichier /etc/passwd (et /etc/shadow). <licode file=/etc/sasl2/smtpd.conf> pwcheck_method:pwcheck </licode>

#/etc/init.d/pwcheck start

Authentification LDAP

http://www.asyd.net/docs/sasl.html

(http://www.bind9.net/manual/openldap/2.2/sasl.html)

Package Gentoo: openldap +sasl

<licode file=/etc/sasl2/smtpd.conf> pwcheck_method: saslauthd mech_list: plain login </licode>

<licode file=/etc/conf.d/saslauthd> SASLAUTHD_OPTS=" -a ldap" </licode>

<licode file=/etc/saslauthd.conf> ldap_servers: ldap://ldap.livois.com/ ldap_search_base: o=hebergement,dc=livois,dc=com ldap_timeout: 10 ldap_filter: uid=%u </licode>

#/etc/init/saslauthd start
#rc-update add saslauthd default

Postfix

Etablir la fonctionnalité SASL support du serveur SMTP: <licode file=/etc/postfix/main.cf> smtpd_sasl_auth_enable = yes </licode>

Autoriser les clients authentifiés en SASL d'envoyer des mails via le serveur SMTP: <licode file=/etc/postfix/main.cf> smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination </licode>

Pour rejeter toutes les connexions SMTP de clients non authentifiés, spécifier "smtpd_delay_reject = yes" : <licode file=/etc/postfix/main.cf> smtpd_client_restrictions = permit_sasl_authenticated, reject </licode>

Pour indiquer le login SASL dans les en-têtes de message Received : (Postfix >= 2.3 ) <licode file=/etc/postfix/main.cf> smtpd_sasl_authenticated_header = yes </licode>

Note: les logins SASL seront alors visibles par tous le monde.

Older Microsoft SMTP client software implements a non-standard version of the AUTH protocol syntax, and expects that the SMTP server replies to EHLO with "250 AUTH=stuff" instead of "250 AUTH stuff". To accommodate such clients (in addition to conformant clients) use the following:

<licode file=/etc/postfix/main.cf> broken_sasl_auth_clients = yes </licode>

Sasl est particulièrement intéressant si utilisé avec une politique SPF. Pour permettre à ses utilisateurs de se connecter de nombreux endroits au serveur smtp, il est judicieux d'ouvrir le port 587 (submission). En effet , certains endroits filtrent le port 25.

<licode file=/etc/postfix/master.cf> submission inet n - n - - smtpd

       -o smtpd_etrn_restrictions=reject
       -o smtpd_client_restrictions=permit_sasl_authenticated,reject

</licode>

Attention, ne pas oublier de paramétrer les firewalls en conséquence!

Correspondance entre utilisateur et adresse source

LM85

smtpd_sender_login_maps= table de correspondance adresse source / utilisateur

Pour rendre effective l'interdiction d'envoyer du courrier si la correspondance n'est pas établie, il faut créer une restriction sur les adresses d'expédition. <licode file = /etc/postfix/main.cf>

smtpd_sender_restrictions = reject_authenticated_sender_login_mismatch

</licode>

Tester la configuration

Tester saslauthd

testsaslauthd -u christophe -p mypass
 
0: OK "Success."

Tester l'authentification SASL avec Postfix

#telnet smtp.livois.com 
   220 smtp.livois.com ESMTP Postfix
   EHLO smtp.livois.com
   250-smtp.livois.com
   250-PIPELINING
   250-SIZE 10240000
   250-ETRN
   250-AUTH DIGEST-MD5 PLAIN CRAM-MD5
   250 8BITMIME
   AUTH PLAIN dGVzdAB0ZXN0AHRlc3RwYXNz
   235 Authentication successful

Remplacer dGVzdAB0ZXN0AHRlc3RwYXNz, par le code base64 encoded de username\0username\0password (the \0 est le bit null).

Les commandes suivantes peuvent être utiles pour génerer le code en base64 :

   #printf 'username\0username\0password' | mmencode 
   #perl -MMIME::Base64 -e 'print encode_base64("username\0username\0password");'

The mmencode command is part of the metamail software. MIME::Base64 is available from http://www.cpan.org/.

Caution: when posting logs of the SASL negotiations to public lists, please keep in mind that username/password information is trivial to recover from the base64-encoded form.

Aller plus loin avec Postfix

Filtrage Postfix

(cf chapitre sur le filtrage)

Gestion des quotas

VDA

http://web.onda.com.br/nadal/

VDA (Virtual Delivery Agent) est un patch pour postfix qui à l'agent « virtual » de gérer les quotas.

Remarque gentoo: rajouter vda dans la variable USE. Par exemple, rajouter la ligne "mail-mta/postfix vda" dans /etc/portage/package.use et recompiler postfix.

<licode file=/etc/postfix/main.cf>

  1. quota avec vda #

quota_server_host = $ldap_server_host quota_search_base = $ldap_search_base quota_query_filter = (&(objectClass=VirtualMailAccount)(mail=%s)(accountActive=TRUE)(delete=FALSE)) quota_result_attribute = quota quota_bind = no

virtual_mailbox_limit_maps = ldap:quota virtual_mailbox_limit_override = yes

  1. Create the maildirsize file (Vital for Courier-IMAP)

virtual_create_maildirsize = yes

  1. I use Courier IMAP compatibles files.

virtual_maildir_extended = yes

  1. Bounce rather than defer when over quota

virtual_overquota_bounce = yes

  1. Limits only INBOX part (usefull when # using when you have IMAP users)

virtual_mailbox_limit_inbox = yes </licode>

Des explications des champs sont disponibles sur http://www.oav.net/vda/VIRTUAL_README.txt.

Pour aller plus loin: la taille de la boite utilisateur devrait être visible sur phamm.

Notifier les utilisateurs

http://puuhis.net/vhcs/quota.txt

Contrôle des ressources

Variable Valeur par défaut Explication
message_size_limit 1024 00 000o Taille de message max (10Mo)
queue_minfree 0 Le serveur n’accept pas de distribuer le courier quand il n’y a plus d’espace disque suffisant.
bounce_size_limit 50 000o Part d’un message non envoyé qui est renvoyé à l’expéditeur.
duplicate_filter_limit 1000 Nombre d’adresses de destination max pour un message
command_time_limit 1000s Temps que peut attendre le local delivery agent lorsqu’il envoie un message à une commande externe.
default_destination_recipient_limit 50 nombre de destinataires à la fois (peut être défini par transporteur -relay, virtual, local ...).

Autres paramètres

http://www.postfix.org/BASIC_CONFIGURATION_README.html

Exemple Explication
notify_classes resource, software Envoi un mail au postmaster en cas de problème

Les classes possibles sont: bounce, 2bounce, delay, policy, protocol, ressource, software

proxy_interfaces Lorque le systeme est un MX secondaire
inet_interfaces all virtual.host.tld Les interfaces réseau sur lesquelles postfix est à l’ « écoute »


Copyright

© 2006 Christophe de Livois

Tête de GNU Vous avez l'autorisation de copier, distribuer et/ou modifier ce document suivant les termes de la GNU Free Documentation License, Version 1.2 ou n'importe quelle version ultérieure publiée par la Free Software Foundation; sans section invariante, sans page de garde, sans entête et sans page finale. Pour plus d'informations consulter le site de l'APRIL.