Table des matières

Autres manips postfix

Postfix en MX secondaire

Par rapport à une install de base, il faut juste préciser dans main.cf

# on est mx2, relay vers mx1
relayhost = IP.mx1
smtpd_recipient_restrictions = permit_mynetworks reject_unauth_destination
relay_recipient_maps = hash:/etc/postfix/relay_recipient_maps.hash

Le fichier relay_recipient_maps.hash contient toutes les adresses pour lesquelles on accepte le courrier, sous la forme

user@domaine.tld OK
user2@domaine.tld OK

On peut mettre n'importe quoi à la place du OK, il faut juste un 2e champ pour la table de hash

Générer automatiquement relay_recipient_maps sur le primaire

Pour mettre à jour automatiquement cette liste depuis le primaire (c'est lui qui a la liste des users), on créé ce petit script (sur le primaire donc)

#!/bin/bash
echo "Ce script génère /etc/postfix/relay_recipient_maps.hash"
echo "à partir de /etc/postfix/virtual_mailbox_maps.hash et /etc/postfix/virtual_alias_maps.hash"
echo "Puis essaye de le transférer sur mx2"
awk '/@/ {print $1 " OK"}' < /etc/postfix/virtual_mailbox_maps.hash > /etc/postfix/relay_recipient_maps.hash
awk '/@/ {print $1 " OK"}' < /etc/postfix/virtual_alias_maps.hash >> /etc/postfix/relay_recipient_maps.hash
postmap /etc/postfix/relay_recipient_maps.hash
echo "On essaie de copier /etc/postfix/relay_recipient_maps.hash.db sur MX2"
echo "En cas d'échec, vous devrez le faire manuellement"
scp /etc/postfix/relay_recipient_maps.hash.db mx1@mx2:/etc/postfix/relay_recipient_maps.hash.db

Et pour que ça marche (le primaire doit pouvoir modifier ce fichier), sur le secondaire, on créé un user (unix) mx1 :

postfix_gid=$(awk -F : '/postfix/ {print $4}'< /etc/passwd)
useradd -b /etc/postfix -d /etc/postfix -g $postfix_gid -N mx1
mkdir /etc/postfix/.ssh
touch /etc/postfix/.ssh/authorized_keys2
chgrp -R postfix /etc/postfix/.ssh
chgrp postfix relay_recipient_maps.hash.db
chmod 664 relay_recipient_maps.hash.db

Reste à mettre la clé ssh de root@ns1 dans /etc/postfix/.ssh/authorized_keys2 (sur ns2 donc), et à recharger le postfix de ns2 (incron qui tourne sur ns2 et qui surveille ce fichier peut s'en charger).

Relai avec authentification

Ce qui suit ne marche pas, en attente de correction (pb auth).

D'après http://wingloon.com/2008/06/21/setup-relay-host-port-and-smtp-authentication-client-in-postfix/

Sur le postfix “relai”, on active “smtps” (sur le port 465) en décommentant dans master.cf

smtps inet n       -       -       -       -       smtpd
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject

Sur le postfix client, dans le main.cf

# notre relai
relayhost = mail.example.com:587
# avec authentification sasl
smtp_sasl_auth_enable = yes
# via tls
smtp_sasl_mechanism_filter = login
# liste de users/pass par host
smtp_sasl_password_maps = hash:/etc/postfix/conf.d/smtp_sasl_password_maps.hash

puis

# on met le user/pass (connu du relai) dans le fichier
echo "mail.example.com mon_user@example.com:mon_pass" > /etc/postfix/conf.d/smtp_sasl_password_maps.hash
postmap /etc/postfix/conf.d/smtp_sasl_password_maps.hash

Postfix minimal

Pour avoir juste un smtp qui envoie vers l'extérieur (et traite les messages systèmes)

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myhostname = <host fqdn>
mydestination = $myhostname, localhost
myorigin = $myhostname
relayhost = 
mynetworks = 127.0.0.0/8
inet_interfaces = loopback-only
recipient_delimiter = +

et ensuite, mettre dans /etc/aliases un mail externe pour root et les autres users (bizarre, je me rappelle avoir dû passer par un virtual_alias_maps pour associer user_local@hostname_fqdn à mon mail_perso@mon_vrai_domaine, parce que l'on ne pouvait mettre que des users locaux dans ce fichier, mais là ça marche…)