我们有一个 SMTP 中继(postfix),我们需要根据某些标准动态重写标头:
如果>标题包含x-自定义标头:类型 1
并且如果>至:@customer1.com
重写>从:<[email protected]>
到来自:友好名称<[email protected]>
目前我正在使用 3 个实例后多仅针对一次客户端,对规则集的每个组件都有一个 header_check。
但是由于后缀的限制,您不能在同一个规则中同时对 TO 和 FROM 字段进行标头检查,因此这种方法将为每个规则生成/要求一个新实例。
问题是:我该如何有效地扩展它?有没有更好的方法来格式化/利用标头检查。
或者是否有其他系统可以轻松管理 SMTP 中继中标头重写的高级规则集,比如通过 GUI?
要求是针对至少三个具有多个客户端的 x-custom-headers 制定多条规则。
Postfix 配置: 实例 1
#main.cf instance 1:
...
header_checks = pcre:/etc/postfix/header_checks
multi_instance_wrapper = ${command_directory}/postmulti -p --
multi_instance_enable = yes
multi_instance_directories = /etc/postfix-instance2 /etc/postfix-instance3
...
#header_checks instance 1
/^x-custom-header: type 1/ FILTER smtp:127.0.0.1:10025
#need to add this next /^x-custom-header: type 2/ FILTER smtp:127.0.0.1:10026
#need to add this next /^x-custom-header: type 3/ FILTER smtp:127.0.0.1:10027
实例 2
#master.cf instance 2
127.0.0.1:10025 inet n - n - - smtpd
#main.cf instance 2
...
queue_directory = /var/spool/postfix-instance2
data_directory = /var/lib/postfix-instance2
header_checks = pcre:/etc/postfix-instance2/header_checks
multi_instance_name = postfix-instance2
multi_instance_enable = yes
...
#header_checks instance 2
/^To: (.*)@customer1.com/ FILTER smtp:127.0.0.1:10028
实例 3
#master.cf instance 3
127.0.0.1:10028 inet n - n - - smtpd
#main.cf instance 3
...
queue_directory = /var/spool/postfix-instance3
data_directory = /var/lib/postfix-instance3
header_checks = pcre:/etc/postfix-instance3/header_checks
multi_instance_name = postfix-instance3
multi_instance_enable = yes
...
#header_checks instance 3
^From: (.*?)@mycompany.com/ REPLACE From: Friendly Name <[email protected]>
答案1
我采取了不同的方法后缀管道按照以下一些资源中所建议的脚本:
- https://thecodingmachine.io/triggering-a-php-script-when-your-postfix-server-receives-a-mail
- http://postfix.1071664.n5.nabble.com/Conditional-sender-rewrite-based-on-recipient-address-td93497.html
只是因为我在尝试避免循环时遇到了这个问题:
对于我的默认 postfix 的 master.cf
external unix - n n - - pipe flags=Fq user=mail null_sender= argv=/opt/scripts/external.sh ${recipient} ${domain} ${sender}
我必须添加第二个实例的 main.cf authorized_submit_users = mailuser
,并在 master.cf 中监听单独的端口127.0.0.1:10025 inet n - n - - smtpd
然后我仍然忙于编写 bash 脚本的逻辑,但我想我会使用与这个帖子,但值得注意的是 sendmail 命令使用第二个实例/usr/sbin/sendmail -G -i -t -C /etc/postfix-sender/main.cf