云网牛站
所在位置:首页 > Linux云服务器 > Ubuntu 18.04/16.04/19.04上为多个域设置Postfix仅发送SMTP服务器

Ubuntu 18.04/16.04/19.04上为多个域设置Postfix仅发送SMTP服务器

2019-04-26 21:30:08作者:秦风稿源:云网牛站

本文介绍在Ubuntu 18.04/16.04/19.04操作系统上为多个域设置Postfix仅发送SMTP服务器的方法。

 

用例和先决条件

1、用例

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

2、先决条件

要从服务器发送电子邮件,必须打开25端口(出站),很多ISP和托管公司(如DigitalOcean)阻止25端口来控制垃圾邮件,我建议使用Linode,因为它不会阻止25端口(出站),有了Linode服务器后,在其上安装Ubuntu(图解在VMware Workstation Pro 15中安装Ubuntu 18.04.2 LTS的教程)并按照以下说明操作。

实际上,为多个域设置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。例如,在Linode中,您可以通过选择一个服务器,然后单击“网络”选项卡并单击“编辑RDNS”链接来设置PTR记录,虽然您可以将PTR记录设置为任何主机名,但为了获得最佳实践,您应该使用刚刚设置的FQDN。

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

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

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

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

Ubuntu 18.04/16.04/19.04上为多个域设置Postfix仅发送SMTP服务器

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

Ubuntu 18.04/16.04/19.04上为多个域设置Postfix仅发送SMTP服务器

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

Ubuntu 18.04/16.04/19.04上为多个域设置Postfix仅发送SMTP服务器

 

第3步:禁用Postfix中的接收电子邮件

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

编辑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

取消注释它们并用轻松/简单替换简单,将模式从sv更改为s,因为没有用于验证签名的入站电子邮件:

Canonicalization     relaxed/simple

Mode                 s

SubDomains           no

在此文件的末尾添加以下行(在Ubuntu 18.04上UserID已设置为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

保存并关闭文件。

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

为OpenDKIM创建目录结构:

sudo mkdir /etc/opendkim

sudo mkdir /etc/opendkim/keys

将所有者从root更改为opendkim,并确保只有opendkim用户可以读取和写入keys目录:

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地址和域的消息将受到信任和签名。

2、生成私人/公共密钥对

我们需要生成用于签署外发电子邮件的私钥和用于接收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(域)指定域,-D(目录)指定密钥的存储目录,我们使用sendonly作为选择器(-s),执行命令后,私钥将保存在sendonly.private中,sendonly.txt将是包含公钥的TXT记录。

将opendkim作为私钥的所有者:

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

3、在DNS记录中添加公钥

显示公钥:

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

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

Ubuntu 18.04/16.04/19.04上为多个域设置Postfix仅发送SMTP服务器

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

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

如果一切正常,你会看到:

key OK

如果您看到密钥不安全的消息,请不要惊慌,这是因为您的域名未启用DNSSEC。

 

第5步:使用OpenDKIM连接Postfix

编辑OpenDKIM主配置文件:

sudo nano /etc/opendkim.conf

找到以下行:

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

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

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

创建一个目录来保存OpenDKIM套接字文件,并且只允许opendkim用户和后缀组访问它:

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记录和设置发件人地址,姓名和退信地址

1、创建SPF DNS记录

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

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

2、设置发件人地址,姓名和退信地址

您可以在网站/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' );

保存文件,你就完成了。

 

第7步:测试发件人得分

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

Ubuntu 18.04/16.04/19.04上为多个域设置Postfix仅发送SMTP服务器

 

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

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

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

1、签字表:

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

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

2、关键表:

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

3、值得信赖的主机:

127.0.0.1

localhost

*.example.com

*.example.net

然后如前所述生成私有/公共密钥对,并在DNS中添加DKIM公钥,重新启动OpenDKIM,你就完成了,不要忘记测试您的发件人分数。

至此,已经在Ubuntu上为多个域设置Postfix仅发送SMTP服务器了。

 

相关主题

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

精选文章
热门文章