Configuration de Postfix
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
Gestion des quotas
VDA
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>
- 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 </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
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. |