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
相关产品推荐
相关产品推荐

