tuto:fusiondirectory:postfix

Ceci est une ancienne révision du document !


Gestion de serveurs postfix

Postfix est un MTA très souple, qui peut être utilisé de beaucoup de façon différente. Il peut utiliser les données d'un annuaire LDAP pour beaucoup de choses. Dans cet exemple, nous allons configurer deux serveurs postfix:

  • Le premier sera installé sur un serveur nommé proxy. Il sera chargé d'accepter les mails qui arrivent de l'extérieur, de vérifier que le domaine est bien géré chez nous, que l'adresse du destinataire est valide, il passera le tout à un filtre antispam et antivirus (via amavis), et remettra ensuite le mail à un serveur interne
  • Le serveur interne sera installé sur un serveur nommé mail. Ce serveur ne sera pas joignable directement depuis l'extérieur. Il remettra les mails à dovecot via le protocole LMTP, pour que dovecot les remette ensuite dans la boite de destination

Il faut installer les plugin systems et mail:

yum install fusiondirectory-plugin-systems fusiondirectory-plugin-mail

Il faut charger les schémas mail-fd et mail-fd-conf.

Créez ensuite un compte mail dans la branche DSA, ajoutez quelques indexes, et des ACL à votre serveur OpenLDAP, par exemple

[...]
include         /etc/openldap/schema/fusiondirectory/mail-fd.schema
include         /etc/openldap/schema/fusiondirectory/mail-fd-conf.schema
[...]
index           gosaMailAlternateAddress,gosaMailForwardingAddress     eq
index           postfixTransportTable                                  eq
index           postfixMyDomain,postfixMyDestinations                  eq
[...]
access to attrs=gidNumber,homeDirectory,uidNumber
       by dn=cn=samba,ou=DSA,dc=firewall-services,dc=com ssf=256 write
       by dn=cn=unix,ou=DSA,dc=firewall-services,dc=com peername.ip="127.0.0.1" read
       by dn=cn=unix,ou=DSA,dc=firewall-services,dc=com peername.ip="[::1]" read
       by dn=cn=unix,ou=DSA,dc=firewall-services,dc=com ssf=256 read
       by dn=cn=mail,ou=DSA,dc=firewall-services,dc=com peername.ip="127.0.0.1" read
       by dn=cn=mail,ou=DSA,dc=firewall-services,dc=com peername.ip="[::1]" read
       by dn=cn=mail,ou=DSA,dc=firewall-services,dc=com ssf=256 read
       by group.exact="cn=admins,ou=Groups,dc=firewall-services,dc=com" peername.ip="127.0.0.1" write
       by group.exact="cn=admins,ou=Groups,dc=firewall-services,dc=com" peername.ip="[::1]" write
       by group.exact="cn=admins,ou=Groups,dc=firewall-services,dc=com" ssf=256 write
       by self read
       by * none
access to attrs=gosaMailQuota,gosaMailServer,gosaMailDeliveryMode,gosaMailAlternateAddress,postfixHeaderSizeLimit,postfixMailboxSizeLimit,postfixMessageSizeLimit,postfixMyDestinations,postfixMyDomain,postfixMyHostname,postfixMyNetworks,postfixRecipientRestrictions,postfixSenderRestrictions,postfixTransportTable
       by dn=cn=mail,ou=DSA,dc=firewall-services,dc=com peername.ip="127.0.0.1" read
       by dn=cn=mail,ou=DSA,dc=firewall-services,dc=com peername.ip="[::1]" read
       by dn=cn=mail,ou=DSA,dc=firewall-services,dc=com ssf=256 read
       by group.exact="cn=admins,ou=Groups,dc=firewall-services,dc=com" peername.ip="127.0.0.1" write
       by group.exact="cn=admins,ou=Groups,dc=firewall-services,dc=com" peername.ip="[::1]" write
       by group.exact="cn=admins,ou=Groups,dc=firewall-services,dc=com" ssf=256 write
       by * none
access to dn.subtree=ou=servers,ou=systems,dc=firewall-services,dc=com filter=(|(objectClass=fdImapServer)(objectClass=fdPostfixServer))
       by dn=cn=mail,ou=DSA,dc=firewall-services,dc=com peername.ip="127.0.0.1" read
       by dn=cn=mail,ou=DSA,dc=firewall-services,dc=com peername.ip="[::1]" read
       by dn=cn=mail,ou=DSA,dc=firewall-services,dc=com ssf=256 read
       by group.exact="cn=admins,ou=Groups,dc=firewall-services,dc=com" peername.ip="127.0.0.1" write
       by group.exact="cn=admins,ou=Groups,dc=firewall-services,dc=com" peername.ip="[::1]" write
       by group.exact="cn=admins,ou=Groups,dc=firewall-services,dc=com" ssf=256 write
       by * none
[...]

Dans l'interface de FusionDirectory, on ne va déclarer un service postfix que sur le serveur de mail interne. Le serveur proxy utilisera la même configuration.

Dans l'ordre il faut:

  • Dans configuration, onglet mail, sélectionner la méthode Générique

  • Sur le serveur de mail, ajouter les services POP/IMAP générique et Postfix

  • Configurer le service postfix, en y déclarant notamment les domaines que vous gérez en internes

