You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Postfix中继Exchange 2016时,配置domain2用户全局映射后无法发送外部邮件的问题求助

Postfix中继Exchange 2016时,配置domain2用户全局映射后无法发送外部邮件的问题求助

大家好,我是Postfix的新手,目前搭建了一台Postfix服务器用来中继邮件到Exchange 2016服务器,目标是让所有domain2的用户都能通过这台Postfix发邮件,但现在遇到了问题,想请各位帮忙排查下。

之前正常运行的环境与配置

我的本地域是domain1.com(Active Directory域),domain2是外部邮件域,此前Postfix配置能正常工作,核心配置如下:

[root@srv-relayhost ~]# postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
compatibility_level = 2
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 2
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5
header_size_limit = 409600
html_directory = no
inet_interfaces = all
inet_protocols = all
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
meta_directory = /etc/postfix
mydomain = domain1.com
myhostname = srv-relayhost.domain1.com
mynetworks = xx.xx.xx.xx/32, yy.yy.yy.yy/32, zz.zz.zz.zz/32, 127.0.0.0/8
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix/README_FILES
relay_domains = $mydestination
relayhost = xx.xx.xx.xx
sample_directory = /usr/share/doc/postfix/samples
sender_canonical_classes = envelope_sender, header_sender
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
shlib_directory = /usr/lib64/postfix
smtp_generic_maps = pcre:/etc/postfix/generic.pcre
smtp_header_checks = regexp:/etc/postfix/header_check
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt
smtp_tls_CApath = /etc/pki/tls/certs
smtp_tls_security_level = may
smtpd_tls_cert_file = /etc/pki/tls/certs/postfix.pem
smtpd_tls_key_file = /etc/pki/tls/private/postfix.key
smtpd_tls_security_level = may
unknown_local_recipient_reject_code = 550
  • SASL认证配置文件sasl_passwd:
xx.xx.xx.xx postfix_relayhost@domain1.com:mypasswd
  • 发件人重写配置generic.pcre初始内容:
/root@test.domain1.com/ postfix_relayhost@domain2.com
/srv_wsus@domain2.com/ postfix_relayhost@domain2.com
/copieur@domain2.com/ postfix_relayhost@domain2.com
  • 邮件头重写配置header_check:
/^From: srv_wsus@domain2.com/ REPLACE From: "srv"
/^From: copieur@domain2.com/ REPLACE From: "copieur"
/^From:[[:space:]]+(.*)/ REPLACE From: "${1}"

此前用以下两个测试命令都能正常收到邮件:

# 发送到外部domain2域
echo | mutt -s "OK" -e 'my_hdr From: SAVE_SWITCHS <xx@server.domain1.com>'  -- user@domain2.com
# 发送到内部domain1域
echo | mutt -s "OK" -e 'my_hdr From: SAVE_SWITCHS <xx@server.domain1.com>'  -- user@domain1.com

出现问题的场景

我想实现所有domain2域的用户都映射到postfix_relayhost@domain2.com,于是在generic.pcre末尾添加了一行:

/.*@domain2.com/ postfix_relayhost@domain2.com

结果出现异常:只有发送到domain1域的邮件能正常接收,发送到domain2域的邮件完全收不到。

我怀疑是正则表达式的问题,又写了脚本从AD批量导出用户邮箱地址,添加到generic.pcre中:

rm -f /tmp/mail
ldapsearch -H ldap://xxxx -x -D 'user@domain1.com' -w 'pass' -b 'dc=domain1,dc=com' -s sub "(&(objectCategory=person)(objectClass=user)(sAMAccountName=*))" mail | grep "mail:" | cut -d " " -f 2 > /tmp/mail

while read LIGNE
do
cat /etc/postfix/generic.pcre | grep $LIGNE
if [ $? == 1 ]
then
echo "/$LIGNE/ postfix_relayhost@domain2.com" >> /etc/postfix/generic.pcre
fi
done < /tmp/mail

rm -f /tmp/mail
postmap /etc/postfix/generic.pcre
service postfix restart

但问题依旧,只有发往domain1的邮件正常,发往domain2的邮件无法投递。我确认user@domain2.com已经在generic.pcre中有映射,只要删除这条全局映射,所有邮件又能正常发送了。

补充说明:user@domain2.com是Exchange服务器上的有效邮箱地址。

想请教各位,怎么才能让所有domain2域的用户都通过Postfix中继发送邮件,同时不影响邮件的正常投递呢?谢谢大家!

备注:内容来源于stack exchange,提问作者Alex Lum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 11:04:30