Outils pour utilisateurs

Outils du site


linux:postfix (lu 27886 fois)

Différences

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

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
linux:postfix [19-09-2013 12:44] – [Postfix] edmc73linux:postfix [16-10-2025 07:42] (Version actuelle) – [Utiliser notre postfix comme un serveur relay via le port 587 avec authentification] edmc73
Ligne 1: Ligne 1:
 ====== Postfix ====== ====== Postfix ======
  
 +===== Fonctionnement de base juste pour envoyer des mails =====
 +
 +La config **/etc/postfix/main.cf**
 +
 +<code>
 +# See /usr/share/postfix/main.cf.dist for a commented, more complete version
 +
 +
 +# Debian specific:  Specifying a file name will cause the first
 +# line of that file to be used as the name.  The Debian default
 +# is /etc/mailname.
 +#myorigin = /etc/mailname
 +
 +smtpd_banner = $myhostname ESMTP $mail_name (Raspbian)
 +biff = no
 +
 +# appending .domain is the MUA's job.
 +append_dot_mydomain = no
 +
 +# Uncomment the next line to generate "delayed mail" warnings
 +#delay_warning_time = 4h
 +
 +readme_directory = no
 +
 +# See http://www.postfix.org/COMPATIBILITY_README.html -- default to 2 on
 +# fresh installs.
 +compatibility_level = 2
 +
 +
 +
 +# TLS parameters
 +smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
 +smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
 +smtpd_tls_security_level=may
 +
 +smtp_tls_CApath=/etc/ssl/certs
 +smtp_tls_security_level=may
 +smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
 +smtpd_use_tls = yes
 +smtpd_enforce_tls = yes
 +
 +smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
 +myhostname = myserver.edmc73.com
 +alias_maps = hash:/etc/aliases
 +alias_database = hash:/etc/aliases
 +canonical_maps = hash:/etc/postfix/canonical
 +myorigin = /etc/mailname
 +mydestination = $myhostname, myserver.edmc73.com, myserver, localhost.localdomain, localhost
 +relayhost =
 +mynetworks = 127.0.0.0/8
 +mailbox_size_limit = 0
 +recipient_delimiter = +
 +inet_interfaces = 127.0.0.1
 +inet_protocols = all
 +
 +</code>
 +
 +J'ai volontairement désactivé tout ce qui est en rapport avec ipv6 car trop compliqué...
 +
 +J'ai ajouté les options tls et le **canonical_maps**
 +
 +Modifiez vos aliases en ajoutant à la fin du fichier **/etc/aliases**
 +  root: mon@mail.com
 +
 +Puis lancer la commande
 +  newaliases
 +  
 +Créez ou modifiez le fichier **/etc/postfix/canonical**
 +  root@myserver  root@myserver.edmc73.com
 +
 +Puis lancer la commande
 +  postmap /etc/postfix/canonical
 +
 +Relancer Postfix
 +  systemctl restart postfix
 +
 +Tester l'envoi d'un mail
 +  mail -s "test d'un mail" root <<< 'blablabla'
 +
 +Vérifiez dans les log
 +  vi /var/log/mail.log
 +
 +===== Ce qui suit date ! =====
   * http://www.skyminds.net/serveur-dedie-creation-dun-serveur-mail-postfix-securise-avec-saslauthd-et-certificat-ssl-et-courier-acces-pop-et-imap-utilisant-une-base-mysql-dutilisateurs-domaines-virtuels/   * http://www.skyminds.net/serveur-dedie-creation-dun-serveur-mail-postfix-securise-avec-saslauthd-et-certificat-ssl-et-courier-acces-pop-et-imap-utilisant-une-base-mysql-dutilisateurs-domaines-virtuels/
   * http://postfix.traduc.org/index.php/BASIC_CONFIGURATION_README.html#relay_to   * http://postfix.traduc.org/index.php/BASIC_CONFIGURATION_README.html#relay_to
