Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
tuto:fusiondirectory:postfix [02/09/2013 18:18]
dani créée
tuto:fusiondirectory:postfix [07/09/2013 14:08] (Version actuelle)
dani
Ligne 1: Ligne 1:
 ====== Gestion de serveurs postfix ====== ====== 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:+Postfix est un MTA très souple, qui peut être utilisé de beaucoup de façons différentes. 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 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
Ligne 63: Ligne 63:
 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'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
 +{{:tuto:fusiondirectory:mail_conf.png|}}
  
 +  * Sur le serveur de mail, ajouter les services POP/IMAP générique et Postfix
 +{{:tuto:fusiondirectory:mail_services.png|}}
  
 +  * Configurer le service postfix, en y déclarant notamment les domaines que vous gérez en internes
 +{{:tuto:fusiondirectory:mail_postfix.png|}}
 +
 +<note important>Les champs suivants ne sont pas pris en compte par postfix pour l'instant:
 +  * Local Networks
 +  * Max mail header size
 +  * Max mailbox size
 +  * Max message size
 +  * Relay host
 +  * Restrictions for sender
 +  * Restriction for recipient
 +  * Transport (en cours de correction, voir https://forge.fusiondirectory.org/issues/2690)
 +</note>
 ===== Configuration du proxy ===== ===== Configuration du proxy =====
  
-La p+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 interne (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, 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 
 + 
 +<note tip>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</note> 
 + 
 +==== Installation des composants ==== 
 + 
 +<code bash> 
 +yum install amavisd-new postfix cyrus-sasl-ldap cyrus-sasl-ldap saslauthd 
 +</code> 
 + 
 +<note important>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</note> 
 + 
 +==== Configuration de postfix ==== 
 + 
 +  * /etc/postfix/master.cf (dans ce fichier, il faut simplement ajouter le fragment suivant, le reste peut être laissé par défaut. Cette partie est uniquement pour amavisd-new, vous pouvez la sauter si vous ne l'utilisez pas) 
 +<code ini> 
 +[...] 
 +amavisfeed unix    -                    -      2     lmtp 
 +     -o lmtp_data_done_timeout=1200 
 +     -o lmtp_send_xforward_command=yes 
 +     -o disable_dns_lookups=yes 
 +     -o max_use=20 
 +127.0.0.1:10025 inet n    -                       smtpd 
 +     -o content_filter= 
 +     -o smtpd_delay_reject=no 
 +     -o smtpd_client_restrictions=permit_mynetworks,reject 
 +     -o smtpd_helo_restrictions= 
 +     -o smtpd_sender_restrictions= 
 +     -o smtpd_recipient_restrictions=permit_mynetworks,reject 
 +     -o smtpd_data_restrictions=reject_unauth_pipelining 
 +     -o smtpd_end_of_data_restrictions= 
 +     -o smtpd_restriction_classes= 
 +     -o mynetworks=127.0.0.0/
 +     -o smtpd_error_sleep_time=0 
 +     -o smtpd_soft_error_limit=1001 
 +     -o smtpd_hard_error_limit=1000 
 +     -o smtpd_client_connection_count_limit=0 
 +     -o smtpd_client_connection_rate_limit=0 
 +     -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_milters 
 +[...] 
 +</code> 
 +  * /etc/postfix/main.cf 
 +<code ini> 
 +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_unverified_recipient, 
 +    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 
 +</code> 
 + 
 +  * /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) 
 +<code ini> 
 +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] 
 +</code> 
 + 
 +  * /etc/postfix/ldap_domains.cf (ce fichier est utilisé pour récupérer la liste des domaines gérés par les serveurs internes) 
 +<code ini> 
 +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 
 +</code> 
 + 
 +  * /etc/postfix/ldap_recipients.cf (ce fichier est utilisé pour récupérer la liste des adresses mails valides) 
 +<code ini> 
 +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)(objectClass=mailAliasRedirection)(objectClass=mailAliasDistribution))(|(mail=%s)(gosaMailAlternateAddress=%s))) 
 +result_attribute = gosaMailServer,gosaMailAlternateAddress 
 +</code> 
 + 
 +<note important>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: 
 +<code> 
 +chown :postfix /etc/postfix/ldap_*.cf 
 +chmod 640 /etc/postfix/ldap_.cf 
 +</code> 
 +</note> 
 + 
 +==== Configuration de l'authentification ==== 
 +Postfix va utiliser le démon saslauthd pour authentifier les utilisateurs. Ce démon saslauthd vérifiera les identifications sur l'annuaire LDAP 
 +  * /etc/sysconfig/saslauthd 
 +<code ini> 
 +# Directory in which to place saslauthd's listening socket, pid file, and so 
 +# on.  This directory must already exist. 
 +SOCKETDIR=/var/run/saslauthd 
 + 
 +# Mechanism to use when checking passwords.  Run "saslauthd -v" to get a list 
 +# of which mechanism your installation was compiled with the ablity to use. 
 +MECH=ldap 
 + 
 +# Options sent to the saslauthd. If the MECH is other than "pam" uncomment the next line. 
 +DAEMONOPTS="--user saslauth" 
 + 
 +# Additional flags to pass to saslauthd on the command line.  See saslauthd(8) 
 +# for the list of accepted flags. 
 +FLAGS="-O /etc/saslauthd.conf" 
 +</code> 
 + 
 +  * /etc/saslauthd.conf 
 +<code ini> 
 +ldap_servers: ldap://ldap.firewall-services.com 
 +ldap_search_base: ou=people,dc=firewall-services,dc=com 
 +ldap_filter: (&(uid=%u)(objectClass=gosaMailAccount)) 
 +ldap_bind_dn: cn=mail,ou=DSA,dc=firewall-services,dc=com 
 +ldap_bind_pw: dsa_p@ssw0rd 
 +ldap_start_tls: yes 
 +ldap_auth_method: bind 
 +ldap_version:
 +</code> 
 + 
 +On peut maintenant démarrer les services saslauthd et  postfix 
 +===== Configuration du serveur interne ===== 
 + 
 +==== Installation des composants ==== 
 +On va utiliser dovecot pour la remise des mails dans la boite finale des utilisateurs (via son service LMTP), on l'installe donc maintenant, pour la configuration, vous pouvez regarder [[tuto:fusiondirectory:dovecot|cette page]] 
 + 
 +<code bash> 
 +yum install postfix dovecot 
 +</code> 
 + 
 +==== Configuration de postfix ==== 
 + 
 +  * /etc/postfix/main.cf 
 + 
 +<code ini> 
 +queue_directory = /var/spool/postfix 
 +command_directory = /usr/sbin 
 +daemon_directory = /usr/libexec/postfix 
 +data_directory = /var/lib/postfix 
 + 
 +mail_owner = postfix 
 +myhostname = mail.firewall-services.com 
 +mydomain = mail.firewall-services.com 
 +mydestination = localhost 
 +mynetworks = 10.10.0.0/16 
 + 
 +recipient_delimiter = + 
 + 
 +transport_maps = hash:/etc/postfix/local_transport.cf ldap:/etc/postfix/ldap_transport.cf 
 + 
 +local_recipient_maps = $alias_maps 
 +alias_maps = hash:/etc/aliases, $virtual_alias_maps 
 +alias_database = hash:/etc/aliases 
 + 
 +virtual_mailbox_domains = ldap:/etc/postfix/ldap_domains.cf 
 +virtual_alias_maps = ldap:/etc/postfix/ldap_users.cf, ldap:/etc/postfix/ldap_groups.cf, ldap:/etc/postfix/ldap_alias.cf 
 + 
 +</code> 
 + 
 +  * /etc/postfix/local_transport.cf (règle de traitement des mails locaux, indique à postfix de les remettre à dovecot via le protocole lmtp, dovecot les remettra lui même dans la boite des utilisateurs via son LDA) 
 +<code ini> 
 +mail.firewall-services.com        lmtp:unix:private/dovecot-lmtp 
 +</code> 
 +<note tip>Lancez la commande <code bash>postmap /etc/postfix/local_transport.cf</code>pour créer un fichier exploitable par postfix</note> 
 + 
 +  * /etc/postfix/ldap_transport.cf (recherche des règles de routages contenues dans l'annuaire) 
 +<code ini> 
 +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 = cn=mail,ou=servers,ou=systems,dc=firewall-services,dc=com 
 +query_filter =  (&(objectClass=fdPostfixTransportTable)(fdTransportTableMatch=%s)) 
 +result_attribute = fdTransportTableRule 
 +</code> 
 + 
 +  * /etc/postfix/ldap_users.cf (recherche des adresses utilisateurs) 
 +<code ini> 
 +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 = uid,gosaMailForwardingAddress 
 +</code> 
 + 
 +  * /etc/postfix/ldap_groups.cf (recherche des adresses de groupes) 
 +<code ini> 
 +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 
 +ldap_groupmembers_attribute_type = dn 
 +query_filter =  (&(objectClass=gosaMailAccount)(|(mail=%s)(gosaMailAlternateAddress=%s))) 
 +result_attribute = uid,gosaMailForwardingAddress 
 +special_result_attribute = member 
 +</code> 
 + 
 +  * /etc/postfix/ldap_alias.cf (recherche des adresses alias) 
 +<code ini> 
 +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 
 +timeout = 5 
 +version = 3 
 +start_tls = yes 
 +search_base = dc=firewall-services,dc=com 
 +query_filter =  (&(|(objectClass=mailAliasDistribution)(objectClass=mailAliasRedirection))(mail=%s)) 
 +result_attribute = gosaMailAlternateAddress,gosaMailForwardingAddress 
 +</code> 
 + 
 +  * /etc/postfix/ldap_domains.cf (utilisé pour obtenir la liste des domaines gérés par notre serveur interne) 
 +<code ini> 
 +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 = cn=mail,ou=servers,ou=systems,dc=firewall-services,dc=com 
 +query_filter =  (&(objectClass=fdPostfixServer)(|(postfixMyDomain=%s)(postfixMyDestinations=%s))) 
 +result_attribute = postfixMyDomain,postfixMyDestinations 
 +</code> 
 + 
 + 
 +<note important>Les 5 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: 
 +<code> 
 +chown :postfix /etc/postfix/ldap_*.cf 
 +chmod 640 /etc/postfix/ldap_.cf 
 +</code> 
 +</note> 
 + 
 +Voilà, la partie postfix est terminée, après avoir configuré [[dovecot|dovecot]] vous pourrez tester votre nouvelle installation
  • tuto/fusiondirectory/postfix.1378138706.txt.gz
  • Dernière modification: 02/09/2013 18:18
  • de dani