在CentOS 8上设置Postfix仅发送SMTP服务器
- 技术文档
- 2022.03.24
- 浏览:810
文章目录[隐藏]
- 用例
- 先决条件
- 第一步:设置主机名和PTR记录
- 第2步:在CentOS 8上安装Postfix
- 第3步:配置后缀
- 第4步:在CentOS 8上安装和配置OpenDKIM
- 创建签名表、密钥表和受信任主机文件
- 生成私钥/公钥对
- 在DNS记录中发布您的公钥
- 测试DKIM密钥
- 第5步:将Postfix连接到OpenDKIM
- 步骤6:创建SPF DNS记录
- 第7步:设置发件人地址、发件人名称和返回路径
- 步骤8:为发送的电子邮件启用TLS加密
- 第9步:测试发送者分数
- 如果你的电子邮件仍被标记为垃圾邮件呢?
- 如何为多个域配置Postfix仅发送SMTP服务器
- 故障排除
- 从另一台服务器发送电子邮件
- 从邮件头中删除敏感信息
- 自动更新TLS证书
- 发送大量或大量电子邮件
- 必须先发出STARTTLS命令
- 结论
在本文中,我将向您展示如何在CentOS 8上将Postfix设置为仅发送SMTP服务器。我将首先向您展示如何为单个域执行此操作,然后如果需要,您可以为多个域应用这些步骤。
用例
您有一个需要向用户发送事务性电子邮件(如密码重置电子邮件)的网站/web应用程序。最有可能的是,用户不需要回复这些电子邮件,或者如果他们回复,回复电子邮件将被发送到您的专用邮件服务器。在这种情况下,可以使用Postfix(一种流行的SMTP服务器软件)在web服务器上设置只发送SMTP服务器。
先决条件
要从服务器发送电子邮件,端口25(出站)必须打开。许多ISP和托管公司,如DigitalOcean block port 25来控制垃圾邮件。我建议使用ScalaHost,因为它不会阻止端口25(出站)。拥有ScalaHost服务器后,在其上安装CentOS 8,并按照以下说明操作。
为多个域设置Postfix仅发送SMTP服务器实际上并不困难。首先,我们需要为一个域配置它,然后为多个域设置它。
第一步:设置主机名和PTR记录
默认情况下,Postfix在与其他SMTP服务器通信时使用服务器的主机名来标识自身。如果您的主机名无效,某些SMTP服务器将拒绝您的电子邮件。您应该设置一个完整的限定域名(FQDN),如下所示。
sudo hostnamectl set-hostname mta1.yourdomain.com
要检查服务器的主机名,请运行
hostname -f
您需要注销并重新登录,才能在命令提示下看到主机名的更改。这个主机名应该有一个指向服务器IP地址的DNS a记录。
此外,还需要设置一个PTR记录(又名指针记录),将IP地址映射到FQDN。这是A唱片的对应品。如果你的服务器IP地址没有PTR记录,许多SMTP服务器会拒绝你的电子邮件。
因为您从主机提供商或ISP获得IP地址,而不是从域注册商获得,所以您必须在主机提供商的控制面板中为您的IP设置PTR记录,或者询问ISP。例如,在ScalaHost中,您可以通过打开支持票证或使用他们网站上的实时聊天来设置PTR记录。尽管您可以将PTR记录设置为任何主机名,但为了获得最佳实践,您应该使用刚刚设置的FQDN。
要查看PTR记录设置是否正确,请运行以下命令。将12.34.56.78替换为您自己的IP地址。
host 12.34.56.78
请注意,如果服务器使用IPv6地址,最好为FQDN添加AAAA记录,并为IPv6地址设置PTR记录。
第2步:在CentOS 8上安装Postfix
运行以下命令,从默认的CentOS 8存储库安装Postfix。
sudo dnf update sudo dnf install postfix -y
安装后,启动Postfix SMTP服务器。
sudo systemctl start postfix
并在启动时启用自动启动。
sudo systemctl enable postfix
第3步:配置后缀
设置后缀主机名
默认情况下,Postfix SMTP服务器在与其他SMTP服务器通信时使用操作系统的主机名来标识自身。但是,OS主机名可能会更改,因此使用以下命令直接在Postfix配置文件中设置主机名是一种好的做法。
sudo postconf -e "myhostname = mta1.yourdomain.com"
设置$mydomain参数
$mydomain参数指定本地internet域名。默认情况下,使用$myhostname减去第一个组件。您可以通过以下方式显示$mydomain的当前值:
postconf mydomain
它应该是你的顶级域名,比如
linuxbabe.com
如果它没有显示您的apex域名,则将$mydomain参数设置为:
sudo postconf -e "mydomain = yourdomain.com"
设置$myorigin参数
$myorigin参数指定附加到没有@domain部分的发件人和收件人地址的默认域名。默认设置是使用$myhostname的值,如下所示:
postconf myorigin
输出:
myorigin = $myhostname
您可以将其值更改为您的域。通用域名格式。
sudo postconf -e "myorigin = yourdomain.com"
重新启动后缀
最后,我们需要重新启动Postfix以使更改生效。
sudo systemctl restart postfix
第4步:在CentOS 8上安装和配置OpenDKIM
DKIM代表域密钥识别邮件。你可以在你的服务器上安装OpenDKIM,并使用它为从你的域发送的电子邮件添加签名,使用你的私钥。接收SMTP服务器使用您在DNS中发布的相应公钥验证签名。如果你想让你的邮件进入收件人的收件箱,添加DKIM签名是必须的。
从EPEL(企业Linux的额外软件包)存储库安装OpenDKIM。
sudo dnf install epel-release sudo dnf install opendkim perl-Getopt-Long
编辑OpenDKIM主配置文件。
sudo nano /etc/opendkim.conf
找到下面这行。
Mode v
默认情况下,OpenDKIM以验证模式(v)运行,该模式将验证传入电子邮件的DKIM签名。我们需要对发送的电子邮件进行签名,因此将此行更改为以下内容以启用签名模式。
Mode sv
找到下面一行并注释掉,因为我们将为每个域名使用单独的密钥。
KeyFile /etc/opendkim/keys/default.private
接下来,找到以下4行并取消注释。
# KeyTable /etc/opendkim/KeyTable # SigningTable refile:/etc/opendkim/SigningTable # ExternalIgnoreList refile:/etc/opendkim/TrustedHosts # InternalHosts refile:/etc/opendkim/TrustedHosts
保存并关闭文件。
创建签名表、密钥表和受信任主机文件
编辑签名表文件。
sudo nano /etc/opendkim/SigningTable
在该文件末尾添加以下行。这会告诉OpenDKIM,如果服务器上的发件人正在使用@your域。com地址,则应使用mta1标识的私钥对其进行签名_域名。你的领域。通用域名格式。
*@your-domain.com mta1._domainkey.your-domain.com
mta1是DKIM选择器。域名可能有多个DKIM密钥。DKIM选择器允许您选择特定的DKIM键。您可以为DKIM选择器使用任何名称。我认为使用主机名最左边的部分作为DKIM选择器很方便。保存并关闭文件。然后编辑密钥表文件。
sudo nano /etc/opendkim/KeyTable
添加以下行,指定DKIM私钥的位置。
mta1._domainkey.your-domain.com your-domain.com:mta1:/etc/opendkim/keys/your-domain.com/mta1.private
保存并关闭文件。接下来,编辑受信任的主机文件。
sudo nano /etc/opendkim/TrustedHosts
默认情况下,127.0.0.1和::1包含在此文件中。现在添加以下行。这告诉OpenDKIM,如果电子邮件来自您自己的域名,那么OpenDKIM不应该对该电子邮件执行DKIM验证。
*.your-domain.com
保存并关闭文件。
生成私钥/公钥对
由于DKIM用于对发送的邮件进行签名和验证接收的邮件,因此需要生成一个私钥来对发送的电子邮件进行签名,并生成一个公钥来接收SMTP服务器,以验证电子邮件的DKIM签名。公钥将在DNS中发布。
为域创建一个单独的文件夹。
sudo mkdir /etc/opendkim/keys/your-domain.com
使用opendkim genkey工具生成密钥。
sudo opendkim-genkey -b 2048 -d your-domain.com -D /etc/opendkim/keys/your-domain.com -s mta1 -v
上述命令将创建2048位密钥-d(域)指定域-D(目录)指定存储密钥的目录。我使用mta1作为DKIM选择器。命令执行后,私钥将写入mta1。私有文件和公钥将写入mta1。txt文件。
默认情况下,只有root用户可以读取和写入密钥文件。使opendkim成为私钥的所有者。
sudo chown opendkim:opendkim /etc/opendkim/keys/ -R
在DNS记录中发布您的公钥
显示公钥
sudo cat /etc/opendkim/keys/your-domain.com/mta1.txt
p参数后面的字符串是公钥。
在DNS管理器中,创建一个TXT记录,输入mta1_名称字段中的domainkey。然后返回终端窗口,复制括号中的所有内容,并将其粘贴到DNS记录的值字段中。您需要删除值字段中的所有双引号和换行符。如果不删除它们,那么下一步中的密钥测试可能会失败。
测试DKIM密钥
在CentOS 8服务器上输入以下命令以测试密钥。
sudo opendkim-testkey -d your-domain.com -s mta1 -vvv
如果一切正常,您将看到键OK消息。
opendkim-testkey: using default configfile /etc/opendkim.conf opendkim-testkey: checking key 'mta1._domainkey.linuxbabe.com' opendkim-testkey: key OK
如果你看到“钥匙不安全”,不要惊慌。这是因为您的域名上未启用DNSSEC。DNSSEC是安全DNS查询的安全标准。大多数域名都没有启用DNSSEC。你可以继续遵循这个指南。
现在我们可以启动opendkim服务了。
sudo systemctl start opendkim
并在启动时启用自动启动。
sudo systemctl enable opendkim
OpenDKIM监听127.0.0.1:8891。
第5步:将Postfix连接到OpenDKIM
编辑后缀主配置文件。
sudo nano /etc/postfix/main.cf
在这个文件的末尾添加以下几行,这样Postfix就可以通过milter协议调用OpenDKIM了。请注意,应该使用127.0.0.1作为地址。不要使用localhost。
# Milter configuration milter_default_action = accept milter_protocol = 6 smtpd_milters = inet:127.0.0.1:8891 non_smtpd_milters = $smtpd_milters
保存并关闭文件。然后将postfix用户添加到opendkim组。
sudo gpasswd -a postfix opendkim
重新启动后缀服务。
sudo systemctl restart postfix
步骤6:创建SPF DNS记录
SPF(发件人策略框架)记录指定允许哪些主机或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主题的函数中添加以下行。php文件覆盖默认的发件人地址、发件人名称和返回路径。必要时替换红色文本。
// Function to change From email address function wpb_sender_email( $original_email_address ) { return ''; } // 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/maillog文件中,这样您就可以检查TLS加密是否有效。保存并关闭文件。重新启动Postfix以使更改生效。
sudo systemctl restart postfix
由于Postfix不接收传入的电子邮件,因此无需为Postfix SMTP守护程序配置有效的TLS证书。
第9步:测试发送者分数
现在去https://www.mail-tester.com.你会看到一个独特的电子邮件地址。从Postfix SMTP服务器上的网站向此地址发送电子邮件,然后检查您的分数。如你所见,我得了满分。在测试结果中,您应该检查您的PTR记录、SPF和DKIM记录是否有效。
还可以打开/var/log/maillog文件,检查是否使用了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允许您使用发件人标题和返回路径地址中的任何域名发送电子邮件。如果你的服务器托管多个网站,你只需要为你的其他域创建SPF DNS记录,这很容易做到,并为你的其他域配置OpenDKIM。
要为其他域配置OpenDKIM,需要在签名表、密钥表和可信主机文件中添加其他域,如下所示。
签名表:
*@example.com mta1._domainkey.example.com *@example.net mta1._domainkey.example.net
键表:
mta1._domainkey.example.com example.com:mta1:/etc/opendkim/keys/example.com/mta1.private mta1._domainkey.example.net example.net:mta1:/etc/opendkim/keys/example.net/mta1.private
受信任的主机:
127.0.0.1 localhost *.example.com *.example.net
然后按照上述步骤为其他域生成DKIM私钥/公钥对,并在DNS中添加DKIM公钥。重新启动OpenDKIM,就完成了。别忘了测试你的发件人分数。
故障排除
如果您的邮件未签名且DKIM检查失败,您可能需要检查postfix日志(/var/log/maillog)以查看配置中的错误。
从另一台服务器发送电子邮件
有两种方法允许其他服务器通过只发送Postfix SMTP服务器发送电子邮件。
- 在不使用SMTP身份验证的情况下使用端口25:此方法要求其他服务器不阻止端口25(出站)。
- 将端口587用于SMTP身份验证:如果其他服务器阻止端口25(出站),则可以使用端口587。
没有SMTP身份验证的端口25
默认情况下,CentOS 8上的Postfix仅在本地主机上侦听。您需要将Postfix配置为在0.0.0.0上侦听,以便其他服务器可以连接到仅发送Postfix SMTP服务器。
sudo postconf "inet_interfaces = all"
然后需要将另一台服务器的IP地址添加到Postfix mynetworks参数中。将12.34.56.78替换为实际IP地址。
sudo postconf "$(postconf mynetworks) 12.34.56.78"
重新启动Postfix以使更改生效。
sudo systemctl restart postfix
运行以下命令打开端口25(入站)。
sudo firewall-cmd --permanent --add-port=25/tcp sudo systemctl reload firewalld
现在,您可以将SMTP客户端配置为使用mta1。你的地盘。com和端口25发送电子邮件。您不需要在SMTP客户端中指定用户名/密码。
带有SMTP身份验证的587端口
打开防火墙中的587和80端口。
sudo firewall-cmd --permanent --add-service={smtp-submission,http} sudo systemctl reload firewalld
默认情况下,CentOS 8上的Postfix仅在本地主机上侦听。您需要将Postfix配置为在0.0.0.0上侦听,以便其他服务器可以连接到仅发送Postfix SMTP服务器。
sudo postconf "inet_interfaces = all"
然后,您需要启用Postfix的提交服务,以便电子邮件客户端可以向Postfix SMTP服务器提交电子邮件。编辑母版。cf文件。
sudo nano /etc/postfix/master.cf
在提交部分,取消注释或添加以下行。请在每个-o之前至少允许一个空格(制表符或空格键)。在后缀配置中,前面的空格字符表示此行是前一行的延续。(默认情况下,提交部分被注释掉。您可以复制以下行并将其粘贴到文件中,这样您就不必手动取消注释或添加新文本。)
submission inet n - y - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_tls_wrappermode=no -o smtpd_tls_loglevel=1 -o smtpd_sasl_auth_enable=yes -o smtpd_relay_restrictions=permit_sasl_authenticated,reject -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject -o smtpd_sasl_type=dovecot -o smtpd_sasl_path=private/auth
上述配置启用Postfix的提交守护程序,并要求对SMTP身份验证进行TLS加密。纯文本身份验证将被拒绝。保存并关闭文件。要启用SMTP身份验证,我们需要在CentOS 8/RHEL 8服务器上安装Dovecot。
sudo dnf install dovecot
启动Dovecot并在启动时启用自动启动。
sudo systemctl start dovecot sudo systemctl enable dovecot
编辑身份验证配置文件。
sudo nano /etc/dovecot/conf.d/10-auth.conf
取消对以下行的注释。
disable_plaintext_auth = yes
当没有SSL/TLS加密时,它将禁用明文身份验证。如果您想使用完整的电子邮件地址()登录,请在文件中添加以下行。
auth_username_format = %n
否则,您只能使用用户名登录(不使用@your domain.com)。接下来,找到下面这行。
auth_mechanisms = plain
这一行只启用普通身份验证机制。登录是您可能希望添加的另一种身份验证机制,以支持旧的电子邮件客户端。
auth_mechanisms = plain login
保存并关闭文件。然后编辑以下文件。
sudo nano /etc/dovecot/conf.d/10-master.conf
将service auth部分更改为以下内容,以便Postfix可以找到Dovecot身份验证服务器。
service auth { unix_listener /var/spool/postfix/private/auth { mode = 0660 user = postfix group = postfix } }
保存并关闭文件。重新启动Dovecot以使更改生效。
sudo systemctl restart dovecot
接下来,我们需要获得有效的TLS证书。我们可以很容易地从Let's Encrypt获得免费的TLS证书。发出以下命令,从EPEL存储库在CentOS 8/RHEL 8上安装Let's Encrypt client(certbot)。
sudo dnf install certbot
然后使用独立插件获取TLS证书(假设Postfix SMTP服务器上没有运行web服务器)。
sudo certbot certonly --standalone --agree-tos --email -d mta1.yourdomain.com
过了一会儿,您应该会看到以下几行,这意味着证书已成功获得。您还可以查看证书存储的目录。
接下来,我们需要运行以下两个命令来指定后缀配置文件中TLS证书和私钥的位置。您的Let's Encrypt证书和私钥存储在/etc/letsencrypt/live/mta1下。你的领域。com/directory。
sudo postconf "smtpd_tls_cert_file = /etc/letsencrypt/live/mta1.your-domain.com/fullchain.pem" sudo postconf "smtpd_tls_key_file = /etc/letsencrypt/live/mta1.your-domain.com/privkey.pem"
重新启动Postfix以使更改生效。
sudo systemctl restart postfix
现在,您可以将SMTP客户端配置为使用mta1。你的地盘。com和端口587发送电子邮件。使用TLS加密类型和普通作为身份验证模式。您需要在SMTP服务器上创建电子邮件帐户。这很简单。使用adduser命令添加用户。
sudo adduser user1
然后为该用户设置密码。
sudo passwd user1
电子邮件地址将为[电子邮件 ;受保护]。
从邮件头中删除敏感信息
默认情况下,Postfix SMTP服务器将添加一个Received:电子邮件头,记录客户端的IP地址,这可能会泄露您网站的IP地址(如果它位于CDN后面)。你可以告诉Postfix忽略它。创建一个头检查文件。
sudo nano /etc/postfix/smtp_header_checks
将以下行放入文件中。
/^Received:/ IGNORE
保存并关闭文件。然后编辑后缀主配置文件。
sudo nano /etc/postfix/main.cf
在文件末尾添加以下行。
smtp_header_checks = regexp:/etc/postfix/smtp_header_checks
保存并关闭文件。然后运行以下命令重建哈希表。
sudo postmap /etc/postfix/smtp_header_checks
重新加载后缀以使更改生效。
sudo systemctl reload postfix
现在Postfix不会在邮件头中包含这些敏感信息。
自动更新TLS证书
您可以创建Cron作业来自动续订TLS证书。只需打开root用户的crontab文件。
sudo crontab -e
然后添加以下行。
@daily certbot renew --quiet
保存并关闭文件。
发送大量或大量电子邮件
您可以使用此SMTP服务器发送批量或批量电子邮件吗?
是的,但你应该只向合法订户发送批量电子邮件,也就是说,收件人应该已经注册了你的邮件列表。你不应该发送垃圾邮件(未经请求的批量电子邮件),否则你的SMTP服务器肯定会被列入黑名单。在发送大量电子邮件之前,我强烈建议遵循本文中的建议:如何阻止您的电子邮件被标记为垃圾邮件。
必须先发出STARTTLS命令
如果在邮件日志(/var/log/maillog)中看到以下错误,可能是因为在/etc/postfix/main中没有正确指定TLS证书。cf文件。
Must issue a STARTTLS command first (in reply to MAIL FROM command))
结论
我希望本教程能帮助您在CentOS 8上为多个域设置Postfix仅发送SMTP服务器。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?