Ligne 6: Ligne 89:
  
 Un super site en français => http://x.guimard.free.fr/postfix/ Un super site en français => http://x.guimard.free.fr/postfix/
 +
 +A voir pour le return-path => https://community.ovhcloud.com/community/fr/postfix-un-return-path-valide-pour-chaque-nom-de-domaine?id=community_question&sys_id=bee1bd8cb51a0ad0f078da7e5576c9ca
 ===== Configuration ===== ===== Configuration =====
  
Ligne 84: Ligne 169:
 On relis la config On relis la config
   service postfix reload   service postfix reload
 +
 +==== mailname ====
 +
 +Le fichier **/etc/mailname** contient le nom de domaine par défaut qui sera inscrit après l'@. Pour qu'il soit pris en compte, la ligne suivante doit se trouver dans votre **main.cf**
 +  myorigin = /etc/mailname
  
 ===== Commandes ===== ===== Commandes =====
Ligne 172: Ligne 262:
  
 Les mails se stockent tout de même en queue, mais la file se vide ensuite relativement rapidement  Les mails se stockent tout de même en queue, mais la file se vide ensuite relativement rapidement 
 +
 +===== Statistiques =====
 +
 +https://www.zabbix.com/wiki/howto/monitor/mail/postfix/monitoringpostfix
 +
 +Ce lien explique comment superviser postfix avec zabbix mais on peut découvrir aussi le script **pflogsumm.pl** qui permet de ressortir des stats.
 +
 +===== DKIM =====
 +
 +Ajouter une signature DKIM à vos emails sortant => http://blog.tjitjing.com/index.php/2012/03/guide-to-install-opendkim-for-multiple-domains-with-postfix-and-debian.html
 +
 +Un autre tuto très bien détaillé => http://lea-linux.org/documentations/DKIM_SPF_Postfix
 +
 +
 +===== SSL / TLS =====
 +
 +Ajouter un certificat SSL valide et configurer le TLS.
 +
 +Utilisons [[linux:ssl|letsencrypt]] pour récupérer un certificat.
 +
 +Créez en 1er une config apache qui permet d'accéder à http://mail.domain.tld pour permettre de valider que le nom de domaine vous appartient.
 +
 +  ./cert-auto certonly --rsa-key-size 4096 -d mail.domain.tld --email admin@domain.tld
 +
 +Bon, je l'avais déjà lancé donc il me demande si je veux le recréer mais vous devrez avoir quelque chose de similaire.
 +<code>
 +Saving debug log to /var/log/letsencrypt/letsencrypt.log
 +Cert not yet due for renewal
 +
 +You have an existing certificate that has exactly the same domains or certificate name you requested and isn't close to expiry.
 +(ref: /etc/letsencrypt/renewal/mail.domain.tld.conf)
 +
 +What would you like to do?
 +-------------------------------------------------------------------------------
 +1: Attempt to reinstall this existing certificate
 +2: Renew & replace the cert (limit ~5 per 7 days)
 +-------------------------------------------------------------------------------
 +Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 1
 +Keeping the existing certificate
 +Created an SSL vhost at /etc/apache2/sites-available/mail.domain.tld-le-ssl.conf
 +Deploying Certificate to VirtualHost /etc/apache2/sites-available/mail.domain.tld-le-ssl.conf
 +Enabling available site: /etc/apache2/sites-available/mail.domain.tld-le-ssl.conf
 +
 +Please choose whether HTTPS access is required or optional.
 +-------------------------------------------------------------------------------
 +1: Easy - Allow both HTTP and HTTPS access to these sites
 +2: Secure - Make all requests redirect to secure HTTPS access
 +-------------------------------------------------------------------------------
 +Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
 +Redirecting vhost in /etc/apache2/sites-available/mail.domain.tld.conf to ssl vhost in /etc/apache2/sites-available/mail.domain.tld-le-ssl.conf
 +
 +-------------------------------------------------------------------------------
 +Congratulations! You have successfully enabled https://mail.domain.tld
 +
 +You should test your configuration at:
 +https://www.ssllabs.com/ssltest/analyze.html?d=mail.domain.tld
 +-------------------------------------------------------------------------------
 +</code>
 +On peut voir ici que certbot modifie votre fichier de conf apache et crée une nouvelle config apache pour **-le-ssl.conf**, il reload apache tout seul.
 +
 +Maintenant ajoutez le code suivant dans votre **main.cf**
 +<code>
 +# logging
 +smtpd_tls_loglevel = 1
 +# Allow use of TLS but make it optional
 +smtp_use_tls=yes
 +# Disable SSLv2/3 as they are vulnerable
 +smtpd_tls_protocols = !SSLv2, !SSLv3
 +smtp_tls_protocols = !SSLv2, !SSLv3
 +# Insist on stronger ciphers
 +smtpd_tls_ciphers = high
 +smtp_tls_ciphers = high
 +# keys
 +smtp_tls_cert_file = /etc/letsencrypt/live/mail.domain.tld/fullchain.pem
 +smtp_tls_key_file = /etc/letsencrypt/live/mail.domain.tld/privkey.pem
 +</code>
 +Restartez votre postfix
 +  service postfix restart
 +
 +et voila :)
 +  * doc plus poussé => http://donnlee.com/2016/11/27/postfix-smtp-configuration-sending-relay-email-to-gmail-and-other-internet-mail-servers/
 +
 +===== Recevoir des mails directement dans une petite interface web de consultation uniquement =====
 +
 +Concrètement, imagine j'envoie des mails de mon site toto.com avec l'adresse noreply@toto.com mais j'aimerais recevoir les mails de retour dans le cas de mailinblack ou autre
 +
 +Installer **maildev** -> https://wiki.edmc73.com/devweb/maildev qui écoutera sur le port 1025 et fournira une interface web sur le port 1080
 +
 +Je commence par ajouter une entrée DNS de type MX
 +  toto.com IN MX 10 mon_serveur_smtp.com
 +
 +J'ajoute dans mon fichier **/etc/postfix/transport** (ou je le crée s'il n'existe pas)
 +  noreply@toto.com smtp:localhost:1025
 +
 +On hash le fichier
 +  postmap /etc/postfix/transport
 +
 +On modifie le fichier **/etc/postfix/main.cf**
 +<code>
 +# prise en compte du fichier de transport
 +transport_maps = hash:/etc/postfix/transport
 +
 +# on dit que si un mail vient de ce domaine, on ne cherche pas un user en local, on utilise le fichier de transport pour savoir ce qu'on en fait
 +relay_domains = toto.com
 +</code>
 +
 +On restart postfix
 +  systemctl restart postfix
 +
 +On consulte le journal en temps réel
 +  journactl -xef -u postfix*
 +
 +Et voila, on recevra directement dans maildev les mails adressés à noreply@toto.com !
 +
 +===== Utiliser notre postfix comme un serveur relay via le port 587 avec authentification =====
 +
 +Dans l'exemple, je veux faire au plus simple, créer un seul utilisateur qui pourra s'authentifier sur mon serveur postfix pour envoyer des mails depuis un autre serveur.
 +
 +Le port 587 est géré par le service "submission" dans Postfix. Il doit être activé (décommenté) dans /etc/postfix/master.cf.
 +
 +<code>
 +submission inet n                               smtpd
 +  -o syslog_name=postfix/submission
 +  -o smtpd_tls_security_level=encrypt
 +  -o smtpd_sasl_auth_enable=yes
 +</code>
 +
 +Configuration dans **/etc/postfix/main.cf**
 +<code>
 +# --- Paramètres SASL (avec Cyrus) ---
 +smtpd_sasl_auth_enable = yes
 +smtpd_sasl_security_options = noanonymous
 +smtpd_sasl_local_domain = $myhostname
 +# Indique à Postfix d'utiliser saslauthd, le démon d'authentification de Cyrus
 +smtpd_sasl_type = cyrus
 +# Chemin vers le fichier de configuration de l'authentificateur
 +smtpd_sasl_path = smtpd
 +
 +# --- Paramètres TLS (toujours obligatoires) ---
 +smtpd_use_tls = yes
 +smtpd_tls_security_level = encrypt
 +smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
 +smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key
 +</code>
 +
 +Vous devez dire à l'authentificateur Cyrus SASL comment vérifier les mots de passe. Pour cela, on crée un fichier de configuration pour le service smtpd de Postfix.
 +
 +Créez le fichier **/etc/postfix/sasl/smtpd.conf** (le répertoire n'existe peut-être pas) :
 +
 +  mkdir /etc/postfix/sasl
 +  vi /etc/postfix/sasl/smtpd.conf
 +
 +Ajoutez le contenu suivant :
 +
 +  pwcheck_method: auxprop
 +  auxprop_plugin: sasldb
 +  mech_list: plain login
 +
 +''pwcheck_method: auxprop'' : Indique d'utiliser une méthode auxiliaire.  \\
 +''auxprop_plugin: sasldb'' : Précise que cette méthode est une base de données SASL.
 +
 +Maintenant pour générer le fichier de mot de passe utilisé par l'authentificateur Cyrus SASL, il va falloir installer le paquet suivant pour avoir la commande **saslpasswd2**
 +
 +Debian
 +  apt install sasl2-bin
 +Red Hat
 +  dnf install cyrus-sasl-plain
 +
 +L'installation crée un fichier de base de donnée **/etc/sasldb2**
 +
 +Créer un utilisateur
 +  saslpasswd2 -c -u toto.com toto
 +Saisissez ensuite le mot de passe. Ceci créera un utilisateur toto@toto.com
 +
 +Mettre à jour le mot de passe
 +  saslpasswd2 -u toto.com toto
 +Supprimer l'utilisateur
 +  saslpasswd2 -d -u toto.com toto
 +Lister les utilisateurs
 +  sasldblistusers2
 +
 +Afin que postfix puisse lire le fichier **/etc/sasldb2**, il faut ajouter l'utilisateur postfix au group sasl
 +  adduser postfix sasl
 +  systemctl restart postfix
 +
 +On vérifie 
 +<code>
 +ss -tlpn | grep 587
 +LISTEN 0      100          0.0.0.0:587       0.0.0.0:   users:(("master",pid=1512221,fd=18))
 +</code>
 +
 +Dernière étape, comme postfix tourne en chroot (à vérifier dans master.cf) \\
 +Modifier le fichier **/etc/default/saslauthd**
 +<code>
 +# Example for chroot Postfix users: "-c -m /var/spool/postfix/var/run/saslauthd"
 +# Example for non-chroot Postfix users: "-c -m /var/run/saslauthd"
 +#
 +# To know if your Postfix is running chroot, check /etc/postfix/master.cf.
 +# If it has the line "smtp inet n - y - - smtpd" or "smtp inet n - - - - smtpd"
 +# then your Postfix is running in a chroot.
 +# If it has the line "smtp inet n - n - - smtpd" then your Postfix is NOT
 +# running in a chroot.
 +OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"
 +</code>
 +
 +Postfix ne pourra pas lire non plus le fichier /etc/sasldb2, il faut le copier dans 
 +  cp /etc/sasldb2 /var/spool/postfix/etc/.
 +  chmod 640 /var/spool/postfix/etc/sasldb2
 +  chown root:sasl /var/spool/postfix/etc/sasldb2
 +  systemctl restart postfix
 +
 +Jusque là, tout semble fonctionner, il faut maintenant configurer les DNS, SPF etc... pour éviter ce genre de problème
 +<code>
 +(host gmail-smtp-in.l.google.com[66.102.1.27] said: 
 +550-5.7.26 Your email has been blocked because the sender is unauthenticated. 
 +550-5.7.26 Gmail requires all senders to authenticate with either SPF or DKIM. 
 +550-5.7.26  
 +550-5.7.26  Authentication results: 
 +550-5.7.26  DKIM = did not pass 
 +550-5.7.26  SPF [toto.com] with ip: [55.55.55.55] = did not pass 
 +550-5.7.26  
 +550-5.7.26  For instructions on setting up authentication, go to 
 +550 5.7.26  https://support.google.com/mail/answer/81126#authentication 5b1f17b1804b1-4711442a2e6si2499275e9.31 - gsmtp (in reply to end of DATA command))
 +</code>
linux/postfix.1379594697.txt.gz · Dernière modification : de edmc73