Table des matières

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 !

Un super site en français ⇒ http://x.guimard.free.fr/postfix/

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 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 :)