在Ubuntu 18.04、16.04、20.04上为多个域设置Postfix仅发送SMTP服务器

在本文中,我将向您展示如何在Ubuntu 20.04、18.04、16.04上将Postfix设置为仅发送SMTP服务器。 我将首先向您展示如何针对单个域执行此操作,然后根据需要将步骤应用于多个域。

用例

您有一个网站/ Web应用程序,需要将交易电子邮件发送给用户(例如密码重置电子邮件)。 最有可能的是,用户无需回复这些电子邮件,或者如果他们回复了,则回复电子邮件将发送到您的专用邮件服务器。 在这种情况下,您可以使用流行的SMTP服务器软件Postfix在Web服务器上设置仅发送SMTP服务器。

先决条件

为了从您的服务器发送电子邮件,必须打开端口25(出站)。 许多ISP和托管公司(例如DigitalOcean)阻止端口25来控制垃圾邮件。 我建议使用Hostwinds,因为它不会阻塞端口25(出站)。 拥有Hostwinds服务器后,在其上安装Ubuntu并按照以下说明进行操作。

实际上,为多个域设置Postfix仅发送SMTP服务器并不困难。 首先,我们需要为一个域配置它,然后为多个域设置它。

步骤1:设置主机名和PTR记录

默认情况下,Postfix在与其他SMTP服务器通信时使用服务器的主机名来标识自己。 如果您的主机名无效,某些SMTP服务器将拒绝您的电子邮件。 您应按如下所示设置标准域名(FQDN)。

sudo hostnamectl set-hostname www.linuxbabe.com

要检查服务器的主机名,请运行

hostname -f

您需要注销并重新登录,以在命令提示符下查看主机名更改。 该主机名应具有指向服务器IP地址的DNS A记录。

另外,您需要设置一个PTR记录(又名指针记录),该记录将IP地址映射到FQDN。 它是A记录的对应项。 如果您服务器的IP地址没有PTR记录,许多SMTP服务器将拒绝您的电子邮件。

因为您是从托管服务提供商或ISP获取IP地址,而不是从域名注册商获取IP地址,所以必须在托管服务提供商的控制面板中为IP设置PTR记录,或者询问您的ISP。 例如,在Hostwinds中,您可以通过点击 Domains 标签,然后点击 Manage rDNS 链接。 尽管可以将PTR记录设置为任何主机名,但为了最佳实践,您应该使用刚刚设置的FQDN。

要查看您的PTR记录是否设置正确,请运行以下命令。 用您自己的IP地址替换12.34.56.78。

host 12.34.56.78

请注意,如果您的服务器使用IPv6地址,则最好为FQDN添加AAAA记录,并为IPv6地址设置PTR记录。

步骤2:在Ubuntu上安装Postfix

运行以下命令从默认的Ubuntu存储库安装Postfix。

sudo apt-get update

sudo apt-get install postfix -y

系统将要求您选择邮件服务器配置类型。 按Tab键,然后按Enter。

在下一个屏幕中,按Enter键选择默认选项: Internet Site

postfix仅发送ubuntu

接下来,输入系统邮件名称的域名,即@符号后的域名。

后缀仅发送多个域

步骤3:在Postfix中禁用接收电子邮件

默认情况下,Postfix SMTP服务器在计算机上的所有活动接口上进行侦听。 由于Postfix SMTP服务器仅用于向用户发送事务性电子邮件,因此我们可以使它仅在本地主机上侦听,因此不良行为者无法向其发送垃圾邮件。

编辑Postfix主配置文件。

sudo nano /etc/postfix/main.cf

找到以下行。

inet_interfaces = all

更改为:

inet_interfaces = loopback-only

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

sudo systemctl restart postfix

步骤4:安装和配置OpenDKIM

DKIM代表DomainKeys Identified Mail。 您可以在服务器上安装OpenDKIM,并使用它使用私钥将签名添加到从您的域发送的电子邮件中。 接收SMTP服务器使用您在DNS中发布的相应公钥来验证签名。 如果您希望电子邮件进入收件人的收件箱,则必须添加DKIM签名。

首先从默认的Ubuntu存储库安装OpenDKIM。

sudo apt-get install opendkim opendkim-tools

然后加 postfix 用户 opendkim 组。

sudo adduser postfix opendkim

编辑OpenDKIM主配置文件。

sudo nano /etc/opendkim.conf

找到以下几行。

#Canonicalization     simple
#Mode                 sv
#SubDomains           no

取消注释并更换 simplerelaxed/simple。 从改变模式 svs,因为没有入站电子邮件来验证签名。

Canonicalization     relaxed/simple
Mode                 s
SubDomains           no

