本文介绍在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键:
在下一个屏幕中,按Enter键以选择默认选项Internet Site:
接下来,输入系统邮件名称的域名,即@符号后的域名:
第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管理员可能会要求您删除其他无效字符,例如回车):
发布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记录是否有效:
第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服务器了。
相关主题 |