====== Postfix ====== ===== Fonctionnement de base juste pour envoyer des mails ===== La config **/etc/postfix/main.cf** # 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 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://postfix.traduc.org/index.php/BASIC_CONFIGURATION_README.html#relay_to * http://www.system-linux.eu/index.php?post/2009/01/27/Traitement-de-Queue-mail-Postfix#dotpoll8 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 ===== Au départ voici les fichiers que vous avez :/etc/postfix]# ls dynamicmaps.cf main.cf master.cf postfix-files postfix-script post-install sasl Au final vous aurez :/etc/postfix]# ls dynamicmaps.cf generic generic.db main.cf master.cf postfix-files postfix-script post-install sasl transport transport.db ==== dynamicmaps.cf ==== :!: Je ne l'utilise pas pour l'instant ==== generic et generic.db ==== Permet de renommer l'adresse email de l'expéditeur. Par exemple root@edmc73.com system@edmc73.com www-data@edmc73.com webmaster@edmc73.com Les mails envoyés par l'utilisateur local www-data auront comme adresse webmaster@... Ajouter dans le fichier de conf **/etc/postfix/main.cf** smtp_generic_maps = hash:/etc/postfix/generic Exemple de fichier **/etc/postfix/generic** his@localdomain.local hisaccount@hisisp.example her@localdomain.local heraccount@herisp.example @localdomain.local hisaccount+local@hisisp.example Ne pas oublier d'exécuter la commande suivante afin de regénérer le fichier generic.db utilisé par postfix postmap /etc/postfix/generic Et de recharger la config de postfix service postfix reload ==== main.cf ==== **main.cf** est le fichier de configuration principal. ==== master.cf ==== Rien à faire de spécial ==== postfix-files, postfix-script et post-install ==== Ne pas toucher ==== sasl ==== Sert à sécuriser le SMTP. Assez compliqué, plus d'info => http://postfix.traduc.org/index.php/SASL_README.html ==== transport et transport.db ==== Typiquement, on utilise la table transport(5) pour envoyer du courrier à un système non connecté à Internet, ou pour utiliser une configuration de client SMTP particulière pour des destinations ayant des conditions spéciales. Dans le cas des mails envoyés vers orange et wanadoo, il faut ralentir le trafic sous peine d'être bloqué. On renseignera le fichier **transport** comme suit wanadoo.com slow: wanadoo.fr slow: orange.com slow: orange.fr slow: suivi de la commande postmap transport On rajoutera à la fin du fichier **master.cf** #========================================================================== # service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (100) #========================================================================== slow unix - - n - 5 smtp -o syslog_name=postfix-slow -o smtp_destination_concurrency_limit=3 -o slow_destination_rate_delay=1 Puis ceci dans le fichier **main.cf** transport_maps = hash:/etc/postfix/transport slow_destination_recipient_limit = 20 slow_destination_concurrency_limit = 2 On relis la config 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 ===== Voir la queue mailq Avoir le nombre de mail en queue mailq | tail -1 | awk '{print $5}' Lister les messages en Queue : postqueue -p Résultats : -Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient------- DBB3F1A7 553 Mon May 5 14:42:15 titi@example.com (connect to mail.pouet.com[195.58.15.78]: Connection refused) titi@pouet.com Supprimer un message en Queue : postsuper -d DBB3F1A7 Supprimer tous les messages en Queue : postsuper -d ALL Pour supprimer des messages en masse en fonction de l'adresse source ou destination, utilisez le script PFDEL Scripts pour supprimer des emails de la queue postfix. Mettre un messages en attente (hold) : postsuper -h DBA3F1A7 Remettre un messages en mode normale (actif) : postsuper -H DBA3F1A7 Remettre en Queue un message : postsuper -r DBA3F1A7 Pour tous les messages : postsuper -r ALL Afficher le contenu d'un message : postcat -q DBA3F1A9 Forcer l'envoie des messages en Queue (flush) : postqueue -f Pour forcer l'envoie de messages spécifique à un domaine non présent dans les paramètres relay_domains de la configuration Postfix : Ajouter cette ligne dans le fichier main.cf : fast_flush_domains = $relay_domains ledomaine.fr Ensuite taper cette commande : postqueue -s example.com ===== Problème avec Wanadoo Orange ===== http://michauko.org/blog/ralentir-le-debit-de-postfix-pour-wanadooorange-1302/ DÉTAILS DE LA SOLUTION : TRANSPORT SPÉCIFIQUE POUR ORANGE/WANADOO vi /etc/postfix/transport wanadoo.com slow: wanadoo.fr slow: orange.com slow: orange.fr slow: puis postmap /etc/postfix/transport vi /etc/postfix/master.cf #========================================================================== # service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (100) #========================================================================== slow unix - - n - 5 smtp -o syslog_name=postfix-slow -o smtp_destination_concurrency_limit=3 -o slow_destination_rate_delay=1 vi /etc/postfix/main.cf transport_maps = hash:/etc/postfix/transport slow_destination_recipient_limit = 20 slow_destination_concurrency_limit = 2 et finalement : /etc/init.d/postfix reload 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. 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 ------------------------------------------------------------------------------- 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** # 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 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** # 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 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. submission inet n - y - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes Configuration dans **/etc/postfix/main.cf** # --- 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 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 ss -tlpn | grep 587 LISTEN 0 100 0.0.0.0:587 0.0.0.0:* users:(("master",pid=1512221,fd=18)) Dernière étape, comme postfix tourne en chroot (à vérifier dans master.cf) \\ Modifier le fichier **/etc/default/saslauthd** # 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" 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 (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))