云网牛站
所在位置:首页 > Linux云服务器 > 在Ubuntu上的2个Postfix SMTP服务器之间设置SMTP中继

在Ubuntu上的2个Postfix SMTP服务器之间设置SMTP中继

2019-04-09 10:10:24作者:秦风稿源:云网牛站

本文向您展示如何在Ubuntu上的2个Postfix SMTP服务器之间设置SMTP中继。

 

用例场景

假设有两台服务器:服务器A和服务器B,您已在服务器A上设置了功能齐全的邮件服务器,并将Postfix作为SMTP服务器,您可以使用它直接向收件人发送电子邮件,因为25端口未被阻止。

稍后您使用服务器B来设置网站,该网站需要向用户发送通知电子邮件,您可以在服务器B上设置另一个邮件服务器,但这会浪费时间和硬件资源,更明智的解决方案是在服务器B上安装Postfix SMTP服务器并将其配置为通过服务器A发送电子邮件,服务器A可以将电子邮件从服务器B中继到最终收件人,服务器A已建立其IP信誉,因此您无需为服务器B构建IP信誉。

如果您在自己的Linux服务器上运行WordPress,我建议您按照本文的方法设置Postfix SMTP中继。这样,您就可以摆脱WordPress中的SMTP插件。 WordPress插件会降低您的网站速度,并且它们可能容易受到攻击,例如Easy WP SMTP插件中发现的最新漏洞,允许未经授权的用户修改WordPress选项并执行恶意代码。由于WordPress插件中存在漏洞,我的网站遭到了一次入侵。因此,当我可以使用底层操作系统实现相同的功能时,我可以尽可能多地删除插件。

 

在服务器B上安装Postfix SMTP服务器

首先,让我们使用以下命令在服务器B上安装Postfix SMTP服务器。如果Postfix已在服务器B上运行,则跳过安装Postfix,但仍需要安装libsasl2-modules软件包:

sudo apt install postfix libsasl2-modules

当您看到以下消息时,请按Enter键以选择第二个选项:Internet站点。

在Ubuntu上的2个Postfix SMTP服务器之间设置SMTP中继

接下来,设置系统邮件名称。例如,我输入域名www.linuxbabe.com,请注意,您不应该输入主域名,例如linuxbabe.com,因为这会使服务器B成为您主域名的目的地,这意味着从服务器B为admin@your-domain.com生成的电子邮件将被发送到服务器B本身,而不是服务器A:

在Ubuntu上的2个Postfix SMTP服务器之间设置SMTP中继

在服务器B上安装Postfix SMTP服务器后,让我们配置SMTP中继。

 

Postfix SMTP Relay通过587端口

编辑服务器B上的Postfix主配置文件:

sudo nano /etc/postfix/main.cf

找到以下行:

relayhost =

默认情况下,未设置其值,您需要将服务器A(您的邮件服务器)的主机名设置为中继主机,如下所示:

relayhost = mail.linuxbabe.com:587

然后将以下行添加到此文件的末尾以配置SASL身份验证,我们指定/etc/postfix/sasl_password文件包含用户名和密码:

# outbound relay configurations

smtp_sasl_auth_enable = yes

smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd

smtp_sasl_security_options = noanonymous

smtp_tls_security_level = may

header_size_limit = 4096000

保存并关闭文件,接下来,您应该在邮件服务器上创建一个专用的电子邮件帐户,因此服务器B可以使用此电子邮件帐户通过587端口登录,之后,创建/etc/postfix/sasl_passwd文件:

sudo nano /etc/postfix/sasl_passwd

将SMTP中继主机和SMTP凭据添加到此文件,如下所示,将这些值替换为您自己的邮件服务器的主机名,电子邮件帐户和密码,请注意,电子邮件帐户和密码之间有冒号:

mail.linuxbabe.com:587  account@linuxbabe.com:password

保存并关闭文件,然后使用postmap创建相应的哈希db文件:

sudo postmap /etc/postfix/sasl_passwd

现在你应该有一个文件/etc/postfix/sasl_passwd.db,重新启动Postfix以使更改生效:

sudo systemctl restart postfix

默认情况下,服务器上的任何用户都可以读取sasl_passwd和sasl_passwd.db文件,将权限更改为600,以便只有root可以读取和写入这两个文件:

sudo chmod 0600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db

从现在开始,服务器B上的网站可以使用Postfix发送电子邮件,这些电子邮件将通过您的邮件服务器进行中继。

 

如果您在服务器A上有iRedMail

