10-09

Postfix, spécifier une IP différente en fonction du domaine de l'émetteur

Si vous utilisez Postfix et que vous souhaitez spécifier plusieurs IP sources pour vos emails en fonction de l'émetteur de l'email, vous pouvez utiliser le paramètre de configuration sender_dependent_default_transport_maps. Ce paramètre va vous permettre, en fonction de l'émetteur de l'email sur votre serveur de spécifier une IP précise. Pour cela, nous allons utiliser une map utilisant un regexp, et la fonction smtp_bind_address de Postfix. smtp_bind_addresssmtp Il faut d'abord créer une nouvelle map. Les 2 domaines que j'ai à router sur des IPs différentes seront admin-serv.net ainsi que aserv.eu. Le fichier sdd_transport_maps.regexp
cd /etc/postfix/
nano sdd_transport_maps.regexp
Insérez les lignes correspondantes à votre domaine:
/@admin-serv\.net$/      adminserv_net:
/@aserv\.eu$/      aserv_eu:
Maintenant, dans notre master.cf, nous allons créer des nouvelles routes.
nano /etc/postfix/master.cf
adminserv_net   unix -       -       n       -       -       smtp
	   -o smtp_bind_address=IP1
	   -o smtp_helo_name=admin-serv.net
	   -o syslog_name=postfix-adminserv_net
aserv_eu   unix -       -       n       -       -       smtp
	   -o smtp_bind_address=IP2
	   -o smtp_helo_name=aserv.eu
	   -o syslog_name=postfix-aserv_eu
Note: Vous pouvez aussi en profiter pour binder une IPv6 à l'aide du paramètre smtp_bind_address6 de postfix. Maintenant, nous allons modifier le fichier main.cf pour ajouter notre fichier de map.
nano /etc/postfix/main.cf
sender_dependent_default_transport_maps = regexp:/etc/postfix/sdd_transport_maps.regexp
Il ne nous reste plus qu'à relancer Postfix
# Un reload a semblé fonctionner chez moi, n'hésitez pas à faire un restart
/etc/init.d/postfix reload

 

 

6 Commentaires pour ce billet.

 

 

  1. Bravo pour cet article très clair !

    Je l'ai mis en place sur un serveur personnel (qui utilise 2 interfaces réseau), et ça fonctionne à merveille.

    /@blog.domain.tld\.net$/ eth0:
    /@domain.tld\.eu$/ eth1:

    Par contre, je me suis aperçu de quelque chose:
    J'ai aussi la configuration:
    http://www.zapoyok.info/2011/01/01/orangewanadoo-et-%C2%AB-too-many-connections-slow-down-ofr004_104-104-%C2%BB/
    Dans mon master.cf, ce qui me permet de ralentir les envois consécutifs destinés à Orange / Wanadoo.

    Ainsi, lorsque "*@domain.tld" émet vers Orange / Wanadoo, c'est sur eth0 qu'il sort !
    Il semblerais que les 2 réglages ne se combinent pas.
    Est ce qu'il y a un moyen de les combiner ? Je pensais a rediriger le service "slow:" vers le service "relay:" afin de réinjecter les emails, pour que le sender soit re-analysé, et qu'ils partent avec la bonne interface ..

    Merci par avance ;)

  2. Bonjour Adrien.

    En effet j'ai le même soucis que toi. Et la doc le dis bien, le transport écrase le sdd_transport...
    J'ai fait de nombreux tests en plaçant les clés de configuration à divers endroits, malheureusement rien n'est passé.

    A noter que pour Orange, j'utilise :

    default_destination_concurrency_limit = 1

    Et ça fonctionne parfaitement.

    En revanche, le problème que tu soulèves est en effet très dommage/bizarre, peut-être qu'un fix sera proposé dans les prochaines versions de postfix.

    A lookup result of DUNNO terminates the search without overriding the global default_transport parameter setting.

  3. Avec le paramètre "default_transport = eth0" dans le main.cf, les emails qui rentrent dans le cadre du "slow:" utilisent encore l'autre service "eth1:" !

    Comme si lorsque le service slow est utilisé, il surcharge "sdd_transport" et "default_transport" ..

    Quoiqu'il en soit, c'est étrange de ne pas pouvoir cumuler les deux, étant donné qu'ils filtrent des zones différentes (recipient d'un coté et sdd de l'autre)

    En fin de compte: tout ça à cause d'orange une fois de plus ! >_

  4. Je viens de remarquer: l'heure des commentaires est en GMT, il manque 2 heures (GMT +1 pour la France, et +1 encore pour l'heure d'hiver) :o)

  5. @Adrien : Merci ;)
    Faut que je regarde ça.

  6. Bonjour et merci pour cet explication! Malheureusement pour ma part ça ne fonctionne pas, j'ai pourtant bien tout suivi mais peut être que ma configuration nécessite quelque chose? J'utilise un dédié avec debian squeeze, j'ai plusieurs ip failover configuré ainsi
    post-up /sbin/ifconfig eth0:0 IP.DE.FAIL.OVER netmask 255.255.255.255 broadcast IP.DE.FAIL.OVER
    post-down /sbin/ifconfig eth0:0 down
    post-up /sbin/ifconfig eth0:1 IP.DE.FAIL.OVER1 netmask 255.255.255.255 broadcast IP.DE.FAIL.OVER1
    post-down /sbin/ifconfig eth0:1 down
    Après avoir effectué les modifications que vous avez indiqué, ca ne change rien, dans les entete des email cela indique toujours l'adresse du serveur au lieux de l'adresse indiqué selon le domaine utilisé... quand vous indiqué d'ajouter des lignes dans certain fichier, je le fait toujours en bas du fichier, devrais-je le faire en haut? En tout les cas, merci de partager vos découverte ;)

 

Votre commentaire