在此文件的末尾添加以下行。 (在Ubuntu 18.04上,用户ID已设置为 opendkim

#OpenDKIM user
# Remember to add user postfix to group opendkim
UserID             opendkim

# Map domains in From addresses to keys used to sign messages
KeyTable           refile:/etc/opendkim/key.table
SigningTable       refile:/etc/opendkim/signing.table

# A set of internal hosts whose mail should be signed
InternalHosts       /etc/opendkim/trusted.hosts

保存并关闭文件。

创建签名表,密钥表和可信主机文件

为OpenDKIM创建目录结构。

sudo mkdir /etc/opendkim

sudo mkdir /etc/opendkim/keys

更改所有者 rootopendkim 并确保只 opendkim 用户可以读写密钥目录。

sudo chown -R opendkim:opendkim /etc/opendkim

sudo chmod go-rw /etc/opendkim/keys

创建签名表。

sudo nano /etc/opendkim/signing.table

将以下行添加到文件中。 这意味着,如果 From: 电子邮件中的标题包含 example.com,然后使用 sendonly DKIM选择器。 你可以改变 sendonly 首选DKIM选择器名称,并且在DNS中应该是唯一的。

*@example.com     sendonly._domainkey.example.com

保存并关闭文件。 然后创建密钥表。

sudo nano /etc/opendkim/key.table

添加以下行。 这意味着对于sendonly DKIM选择器,请使用保存在 /etc/opendkim/keys/example.com/sendonly.private 签署电子邮件。

sendonly._domainkey.example.com    example.com:sendonly:/etc/opendkim/keys/example.com/sendonly.private

保存并关闭文件。 接下来,创建受信任的主机文件。

sudo nano /etc/opendkim/trusted.hosts

将以下行添加到新创建的文件中。

127.0.0.1
localhost

*.example.com

以上意味着来自上述IP地址和域的消息将被信任和签名。

生成私钥/公钥对

我们需要生成一个私钥来签署外发电子邮件,并生成一个公钥来接收SMTP服务器以验证DKIM签名。 公钥将在DNS中发布。

为域创建一个单独的文件夹。

sudo mkdir /etc/opendkim/keys/example.com

使用生成密钥 opendkim-genkey 工具。

sudo opendkim-genkey -b 2048 -d example.com -D /etc/opendkim/keys/example.com -s sendonly -v

上面的命令将创建2048位密钥。 -d (domain) 指定域。 -D (directory) 指定将存储密钥的目录,我们使用 sendonly 作为 selector (-s)。 执行命令后,私钥将保存在 sendonly.privatesendonly.txt 将是包含公钥的TXT记录。

使 opendkim 作为私钥的所有者。

sudo chown opendkim:opendkim /etc/opendkim/keys/example.com/sendonly.private

在DNS记录中添加公钥

显示公钥

sudo cat /etc/opendkim/keys/example.com/sendonly.txt

后面的字符串 p 参数是公钥。 在您的DNS管理器中,为第二个域创建TXT记录。 输入 sendonly._domainkey 在名称字段中。 复制括号中的所有内容并将其粘贴到value字段中。 删除所有双引号。 (您可以先将其粘贴到文本编辑器中,删除所有双引号,然后将其复制到DNS管理器中。DNS管理器可能会要求您删除其他无效字符,例如回车。)

后缀仅发送DKIM

DNS记录发布后,在Ubuntu服务器上输入以下命令以测试密钥。

sudo opendkim-testkey -d example.com -s sendonly -vvv

如果一切正常,您会看到

key OK

如果你看到 key not secure 消息,不要惊慌。 这是因为未在您的域名上启用DNSSEC。

步骤5:将Postfix与OpenDKIM连接

Postfix可以通过Unix套接字文件与OpenDKIM对话。 OpenDKIM使用的默认套接字文件是 /var/run/opendkim/opendkim.sock,如图所示 /etc/opendkim.conf 文件。 但是Ubuntu随附的postfix SMTP守护程序在chroot监狱中运行,这意味着SMTP守护程序解析相对于Postfix队列目录的所有文件名(/var/spool/postfix)。 因此,我们需要更改套接字文件。

编辑OpenDKIM主配置文件。

sudo nano /etc/opendkim.conf

找到以下行:

Socket local:/var/run/opendkim/opendkim.sock

将其替换为以下行。 (如果找不到上面的行,请添加下面的行。)

Socket local:/var/spool/postfix/opendkim/opendkim.sock

创建一个目录来保存OpenDKIM套接字文件,并仅允许opendkim用户和postfix组访问它。

sudo mkdir /var/spool/postfix/opendkim

sudo chown opendkim:postfix /var/spool/postfix/opendkim

如果可以在下面找到以下行 /etc/default/opendkim 文件。

SOCKET="local:/var/run/opendkim/opendkim.sock"

要么

SOCKET=local:$RUNDIR/opendkim.sock

更改为

SOCKET="local:/var/spool/postfix/opendkim/opendkim.sock"

之后,我们需要编辑Postfix主要配置文件。

sudo nano /etc/postfix/main.cf

在此文件的末尾添加以下行以将Postfix与OpenDKIM连接。

# Milter configuration
milter_default_action = accept
milter_protocol = 6
smtpd_milters = local:opendkim/opendkim.sock
non_smtpd_milters = $smtpd_milters

保存并关闭文件。 重新启动OpenDKIM和Postfix。

sudo systemctl restart opendkim postfix

如果重新启动失败,OpenDKIM将不会产生任何消息。 运行以下命令以检查其状态。 确保它正在运行。

systemctl status opendkim

步骤6:创建SPF DNS记录

防晒指数 (发件人策略框架)记录指定允许哪些主机或IP地址代表域发送电子邮件。 在您的DNS管理界面中,创建一个新的TXT记录,如下所示。 使用您自己的服务器的IPv4地址和IPv6地址。

TXT  @   v=spf1 mx ip4:12.34.56.78 ip6:2600:3c01::f03c:93d8:f2c6:78ad ~all

步骤7:设置发件人地址,发件人姓名和返回路径

您可以在网站/ Web应用程序中设置自定义发件人地址,发件人名称和返回路径。 让我们以WordPress为例。 您可以在WordPress主题的 functions.php 文件以覆盖默认的发件人地址,发件人名称和返回路径。 根据需要替换红色文本。

// Function to change From email address
function wpb_sender_email( $original_email_address ) {
    return '[email protected]';
}

// 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' );

保存文件,您就完成了。

步骤8:为外发电子邮件启用TLS加密

默认情况下,Postfix在发送外发电子邮件时不使用TLS加密。 要启用TLS加密,请打开 /etc/postfix/main.cf 文件,并在此文件末尾添加以下两行。

smtp_tls_security_level = may
smtp_tls_loglevel = 1

第一行为Postfix SMTP客户端启用TLS加密。 第二行将TLS连接记录在 /var/log/mail.log 文件,以便您可以检查TLS加密是否正常工作。 保存并关闭文件。 重新启动Postfix,以使更改生效。

sudo systemctl restart postfix

由于Postfix不接收传入的电子邮件,因此无需为Postfix SMTP守护程序配置有效的TLS证书。

步骤9:测试寄件者分数

现在去 https://www.mail-tester.com。 您将看到一个唯一的电子邮件地址。 从您的Postfix SMTP服务器上的网站向该地址发送电子邮件,然后检查您的分数。 如您所见,我得到了满分。 在测试结果中,您应该检查您的PTR记录,SPF和DKIM记录是否有效。

电子邮件服务器信誉不佳dkim

您也可以打开 /var/log/mail.log 文件以检查是否使用TLS加密。 例如,以下行显示到mail-tester.com的连接已加密。

Anonymous TLS connection established to mail-tester.com[94.23.206.89]:25: TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)