如果您使用iRedMail(安装及使用iRedMail在Ubuntu 18.04上设置全功能邮件服务器的步骤)在服务器A上设置邮件服务器,则iRedAPD策略守护程序可能会拒绝来自服务器B的电子邮件中继,因为发件人与SMTP身份验证用户名不同,要解决此问题,我们需要将SMTP身份验证用户名添加到允许列表中。

编辑iRedAPD配置文件:

sudo nano /opt/iredapd/settings.py

在文件末尾添加以下行,根据需要替换account@yourdomain.com:

ALLOWED_LOGIN_MISMATCH_SENDERS = ['account@yourdomain.com']

保存并关闭文件,然后重新启动iRedAPD以使更改生效:

sudo systemctl restart iredpad

 

防止服务器B上的垃圾邮件发送者

默认情况下,Postfix SMTP服务器侦听计算机上的所有活动接口,由于服务器B上的Postfix SMTP服务器仅用于向用户发送交易电子邮件,因此我们可以使其仅在localhost上进行侦听,因此不良演员无法向其发送垃圾邮件。

编辑服务器B上的Postfix主配置文件:

sudo nano /etc/postfix/main.cf

找到以下行:

inet_interfaces = all

将其更改为:

inet_interfaces = loopback-only

保存并关闭文件,重新启动Postfix以使更改生效:

sudo systemctl restart postfix

 

设置发件人地址,名称和返回路径

默认情况下,From地址和From名称与用于验证登录的电子邮件帐户相同,返回路径将类似于www-data@postfix-hostname,您可以在Web应用程序中设置自定义发件人地址,来自名称和返回路径。

我们以WordPress为例,您可以在WordPress主题的functions.php文件中添加以下行,以覆盖默认的From地址,From name和return-path,根据需要替换notifications@linuxbabe.com、LinuxBabe为自己的。您应该在邮件服务器上创建发件人电子邮件地址,以防止发送失败:

// Function to change From email address

function wpb_sender_email( $original_email_address ) {

return 'notifications@linuxbabe.com';

}

// Function to change sender name

function wpb_sender_name( $original_email_from ) {

return 'LinuxBabe';

}

// Set return-path the same as From address

function fix_my_email_return_path( $phpmailer ) {

$phpmailer->Sender = $phpmailer->From;

}

// Hooking up our functions to WordPress filters

add_filter( 'wp_mail_from', 'wpb_sender_email' );

add_filter( 'wp_mail_from_name', 'wpb_sender_name' );

add_action( 'phpmailer_init', 'fix_my_email_return_path' );

保存文件,你就完成了。

 

检查电子邮件发件人分数

现在您应该访问https://www.mail-tester.com并从服务器B上的网站发送电子邮件到邮件测试人员地址,检查您的发件人分数,看看SPF,DKIM和DMARC是否会通过,如你所见,我得到了一个完美的分数10/10:

在Ubuntu上的2个Postfix SMTP服务器之间设置SMTP中继

 

如果服务器B上有多个网站

如果您在服务器B上运行多个网站,则需要为每个域名使用不同的中继主机,编辑服务器B上的Postfix主配置文件:

sudo nano /etc/postfix/main.cf

在文件中添加以下行,告诉Postfix我们要为每个发件人域使用不同的中继主机:

sender_dependent_relayhost_maps = hash:/etc/postfix/relay_by_sender

然后创建该文件:

sudo nano /etc/postfix/relay_by_sender

添加如下参数,左侧是发件人域,右侧是邮件服务器的主机名和端口号:

@domain1.com mail.domain1.com:587

@domain2.com mail.domain2.com:587

保存并关闭文件,然后编辑SASL身份验证文件:

sudo nano /etc/postfix/sasl_passwd

添加如下登录信息:

mail.domain1.com account@domain1.com:password

mail.domain2.com account@domain2.com:password

保存并关闭文件,然后创建哈希db文件:

sudo postmap /etc/postfix/relay_by_sender

sudo postmap /etc/postfix/sasl_passwd

重新启动Postfix SMTP服务器以使更改生效:

sudo systemctl restart postfix

从现在开始,来自domain1.com的电子邮件将通过mail.domain1.com进行转发,来自domain2.com的电子邮件将通过mail.domain2.com进行转发,Mail.domain1.com和mail.domain2.com可以指向相同的IP地址,这意味着这两个域名使用的是同一个邮件服务器。

您还可以在不同服务器上为这两个域名托管电子邮件,如果服务器B上有多个WordPress站点,则还应更改WordPress主题中的每个functions.php文件,以设置每个域名的自定义发件人地址和名称。

 

结语

以上就是详细的操作方法了,我希望本文可以帮助您在2个Postfix SMTP服务器之间设置SMTP中继。

 

相关主题

在Ubuntu 18.04系统上安装和配置Postfix作为SMTP服务器

精选文章
热门文章