2e instance de postfix

Il peut parfois être utile d'avoir une 2e instance de postfix (sur une autre IP, pour d'autres domaines, etc…)

Tout ce qui suit est largement inspiré de http://advosys.ca/papers/postfix-instance.html (publié ici avec l'autorisation de l'auteur). Cette page n'est donc pas sous licence CC, vous devez demander la permission de l'auteur initial pour en reproduire tout ou partie (ma contribution est CC-by-sa).

Dans tout ce qui suit <ip2> doit être remplacé par l'ip spécifique à cette 2e instance.

  • On duplique la conf postfix : cp -a /etcv/postfix /etc/postfix2
  • On édite /etc/postfix2/main.cf pour spécifier
myhostname = <host_concerné>
alias_maps = hash:/etc/postfix2/conf.d/aliases
alias_database = hash:/etc/postfix2/conf.d/aliases
myorigin = $myhostname
mydestination = $myhostname, localhost
relayhost = 
mynetworks = <ip2>
# on écoute seulement sur cette ip
inet_interfaces = <ip2>
# spécifique à une 2e instance de postfix
queue_directory = /var/spool/postfix2
config_directory = /etc/postfix2
data_directory = /var/lib/postfix2
# les mails sortants partent via cette ip
smtp_bind_address = <ip2>
# facultatif, pour avoir une "facility" spécifique et pouvoir trier les logs dessus
syslog_facility = local2
syslog_name = postfix2

(vous devez ajouter évidemment toutes les autres directives spécifiques à votre cas de figure, comme pour une configuration postfix "standard")

  • On crée une file d'attente spécifique à cette 2e instance, et le data_directory (sinon on a un message fatal: open lock file /var/lib/postfix/master.lock: unable to set exclusive lock)
# création de la 2e file (en root)
mkdir /var/spool/postfix2
# init
postfix -c /etc/postfix2 check
# si postfix est en chroot, faut ajouter ces rep
for r in etc usr lib; do cp -rp /var/spool/postfix/$r  /var/spool/postfix2/; done;
# le data_directory spécifique
cp -a /var/lib/postfix /var/lib/postfix2
  • il faut préciser au postfix principal (/etc/postfix/main.cf) qu'il y en a un autre qui tourne
alternate_config_directories = /etc/postfix2

Sinon, ça génère dans les logs des :

postfix2/sendmail[XXX]: warning: command "/usr/sbin/postdrop -r" exited with status 1
postfix2/sendmail[XXX]: fatal: user_concerne(id_user): unable to execute /usr/sbin/postdrop -r: Success
  • pour tester, recharger le 1er postfix avec /etc/init.d/postfix reload et lancer cette 2e instance avec postfix -c /etc/postfix2 start (et l'arrêter avec postfix -c /etc/postfix2 stop)
  • script d'init : il faut créer le script d'init qui va bien pour cette 2e instance, cp -a /etc/init.d/postfix /etc/init.d/postfix2, remplacer dedans toutes les références à /etc/postfix par /etc/postfix2 et ajouter à chaque appel de binaire, postfix ou ${DAEMON}, l'option -c /etc/postfix2 ; attention, il faut ajouter cette option avant l'action à faire (start|stop|etc.) )

Pour debian, ça donne /etc/init.d/postfix2 (script simplifié, j'ai pas réussi à faire fonctionner le stop sur la base de /etc/init.d/postfix avec le start-stop-daemon, pas trop cherché non plus…):

#!/bin/sh
PATH=/bin:/usr/bin:/sbin:/usr/sbin
DAEMON=/usr/sbin/postfix
NAME=Postfix2

case "$1" in
    start)  
        echo -n "Starting mail transport agent: Postfix2"
        $DAEMON -c /etc/postfix2 start 2>&1 |
                (grep -v 'starting the Postfix2' 1>&2 || /bin/true)
        echo "."
    ;;

    stop)
        echo -n "Stopping mail transport agent: Postfix2" 
        $DAEMON -c /etc/postfix2 stop 2>&1 |
                (grep -v 'stopping the Postfix2' 1>&2 || /bin/true)
        echo "."
    ;;

    restart)
        $0 stop
        $0 start
    ;;
    *)
        echo "Usage: $0 {start|stop|restart}"                 
        exit 1
    ;;
esac  

exit 0
  • pour que php utilise ce 2e postfix, il suffit de préciser sendmail_path = /usr/sbin/sendmail -t -i -C /etc/postfix2 dans le php.ini concerné (ou dans le vhost apache).
  • pour tester :
echo -e "Subject: Test postfix2\r\n\r\nUn message de test">msg
sudo -u <user_local_qui_peut_poster> /usr/sbin/sendmail -i -C /etc/postfix2 user@example.com <msg
 
linux/howto/postfix2.txt · Dernière modification: 07/12/2008 16:00 par daniel