Outils pour utilisateurs

Outils du site


linux:postfix (lu 27956 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 [22-04-2014 06:52] 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 179: Ligne 269:
 Ce lien explique comment superviser postfix avec zabbix mais on peut découvrir aussi le script **pflogsumm.pl** qui permet de ressortir des stats. 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.1398149530.txt.gz · Dernière modification : de edmc73