Le serveur frontal (le proxy donc) va faire plusieurs choses

  • Vérifier que les mails qu'il reçoit sont bien à destination d'un des domaines gérés par le serveur internes (cette info sera récupérée de façon dynamique dans l'annuaire)
  • Vérifier que l'adresse mail du destinataire existe bien (info aussi récupérée en dynamique dans l'annuaire). Ça ne sert à rien d'accepter un mail si c'est pour que le serveur interne le rejette au final, alors autant faire le tri maintenant
  • Appliquer des filtres de bases (pas de relais pour n'importe qui, vérification des reverses, vérification auprès de plusieurs listes RHSBL/DNSBL etc…)
  • Gérer l'authentification sécurisée des clients qui sont à l'extérieur
  • Passer les mails à une moulinette Antivirus (clamav) et anti-spam (spamassassin) via amavis
  • Pour finir, si le mail à passé toutes ces étapes, il va le transmettre au serveur interne qui gère la boite du destinataire
Il est possible de gérer plusieurs serveurs de mails distincts en interne. le postfix frontal va demander à l'annuaire par quel serveur interne l'adresse mail en question est gérée. Dans cet exemple, il n'y en aura qu'un, mais rien n'empêche d'en avoir d'autres. La sélection du serveur se fait dans l'interface de FusionDirectory, dans l'onglet mail d'un utilisateur ou d'un groupe
yum install amavisd-new postfix
La configuration de clamav, amavisd-new et spamassassin ne sera pas détaillée ici, d'autres tuto sur internet le feront bien mieux que moi. L'important est simplement d'avoir amavisd-new qui écoute sur l'adresse de bouclage port 10024, ce qui est le cas dans sa configuration par défaut
  • /etc/postfix/main.cf
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
 
mail_owner = postfix
myhostname = proxy.firewall-services.com
mydomain = proxy.firewall-services.com
mydestination =
mynetworks = 10.10.0.0/16
 
transport_maps = ldap:/etc/postfix/ldap_transport.cf
 
relay_recipient_maps = ldap:/etc/postfix/ldap_recipients.cf
relay_domains = ldap:/etc/postfix/ldap_domains.cf
 
recipient_delimiter = +
 
smtpd_tls_cert_file = /etc/postfix/ssl/mail.firewall-services.com.crt
smtpd_tls_key_file = /etc/postfix/ssl/mail.firewall-services.com.key
smtpd_tls_security_level = may
 
smtpd_sasl_path = smtpd
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_tls_security_options = noanonymous
smtpd_tls_auth_only = yes
 
smtpd_recipient_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated,
    reject_invalid_hostname,
    reject_non_fqdn_hostname,
    reject_non_fqdn_sender,
    reject_non_fqdn_recipient,
    reject_unknown_sender_domain,
    reject_unknown_recipient_domain,
    reject_unauth_destination,
    reject_unauth_pipelining,
    reject_rbl_client zen.spamhaus.org,
    reject_rbl_client psbl.surriel.com,
    reject_rbl_client dnsbl.sorbs.net,
    reject_rbl_client bl.spamcop.net,
    reject_rbl_client cbl.abuseat.org,
    reject_rbl_client b.barracudacentral.org,
    reject_rbl_client dnsbl-1.uceprotect.net
 
content_filter = amavisfeed:[127.0.0.1]:10024
  • /etc/postfix/ldap_transport.cf (ce fichier est utilisé par postfix pour déterminer vers quel serveur interne on doit router le mail. Dans ce cas, on pourrait faire une configuration statique en pointant sur notre unique serveur interne, mais avec cette configuration, on peut ajouter d'autres serveurs internes sans se soucier d'adapter la configuration du proxy frontal)
server_host = ldap://ldap.firewall-services.com
bind = yes
bind_dn = cn=mail,ou=DSA,dc=firewall-services,dc=com
bind_pw = dsa_p@ssw0rd
version = 3
start_tls = yes
search_base = dc=firewall-services,dc=com
query_filter =  (&(objectClass=gosaMailAccount)(|(mail=%s)(gosaMailAlternateAddress=%s)))
result_attribute = gosaMailServer
result_format = smtp:[%s]
  • /etc/postfix/ldap_domains.cf (ce fichier est utilisé pour récupérer la liste des domaines gérés par les serveurs internes)
server_host = ldap://ldap.firewall-services.com
bind = yes
bind_dn = cn=mail,ou=DSA,dc=firewall-services,dc=com
bind_pw = dsa_p@ssw0rd
version = 3
start_tls = yes
search_base = dc=firewall-services,dc=com
query_filter =  (&(objectClass=fdPostfixServer)(|(postfixMyDomain=%s)(postfixMyDestinations=%s)))
result_attribute = postfixMyDomain,postfixMyDestinations
  • /etc/postfix/ldap_recipients.cf (ce fichier est utilisé pour récupérer la liste des adresses mails valides)
server_host = ldap://ldap.firewall-services.com
bind = yes
bind_dn = cn=mail,ou=DSA,dc=firewall-services,dc=com
bind_pw = dsa_p@ssw0rd
version = 3
start_tls = yes
search_base = dc=firewall-services,dc=com
query_filter = (&(objectClass=gosaMailAccount)(|(mail=%s)(gosaMailAlternateAddress=%s)))
result_attribute = gosaMailServer
Les 3 derniers fichiers contiennent le mot de passe de l'utilisateur cn=mail,ou=DSA,dc=firewall-services,dc=com pensez donc à restreindre les droits d'accès:
chown :postfix /etc/postfix/ldap_*.cf
chmod 640 /etc/postfix/ldap_.cf
  • tuto/fusiondirectory/postfix.1378141154.txt.gz
  • Dernière modification: 02/09/2013 18:59
  • de dani