Configuration de Postfix

De wikilivois
Sauter à la navigation Sauter à 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.

  /etc/postfix/main.cf
transport_maps=hash:/etc/postfix/transport.cf


Exemple de fichier transport:

  /etc/postfix/transport
postfix.org smtp:smtp.free.fr:25


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
  /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


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

  /etc/postfix/virtual
postmaster@livois.com   postmaster


#postmap /etc/postfix/virtual

Mailbox virtuelles

  /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


#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

  /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


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).

  /etc/sasl2/smtpd.conf
pwcheck_method:pwcheck


#/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

  /etc/sasl2/smtpd.conf
pwcheck_method: saslauthd
mech_list: plain login


  /etc/conf.d/saslauthd
SASLAUTHD_OPTS=" -a ldap"


  /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


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

Postfix

Etablir la fonctionnalité SASL support du serveur SMTP:

  /etc/postfix/main.cf
smtpd_sasl_auth_enable = yes


Autoriser les clients authentifiés en SASL d'envoyer des mails via le serveur SMTP:

  /etc/postfix/main.cf
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination


Pour rejeter toutes les connexions SMTP de clients non authentifiés, spécifier "smtpd_delay_reject = yes" :

  /etc/postfix/main.cf
smtpd_client_restrictions = permit_sasl_authenticated, reject


Pour indiquer le login SASL dans les en-têtes de message Received : (Postfix >= 2.3 )

  /etc/postfix/main.cf
smtpd_sasl_authenticated_header = yes


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:

  /etc/postfix/main.cf
broken_sasl_auth_clients = yes


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.

  /etc/postfix/master.cf
submission inet n      -       n       -       -       smtpd
        -o smtpd_etrn_restrictions=reject
        -o smtpd_client_restrictions=permit_sasl_authenticated,reject


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.

  /etc/postfix/main.cf
 smtpd_sender_restrictions = reject_authenticated_sender_login_mismatch


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.

  /etc/postfix/main.cf
##################
# 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

# Create the maildirsize file (Vital for Courier-IMAP)
virtual_create_maildirsize = yes
# I use Courier IMAP compatibles files.
virtual_maildir_extended = yes

# Bounce rather than defer when over quota
virtual_overquota_bounce = yes

# Limits only INBOX part (usefull when # using when you have IMAP users)
virtual_mailbox_limit_inbox = yes


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.