如果您的电子邮件仍然被标记为垃圾邮件怎么办?

在本文中,我为您提供了有关电子邮件可传递性的更多提示:如何停止将电子邮件标记为垃圾邮件。 尽管这将花费一些时间和精力,但在应用了这些提示后,您的电子邮件最终将被放置在收件箱中。

如何为多个域配置Postfix仅发送SMTP服务器

默认情况下,Postfix允许您使用From头中的任何域名并返回路径地址来发送外发电子邮件。 如果您的服务器托管多个网站,则只需为其他域创建SPF DNS记录(这很容易做到),然后为其他域配置OpenDKIM。

要为其他域配置OpenDKIM,您需要在签名表,密钥表和可信主机文件中添加其他域,如下所示。

签名表:

*@example.com       sendonly._domainkey.example.com
*@example.net       sendonly._domainkey.example.net

密钥表:

sendonly._domainkey.example.com     example.com:sendonly:/etc/opendkim/keys/example.com/sendonly.private
sendonly._domainkey.example.net     example.net:sendonly:/etc/opendkim/keys/example.net/sendonly.private

受信任的主机:

127.0.0.1
localhost

*.example.com
*.example.net

然后,按照与上述其他域相同的步骤生成DKIM专用/公用密钥对,并在DNS中添加DKIM公用密钥。 重新启动OpenDKIM,您就完成了。 不要忘记测试您的发件人分数。

故障排除

如果您的消息未签名并且DKIM检查失败,则可能要检查后缀日志(/var/log/mail.log),看看您的配置有什么问题。 如果您在邮件日志中看到以下消息,

warning: connect to Milter service local:opendkim/opendkim.sock: No such file or directory

您可能要检查 opendkim systemd服务实际上正在运行。

systemctl status opendkim

如果opendkim正在运行,并且仍然出现上述错误,则可能需要更改 smtpd_milters = local:opendkim/opendkim.socksmtpd_milters = local:/opendkim/opendkim.sock 在/etc/postfix/main.cf文件中。

发送批量或批量电子邮件

您可以使用此SMTP服务器发送批量或批量电子邮件吗?

是的,但是您应该仅向合法订阅者发送批量电子邮件,也就是说,收件人应该已经注册了您的邮件列表。 绝对不要发送垃圾邮件(未经请求的批量电子邮件),否则SMTP服务器肯定会被列入黑名单。 在发送批量电子邮件之前,我强烈建议您遵循本文中的建议:如何停止将您的电子邮件标记为垃圾邮件。

结论

我希望本教程可以帮助您在Ubuntu上为多个域设置Postfix仅发送SMTP服务器。 与往常一样,如果您发现这篇文章很有用,请订阅我们的免费新闻通讯以获取更多提示和技巧。 保重🙂

Sidebar