在实际使用邮件系统的时候,我们往往不会仅配置一台邮件服务器。我们往往使用多台MTA,以实现邮件的分流、备份、交换等功能。这一章我们来讨论一下如何搭建一台专门负责分流转发的服务器。
1 环境介绍
我们需要使用两台服务器,一台A运行在防火墙内,一台B运行在防火墙外部。要求所有由其他邮局MTA发往本域的邮件都由B接收,并转发到A服务器并存储;A服务器接受MUA连接,用户将邮件发往A后转发到B并再次转发。正如一个邮箱的“反向代理”。此时服务器B就成为Mail Exchanger,因为其只负责邮件的路由转发。
假设我们的邮箱域名为example.com和abc.com,邮件均保存在服务器A。example.com的MX记录mx.example.com,abc.com的MX记录也是mx.example.com。mx.example.com指向服务器B地址1.2.3.4,服务器B内网地址10.0.0.1,服务器A地址10.0.0.2。
2 实现分析
2.1 安全性分析
- 存储邮件的服务器是A,那么我们最好将发往本域邮件的最后一跳MTA设在A上;
- 服务器B上也需要设置一个MTA,需要转发从外域发往本域的邮件到A服务器,从外域发往外域的邮件不允许转发;
- 服务器B需要接受发自本域的邮件,并进行转发,但是来自公网的、发自本域的邮件不允许转发,因为很可能是伪造的信件。
总的来说,对于收件人规则,允许本域的邮件,或者允许来自10.0.0.2的邮件,其余一律拒绝。当然也可以配置SASL认证,若需要服务器B转发,必须通过SASL认证。
而对于发件人规则,则保持默认全部允许即可。
2.2 转发规则分析
- 服务器B需要转发发往本域的所有邮件,那么需要配置一个列表,列出本域相关的域名以便匹配规则;
- 服务器A需要将所有发出的信件都发往服务器B,那么需要配置relay_host。
3 配置文件
服务器B Postfix配置文件main.cf
# 域名配置
myhostname = mx.example.com
mydestination = local
myorigin = example.com
# 网络安全配置
mynetworks = 10.0.0.2
# 收件人规则
smtpd_recipient_restrictions =
permit_mynetworks,
permit_auth_destination,
reject_unauth_destination,
reject
# 转发域名配置
relay_domains = hash:/etc/postfix/relay_domains
# 发往本域邮件转发规则
transport_maps = hash:/etc/postfix/transport
转发域名列表relay_domains:
example.com #domain
abc.com #domain
这里第二列#domain为注释,是为了防止执行postmap时出现只有一列的警告。
转发规则列表transport:
example.com relay:[10.0.0.2]:25
abc.com relay:[10.0.0.2]:25
服务器B就配置完成了。
服务器A使用正常的搭建邮件服务器的步骤即可,只不过在main.cf中加上一句:
relay_host = 10.0.0.1