本文向您展示如何在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站点。
接下来,设置系统邮件名称。例如,我输入域名www.linuxbabe.com,请注意,您不应该输入主域名,例如linuxbabe.com,因为这会使服务器B成为您主域名的目的地,这意味着从服务器B为admin@your-domain.com生成的电子邮件将被发送到服务器B本身,而不是服务器A:
在服务器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:
如果服务器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中继。
相关主题 |