• 如何处理Microsoft Outlook IP黑名单

    在之前的教程中,我解释了如何使用iRedMail或Modoboa轻松设置自己的邮件服务器,并分享了一些从黑名单中删除IP地址的技巧。然而,有些人很难摆脱Outlook使用的Microsoft Outlook IP黑名单。com,hotmail。现场直播。com和msn。com邮件服务器。 如果您的IP地址被阻止,Microsoft Outlook通常会发回以下消息。 host eur.olc.protection.outlook.com[104.47.22.161] said: 550 5.7.1 Unfortunately, messages from [xx.xx.xx.xx] weren't sent. Please contact your Internet service provider since part of their network is on our block list (S3150). You can also refer your provider to http://mail.live.com/mail/troubleshooting.aspx#errors. [DB8EUR06FT013.eop-eur06.prod.protection.outlook.com] (in reply to MAIL FROM command) 正如你所见,整个IP范围都被屏蔽了。就我个人而言,我不认为应该使用这种反垃圾邮件技术,因为它会对合法发件人造成附带损害。相比之下,Gmail在处理IP声誉方面要聪明得多。您可以提交发件人信息表单来解决此问题。有时微软会解锁你的IP地址,有时你的请求会被拒绝。 让你的IP地址脱离Outlook黑名单的可靠方法是让你的邮件服务器通过返回路径认证。然而,它非常昂贵。你需要一次性支付200美元的申请费和每年至少1375美元的许可费。我将向您展示一种绕过Outlook IP黑名单的免费方法。 使用SMTP中继服务绕过Microsoft Outlook IP黑名单 您可以将邮件服务器配置为通过SMTP中继服务中继电子邮件。他们保持着良好的IP声誉,所以你的电子邮件可以通过IP黑名单。有许多SMTP中继服务。有些收取一点费用,有些每月提供免费配额。 您不必配置邮件服务器来转发所有电子邮件。我将向您展示如何配置Postfix SMTP服务器,以中继发送到outlook的电子邮件。com,hotmail。现场直播。com和msn。com电子邮件地址,所以你不会很快用完免费配额。现在使用微软邮箱的人不多了。我的订户中只有6.5%使用hotmail、outlook、live和msn电子邮件地址。 这里我推荐SendinBlue SMTP中继服务,它允许你每月免费发送9000封电子邮件。不需要信用卡。 配置SendinBlue SMTP中继 在SendinBlue创建一个免费帐户。完成用户配置文件后,单击事务选项卡,您将获得SMTP设置。 请注意,您可能需要联系Sendinblue客户服务以激活事务性电子邮件服务。 SSH连接到邮件服务器,并安装libsasl2 modules包,这是SASL身份验证所必需的。 sudo apt install libsasl2-modules 如果您使用CentOS/Rocky Linux/Alma Linux,请安装以下软件包。 sudo dnf install cyrus-sasl-plain cyrus-sasl-md5 接下来,使用命令行文本编辑器(如Nano)打开Postfix主配置文件。 sudo nano /etc/postfix/main.cf 在该文件末尾添加以下行。 transport_maps = regexp:/etc/postfix/transport.microsoft 暗示 如果使用iRedMail,可以找到transport_maps参数并添加regexp行。 transport_maps = regexp:/etc/postfix/transport.microsoft proxy:mysql:/etc/postfix/mysql/transport_maps_user.cf proxy:mysql:/etc/postfix/mysql/transport_maps_maillist.cf proxy:mysql:/etc/postfix/mysql/transport_maps_domain.cf 如果使用Modoboa,可以找到tranport_maps参数并添加regexp行。 transport_maps = regexp:/etc/postfix/transport.microsoft proxy:mysql:/etc/postfix/sql-transport.cf proxy:mysql:/etc/postfix/sql-spliteddomains-transport.cf 然后将以下行添加到此文件的末尾。 # outbound relay configurations smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_security_options = noplaintext, noanonymous smtp_tls_security_level = may header_size_limit = 4096000 保存并关闭文件。接下来,创建/etc/postfix/transport。微软文件。 sudo nano /etc/postfix/transport.microsoft 在此文件中添加以下行。这会告诉Postfix,如果收件人是Microsoft邮箱用户,请使用Sendinblue SMTP中继。 /.*@(outlook|hotmail|live|msn)/..*/i relay:[smtp-relay.sendinblue.com]:587 保存并关闭文件。创建。数据库文件。 sudo postmap /etc/postfix/transport.microsoft 接下来,创建/etc/postfix/sasl_passwd文件。 sudo nano /etc/postfix/sasl_passwd 将SMTP中继主机和SMTP凭据添加到此文件,如下所示。用SendinBlue提供的您自己的用户名和密码替换smtp_用户名和smtp_密码。注意用户名和密码之间有一个冒号。 [smtp-relay.sendinblue.com]:587 smtp_username:smtp_password 保存并关闭文件。然后用postmap创建相应的hash db文件。 sudo postmap /etc/postfix/sasl_passwd 现在你应该有一个文件/etc/postfix/sasl_passwd。db。重新启动Postfix以使更改生效。 sudo systemctl restart postfix 默认情况下,sasl_passwd和sasl_passwd。数据库文件可以被服务器上的任何用户读取。将权限更改为600,这样只有root用户才能读写这两个文件。 sudo chmod 0600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db 从现在起,Postfix将使用Sendinblue SMTP中继向Microsoft邮箱用户发送电子邮件。您可以向hotmail发送测试电子邮件。com,outlook。现场直播。com或msn。com电子邮件地址。 请注意,您需要单击发件人&在您的帐户仪表板中的IPs选项卡添加您的域。 在SendinBlue中设置SPF/DKIM身份验证 在SendinBlue仪表板中,单击右上角的帐户名,然后单击Senders&IP。选择域选项卡->管理->验证这个域。 一个弹出窗口出现。您需要为您的域添加前3条记录。     故障排除提示 如果您的Postfix SMTP服务器无法通过SMTP中继发送电子邮件,并且您在邮件日志(/var/log/mail.log)中看到以下错误。 sasl authentication failed cannot authenticate to server no mechanism available 这可能是因为您的系统缺少libsasl2 modules包,可以使用以下命令安装该包。 sudo apt install libsasl2-modules 然后重新启动Postfix。 sudo systemctl restart postfix 注意:上述错误有时可能是由SMTP中继服务器上的无效TLS证书(自签名或过期)引起的。然而,使用Sendinblue时很少发生这种情况。 从垃圾邮件文件夹中取出 SMTP中继服务可以让你绕过IP黑名单,但这并不意味着你的电子邮件将100%进入收件箱。您的电子邮件可能会被放入垃圾邮件文件夹。如果您遵守电子邮件发送最佳实践,您的电子邮件最终将被放入收件箱文件夹。 我创建了一个新的hotmail。com邮箱作为测试。从我的域名发送的前3份新闻稿被放在垃圾邮件文件夹中,但所有剩余的电子邮件都被放在收件箱文件夹中。我没有在我的Hotmail帐户中做任何事情。我没有打开我的通讯或点击通讯中的任何链接。我只是使用最佳实践发送电子邮件,所以微软知道我的电子邮件不是垃圾邮件。 远离微软黑名单的小贴士 如果Microsoft在一段时间内未发现您的邮件服务器存在垃圾邮件活动,则可能会将您的IP地址从黑名单中删除。以下是一些防止你的IP地址再次被列入黑名单的建议。 不要立即将带有此IP地址的新闻稿发送给Microsoft邮箱用户。你应该首先发送事务性电子邮件,以提高你在微软的IP声誉。 如果你发送时事通讯,一定要预热你的IP地址。 你可以登录Outlook。com智能网络数据服务,用于检查您在Microsoft的IP声誉。如果您的IP地址在给定的一天发送超过100条消息,您可以单击查看数据链接查看您的IP地址的邮件流量和垃圾邮件数据。 Microsoft使用3种颜色来区分IP地址的垃圾邮件率: 红色:垃圾邮件>90% 黄色:10%<垃圾邮件<90% 绿色:垃圾邮件<10% 从两张截图中可以看出,我的IP声誉有所提高。 收尾 我希望本教程能帮助您绕过Microsoft Outlook IP黑名单。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费通讯,获取更多有用的教程?

    2022.03.24 浏览:473
  • 在CentOS 8上设置Postfix仅发送SMTP服务器

    在本文中,我将向您展示如何在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 '[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/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加密时,它将禁用明文身份验证。如果您想使用完整的电子邮件地址([email protected])登录,请在文件中添加以下行。 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 [email protected] -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服务器。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?

    2022.03.24 浏览:403
  • Postfix SMTP在单个VPS上具有多个IP轮换实例

    本教程将向您展示如何在单个VPS(虚拟专用服务器)上设置多个具有IP轮换的Postfix SMTP服务器实例。 为什么要使用多个IP地址 如果你使用Mautic这样的自托管电子邮件营销软件发送大量电子邮件,那么使用多个IP地址来传播电子邮件流量是一个很好的做法。如果邮箱提供商观察到大量来自单个IP地址的电子邮件,则很可能被识别为垃圾邮件。为了保持良好的IP声誉,您需要降低从单个IP地址发送的电子邮件流量。 Kamatera是最好的Linux VPS托管提供商,它允许您在一台主机上拥有多个IP地址。VPS的起价为每月4美元,每个新IP地址的起价为每月1美元。按照下面链接的教程创建具有多个公共IP地址的Linux VPS服务器。 如何在Kamatera上创建Linux VPS服务器 接下来,您可以使用iRedMail在Kamatera VPS上快速设置电子邮件服务器。 如何使用iRedMail在Ubuntu20.04上轻松设置自己的邮件服务器 如何使用iRedMail在Debian 10上轻松设置自己的邮件服务器 如何使用iRedMail在CentOS 8上轻松设置自己的邮件服务器 完成后,回到这里设置Postfix多个IP轮换实例。 您应该使用多少IP地址发送电子邮件? 如果你有一万个电子邮件订户,一个IP地址就足够了。 如果你需要一次发送10万封电子邮件,我建议至少5个IP地址。 Postfix多实例的结构 Postfix SMTP服务器可以配置为在一台主机上运行多个实例。所有实例共享相同的程序文件,但对以下文件使用唯一的目录。 配置文件 假脱机/队列 数据 本教程向您展示了设置2个后缀实例的过程。您可以使用相同的过程来添加第三个、第四个、第五个……实例。 步骤1:设置多个后缀实例 运行以下命令初始化Postfix中的多实例。 sudo postmulti -e init 这将在/etc/postfix/main的底部添加以下两行。cf文件。 multi_instance_wrapper = ${command_directory}/postmulti -p -- multi_instance_enable = yes 接下来,创建一个新的后缀实例。 sudo postmulti -e create -I postfix-smtp1 哪里: -e:编辑模式 -I:实例名,必须以后缀-。 它会自动创建/etc/postfix-smtp1/目录,其中包括主目录。cf和main。cf文件。/etc/postfix-smtp1/main。cf文件的底部有以下几行。 readme_directory = no inet_protocols = ipv4 master_service_disable = inet authorized_submit_users = queue_directory = /var/spool/postfix-smtp1 multi_instance_name = postfix-smtp1 改变 master_service_disable = inet 到 master_service_disable = 因此postfix-smtp1实例可以绑定到TCP套接字。每个后缀实例必须具有以下两个参数的唯一值。 myhostname = inet_interfaces = 例如,主实例(/etc/postfix/main.cf)可以使用 myhostname = smtp.example.com inet_interfaces = 11.22.33.44 postfix-smtp1实例可以使用 myhostname = smtp01.example.com inet_interfaces = 11.22.33.55 因此,每个实例都有一个唯一的主机名,并绑定到不同的IP地址。如果在/etc/postfix/main中添加了其他自定义设置。cf文件,您可以将它们复制到/etc/postfix-smtp1/main。cf文件。建议将您的所有IP地址添加到mynetworks参数中。 /etc/postfix-smtp1/master。cf包含Postfix提供的股票内容。同样,您可以从/etc/postfix/master复制自定义设置。cf文件。 接下来,在队列目录下创建一个etc目录。 sudo mkdir -p /var/spool/postfix-smtp1/etc/ 从主实例复制文件。 sudo cp -r /var/spool/postfix/etc/* /var/spool/postfix-smtp1/etc/ 然后运行以下命令以启用postfix-smtp1实例。 sudo postmulti -i postfix-smtp1 -e enable 现在重新启动主实例。 sudo systemctl restart postfix 然后启动postfix-smtp1实例。 sudo postmulti -i postfix-smtp1 -p start 如果你的配置文件有重复的参数,这个命令会显示给你,你需要删除重复的参数。可能重复的参数包括: mynetworks = inet_protocols = 如果postfix-smtp1实例无法启动,请检查邮件日志文件(/var/log/mail.log或/var/log/maillog)以查看出现了什么问题。 如果你想阻止它,快跑 sudo postmulti -i postfix-smtp1 -p stop 要重新加载配置文件,请运行 sudo postmulti -i postfix-smtp1 -p reload 要列出postfix-smtp1实例的邮件队列,请运行 sudo postqueue -c /etc/postfix-smtp1/ -p 请注意,sudo systemctl restart postfix命令只会重新启动主实例。要列出所有后缀实例,请运行 sudo postmulti -l -a 运行以下命令以检查Postfix是否正在侦听正确的IP地址。 sudo ss -lnpt | grep master 第2步:设置DNS负载平衡 您可以为VPS使用单独的主机名,并为主机名创建两个DNS a记录。这被称为DNS负载平衡。 然后将SMTP客户端(例如自托管电子邮件营销应用程序)配置为使用主机名。它将以循环方式尝试这两个IP地址。 3.设置防火墙 默认情况下,服务器有一个默认网关,它总是使用网关IP地址连接到其他服务器。为了实现更好的电子邮件交付,我们需要做到以下几点。 如果SMTP客户端连接到VPS上的第一个IP地址,则VPS应使用第一个IP地址发送电子邮件。 如果SMTP客户端连接到VPS上的第二个IP地址,则VPS应使用第二个IP地址发送电子邮件。 为了实现这一点,我们需要在服务器防火墙中配置SNAT(源NAT)。SNAT更改源IP地址。 Linux上有几种防火墙软件。以下是常见的。 iptables:Linux世界最著名的防火墙。 nftables:街区里的新孩子,应该取代iptables。 UFW:iptables的包装器,常见于Debian/Ubuntu服务器上。 Firewalld:iptables/nftables的包装器,常见于RHEL、CentOS、Rocky Linux和Alma Linux服务器上。 iptables 如果使用iptables,则需要运行以下两个命令来设置SNAT。 sudo iptables -t nat -A POSTROUTING -s 11.22.33.44 -p tcp --dport 25 -j SNAT --to-source 11.22.33.44 sudo iptables -t nat -A POSTROUTING -s 11.22.33.55 -p tcp --dport 25 -j SNAT --to-source 11.22.33.55 这意味着 如果连接来自第一个IP地址,则将其用作源IP地址。收件人的SMTP服务器会认为电子邮件来自第一个IP地址。 如果连接来自第二个IP地址,则将其用作源IP地址。收件人的SMTP服务器会认为电子邮件来自第二个IP地址。 UFW 如果使用UFW防火墙,请编辑/etc/UFW/before。规则文件。 sudo nano /etc/ufw/before.rules 在该文件底部添加以下行。根据需要更换IP地址。 # NAT table rules *nat :POSTROUTING ACCEPT [0:0] -A POSTROUTING -s 11.22.33.44 -p tcp --dport 25 -j SNAT --to-source 11.22.33.44 -A POSTROUTING -s 11.22.33.55 -p tcp --dport 25 -j SNAT --to-source 11.22.33.55 # End each table with the 'COMMIT' line or these rules won't be processed COMMIT 保存并关闭文件。然后重启UFW。 sudo systemctl restart ufw 防火墙 如果使用Firewalld,则运行以下两个命令来设置SNAT。根据需要更换IP地址。 sudo firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -s 11.22.33.44 -p tcp --dport 25 -j SNAT --to-source 11.22.33.44 sudo firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 1 -s 11.22.33.55 -p tcp --dport 25 -j SNAT --to-source 11.22.33.55 重新加载Firewalld以使更改生效。 sudo systemctl reload firewalld 步骤4:为每个IP地址添加PTR记录 Kamatera不允许您在控制面板中编辑PTR记录。相反,你需要打开一张支持票,告诉他们为你添加PTR记录。你可能会想,这并不方便,但这是为了让垃圾邮件发送者远离平台,因此像我们这样的合法电子邮件发送者将拥有良好的IP声誉。 步骤5:配置SMTP身份验证 现在我们需要为postfix-smtp1 postfix实例配置SMTP身份验证。 sudo nano /etc/postfix-smtp1/master.cf 在此文件中添加以下行,以便SMTP客户端可以在TCP端口587上进行身份验证并提交发送的电子邮件。 submission inet n - n - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o content_filter=smtp-amavis:[127.0.0.1]:10026 保存并关闭文件。然后停止postfix-smtp01实例。 sudo postmulti -i postfix-smtp1 -p stop 然后重新开始。 sudo postmulti -i postfix-smtp1 -p start 第5步:测试 现在你可以发送测试邮件,看看它是否有效。 故障排除 如果您没有使用iRedMail,并且在邮件日志中看到以下错误(/var/log/mail.log或/var/log/maillog) postfix/submission/smtpd[4125]: warning: SASL: Connect to private/auth failed: No such file or directory postfix/submission/smtpd[4125]: fatal: no SASL authentication mechanisms 然后,需要为postfix-smtp1实例配置一个单独的Dovecot SMTP验证套接字。 sudo nano /etc/dovecot/conf.d/10-master.conf 您的服务验证部分可能如下所示: service auth { unix_listener /var/spool/postfix/private/auth { mode = 0660 user = postfix group = postfix } } 您需要为postfix-smtp1实例添加一个新的unix_侦听器,该实例使用/var/spool/postfix-smp1/目录作为spool目录。 service auth { unix_listener /var/spool/postfix/private/auth { mode = 0660 user = postfix group = postfix } unix_listener /var/spool/postfix-smtp1/private/auth { mode = 0660 user = postfix group = postfix } } 保存并关闭文件。然后重启多佛科特。 sudo systemctl restart dovecot 没有DKIM签名? 如果您使用OpenDKIM,但电子邮件中没有DKIM签名,那么您应该使用以下设置。 打开OpenDKIM配置文件。 sudo nano /etc/opendkim.conf 如果您的文件有下面这样一行,那么OpenDKIM正在使用Unix套接字接受来自Postfix的连接。 Socket local:/var/spool/postfix/opendkim/opendkim.sock 评论一下。我们需要将OpenDKIM配置为使用TCP/IP套接字。 Socket inet:[email protected] 保存并关闭文件。接下来,编辑主菜单。每个Postfix实例的cf文件,在文件中添加以下行,以便Postfix将通过TCP/IP套接字连接到OpenDKIM。 # Milter configuration milter_default_action = accept milter_protocol = 6 smtpd_milters = inet:127.0.0.1:8891 non_smtpd_milters = $smtpd_milters 保存并关闭文件。然后重新启动每个后缀实例。 收尾 我希望本教程能帮助您在单个VPS上设置多个具有IP轮换的Postfix SMTP服务器实例。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?

    2022.03.24 浏览:366
  • 使用Postfix SMTP服务器阻止垃圾邮件的7个有效提示

    在本教程中,我想与大家分享我的7个使用Postfix SMTP服务器阻止垃圾邮件的技巧。在过去四年里,我运行自己的电子邮件服务器,收到了大量垃圾邮件,也就是未经请求的商业电子邮件,其中大部分来自中国和俄罗斯。垃圾邮件的存在是因为在互联网上发送大量电子邮件非常便宜。Postfix允许您在垃圾邮件进入邮箱之前阻止它们,这样可以节省带宽和磁盘空间。这篇帖子是我与垃圾邮件斗争经验的结晶。 注意:如果您计划运行自己的邮件服务器,我建议您使用iRedmail,这样可以真正简化邮件服务器的设置过程。它还附带反垃圾邮件规则。如果你喜欢从头开始设置邮件服务器,那么请查看我的邮件服务器教程系列。 垃圾邮件的特点 下面是我发现的关于垃圾邮件的信息。这些垃圾邮件很容易被屏蔽。 他们的IP地址没有PTR记录。 垃圾邮件发送者在HELO/EHLO子句中未提供有效的主机名。 他们伪造了地址上的邮件。 他们通常不会在邮件发送失败后重新发送邮件。 合法的电子邮件服务器不应该具有这些特征。下面是我的7条建议,可以屏蔽90%的垃圾邮件。 事实:世界上大约93%~95%的电子邮件在SMTP网关被拒绝,从未在收件箱或垃圾邮件文件夹中登陆。 提示#1:如果SMTP客户端没有PTR记录,则拒绝电子邮件 PTR记录将IP地址映射到域名。这是一张唱片的对应物。在Linux上,您可以通过执行以下命令来查询与IP地址关联的域名: host <IP address> 例如,下面的命令返回Google邮件服务器的主机名。 host 209.85.217.172 输出: 172.217.85.209.in-addr.arpa domain name pointer mail-ua0-f172.google.com. 由于垃圾邮件的流行,许多邮件服务器(如Gmail、gmx.com、gmx.net、facebook.com)要求SMTP客户端具有与其IP地址相关的有效PTR记录。每个邮件服务器管理员都应该为他们的SMTP服务器设置PTR记录。如果SMTP客户端有PTR记录,您可以在Postfix日志中找到一行,如下所示。 connect from mail-ua0-f172.google.com[209.85.217.172] 如果SMTP客户端没有PTR记录,则主机名将被标识为未知。 connect from unknown[120.41.196.220] 要过滤掉没有PTR记录的电子邮件,请打开Postfix主配置文件。 sudo nano /etc/postfix/main.cf 在smtpd_发送方_限制中添加以下行。如果客户端IP地址没有PTR记录,此指令将拒绝电子邮件。 reject_unknown_reverse_client_hostname 例子: smtpd_sender_restrictions = permit_mynetworks permit_sasl_authenticated reject_unknown_reverse_client_hostname 保存并关闭文件。然后重新启动Postfix以使更改生效。 sudo systemctl restart postfix 提示2:在后缀中启用HELO/EHLO主机名限制 一些垃圾邮件发送者在SMTP对话框中没有提供有效的HELO/EHLO主机名。它们可以是非完全限定的域名,或者域名不存在,或者只针对内部网络。例如,使用Amazon EC2实例发送垃圾邮件的垃圾邮件发送者登录到我的服务器,如下所示: Aug 16 04:21:13 email postfix/smtpd[7070]: connect from ec2-54-237-201-103.compute-1.amazonaws.com[54.237.201.103] Aug 16 04:21:13 email policyd-spf[7074]: prepend Received-SPF: None (mailfrom) identity=mailfrom; client-ip=54.237.201.103; helo=ip-172-30-0-149.ec2.internal; [email protected]; receiver=<UNKNOWN> 如您所见,直升机主机名是ip-172-30-0-149。ec2。内部,仅在AWS内部网络中有效。它没有有效的A记录或MX记录。 要启用HELO/EHLO主机名限制,请编辑后缀主配置文件。 sudo nano /etc/postfix/main.cf 首先,添加以下行以要求客户机提供HELO/EHLO主机名。 smtpd_helo_required = yes 然后添加以下3行以启用smtpd_helo_限制。 smtpd_helo_restrictions = permit_mynetworks permit_sasl_authenticated 使用以下行拒绝提供错误HELO/EHLO主机名的客户端。 reject_invalid_helo_hostname 使用以下行拒绝非完全限定的HELO/EHLO主机名。 reject_non_fqdn_helo_hostname 要在HELO/EHLO主机名既没有DNS A记录也没有MX记录时拒绝电子邮件,请使用 reject_unknown_helo_hostname 这样地: smtpd_helo_required = yes smtpd_helo_restrictions = permit_mynetworks permit_sasl_authenticated reject_invalid_helo_hostname reject_non_fqdn_helo_hostname reject_unknown_helo_hostname 保存并关闭文件。然后重新加载后缀。 sudo systemctl reload postfix 请注意,尽管大多数合法邮件服务器都有HELO/EHLO主机名的有效记录,但有时合法邮件服务器不满足此要求。你需要用check_helo_访问权限将他们列入白名单。 smtpd_helo_required = yes smtpd_helo_restrictions = permit_mynetworks permit_sasl_authenticated check_helo_access hash:/etc/postfix/helo_access reject_invalid_helo_hostname reject_non_fqdn_helo_hostname reject_unknown_helo_hostname 然后需要创建/etc/postfix/helo_访问文件。 sudo nano /etc/postfix/helo_access 白名单合法邮件服务器的HELO/EHLO主机名,如下所示。 optimus-webapi-prod-2.localdomain OK va-massmail-02.rakutenmarketing.com OK 很可能您不知道哪些主机名要列入白名单,然后只需复制上面两行,这是我的helo_access文件中仅有的几行。以后您可以添加更多主机名。保存并关闭文件。然后运行以下命令创建/etc/postfix/helo_访问。数据库文件。 sudo postmap /etc/postfix/helo_access 然后重新加载后缀。 sudo systemctl reload postfix 提示#3:如果SMTP客户端主机名没有有效记录,请拒绝电子邮件 合法的电子邮件服务器也应该有一个有效的主机名A记录。从记录返回的IP地址应与电子邮件服务器的IP地址匹配。要过滤来自没有有效记录的主机的电子邮件,请编辑Postfix主配置文件。 sudo nano /etc/postfix/main.cf 在smtpd_发送方_限制中添加以下两行。 reject_unknown_reverse_client_hostname reject_unknown_client_hostname 例子: smtpd_sender_restrictions = permit_mynetworks permit_sasl_authenticated reject_unknown_reverse_client_hostname reject_unknown_client_hostname 保存并关闭文件。然后重新启动Postfix以使更改生效。 sudo systemctl restart postfix 请注意,reject_unknown_client_主机名不需要SMTP客户端的HELO。它将从PTR记录中获取主机名,然后检查A记录。 提示#4:如果来自域的邮件既没有MX记录也没有记录,则拒绝电子邮件 邮寄地址也称为信封邮寄地址。一些垃圾邮件发送者使用邮件发件人地址中不存在的域。如果域名没有MX记录,Postfix将找到主域名的a记录并向该主机发送电子邮件。如果发件人域既没有MX记录也没有记录,Postfix将无法向该域发送电子邮件。那么,为什么不拒绝你无法回复的电子邮件呢? 要过滤此类垃圾邮件,请编辑Postfix主配置文件。 sudo nano /etc/postfix/main.cf 在smtpd_发送方_限制中添加以下行。如果MAIL FROM命令提供的地址的域名既没有MX记录也没有记录,它将拒绝电子邮件。 reject_unknown_sender_domain 例子: smtpd_sender_restrictions = permit_mynetworks permit_sasl_authenticated reject_unknown_sender_domain reject_unknown_reverse_client_hostname reject_unknown_client_hostname 保存并关闭文件。然后重新启动Postfix以使更改生效。 sudo systemctl restart postfix 请注意,我将此限制置于其他拒绝限制之上。根据我的经验,如果它低于其他拒绝限制,它将不起作用。(可能这只发生在我的电子邮件服务器上。) 提示#5:在后缀中启用灰色列表 根据SMTP协议的要求,如果传递失败,任何合法的SMTP客户端都必须能够重新发送电子邮件。(默认情况下,Postfix配置为在通知发件人邮件无法送达之前多次重新发送失败的电子邮件。)许多垃圾邮件发送者通常只发送一次,不会重试。 Postgrey是Postfix的灰色列表策略服务器。Debian和Ubuntu用户可以从默认存储库安装postgrey。 sudo apt install postgrey CentOS/RHEL用户可以从EPEL存储库安装它。 sudo dnf install epel-release sudo dnf install postgrey 一旦安装完毕,用systemctl启动。 sudo systemctl start postgrey 启动时启用自动启动。 sudo systemctl enable postgrey 在Debian和Ubuntu上,它监听本地主机(IPv4和IPv6)上的TCP端口10023。 sudo netstat -lnpt | grep postgrey 在CentOS/RHEL上,Postgrey监听Unix套接字(/var/spool/postfix/postgray/socket)。 接下来,我们需要编辑Postfix主配置文件,使其使用greylisting策略服务器。 sudo nano /etc/postfix/main.cf 如果您使用的是Debian或Ubuntu,请在smtpd_recipient_restrictions中添加以下行。 check_policy_service inet:127.0.0.1:10023 如果使用CentOS/RHEL,则需要添加以下行。 check_policy_service unix:/var/spool/postfix/postgrey/socket 如果您不知道,上述屏幕截图中的check_policy_service unix:private/policy d spf指令将在发送方的域上生成Postfix check spf记录。此指令要求您安装和配置postfix policyd spf python包。 保存并关闭文件。然后重新启动Postfix。 sudo systemctl restart postfix 从现在起,如果发件人三元组(发件人IP地址、发件人电子邮件地址、收件人电子邮件地址)是新的,Postgrey将拒绝电子邮件。下面是/var/log/mail中的日志消息。日志显示一个新的发送方三元组。动作“greylist”表示此电子邮件已被拒绝。 postgrey[1016]: action=greylist, reason=new, client_name=unknown, client_address=117.90.24.148/32, [email protected], [email protected] 根据我的经验,中国的垃圾邮件发送者喜欢在每封邮件中使用一个虚假、外观怪异、随机生成的发件人地址,所以将这些虚假的电子邮件地址添加到黑名单并不能阻止他们。另一方面,他们从不尝试用相同的发件人地址重新发送被拒绝的电子邮件,这意味着greylisting可以非常有效地阻止此类垃圾邮件。 修复Debian&amp;Ubuntu 如果在邮件日志(/var/log/mail.log)中看到以下错误 warning: connect to 127.0.0.1:10023: Connection refused warning: problem talking to server 127.0.0.1:10023: Connection refused 问题是postgrey没有运行。您需要在/etc/default/postgray文件中指定127.0.0.1作为侦听地址。所以,改变下面这句话 POSTGREY_OPTS="--inet=10023" 到 POSTGREY_OPTS="--inet=127.0.0.1:10023" 然后重新启动postgrey。 sudo systemctl restart postgrey 检查它是否正在收听: sudo netstat -lnpt | grep 10023 如何最大限度地减少糟糕的用户体验 Greylisting可能会给最终用户带来不好的体验,因为用户必须再等待几分钟才能收到电子邮件。为了尽量减少这种糟糕的体验,您可以创建一个白名单,并使用指向同一主机的第二条MX记录。 白名单 Post格雷附带两个白名单文件(/etc/postgray/whitelist_客户端和/etc/postgray/whitelist_收件人)。前者包含主机名列表,后者包含收件人地址列表。 默认情况下,谷歌的邮件服务器被列入白名单。不管发件人使用的是@gmail。com地址或其他地址,只要发件人使用谷歌的邮件服务器,Postgrey不会拒绝该邮件。我的/var/log/mail中的以下行。日志文件显示了这一点。 postgrey[1032]: action=pass, reason=client whitelist, client_name=mail-yb0-f190.google.com 注意:您还可以使用sudo journalctl-u postgray命令查看postgrey日志。 您可以在/etc/postgray/whitelist_clients文件中添加其他主机名,如 facebook.com bounce.twitter.com blogger.com email.medium.com 可以使用名为pflogsumm的工具获取这些主机名,我将在本文后面讨论。保存并关闭文件,然后重新启动PostGray。 sudo systemctl restart postgrey 创建另一个具有相同IP地址的MX主机名 您可以为您的域名指定多个MX记录,如下所示。 Record Type    Name      Mail Server         Priority MX @ mail.yourdomain.com 0 MX @ mail2.yourdomain.com 5 发件人将尝试第一个邮件服务器(优先级为0)。如果是邮件。你的地盘。com通过greylisting拒绝电子邮件,然后发件人会立即尝试第二个邮件服务器(优先级为5)。 如果两个邮件服务器主机名具有相同的IP地址,那么当发件人尝试第二个邮件服务器主机名时,该电子邮件将立即被接受(如果所有其他检查都通过),最终用户将不会注意到由灰色列表引起的电子邮件延迟。 请注意,这需要您在/etc/default/postgray(Debian&amp;Ubuntu)或/etc/sysconfig/postgray(CentOS/RHEL)中设置一个非常小的延迟时间,比如1秒。延迟时间告诉SMTP客户端在再次发送之前要等待多少秒。如果延迟时间不够短,则第二次电子邮件发送仍将被拒绝。 Debian/Ubuntu POSTGREY_OPTS="--inet=127.0.0.1:10023 --delay=1" 森托斯/瑞尔 OSTGREY_DELAY="--delay=1" 重新启动Postgrey。 sudo systemctl restart postgrey 还要注意,并非所有邮件服务器都会立即尝试第二台MX主机。 提示#6:使用公共实时黑名单 有些垃圾邮件是从具有有效主机名、有效PTR记录且可以通过灰色列表的服务器发送的。在这种情况下,您可以使用黑名单来拒绝垃圾邮件。有许多公共实时黑名单(RBL),也称为DNSBL(基于DNS的列表)。实时性意味着列表总是在变化。IP地址或域名可能今天在列表上,明天不在列表中,因此根据查询列表的时间,您可能会得到不同的结果。 你可以使用多个黑名单来阻止垃圾邮件。去https://www.debouncer.com还有我的工具箱。com,输入垃圾邮件发送者的域和IP地址,查看哪些黑名单正在阻止它们,然后你可以使用这些黑名单。例如,我发现垃圾邮件发送者被下列黑名单之一列入黑名单: dbl。斯帕姆豪斯。组织 禅。斯帕姆豪斯。组织 多种。乌里布。通用域名格式 伊夫穆里 InvaluementURI 因此,我可以在/etc/postfix/main中添加以下配置。cf文件。一些公开黑名单服务需要按月付费。目前,我正在使用spamhaus的免费服务。组织。 smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_policy_service unix:private/policyd-spf, check_policy_service inet:127.0.0.1:10023, reject_rhsbl_helo dbl.spamhaus.org, reject_rhsbl_reverse_client dbl.spamhaus.org, reject_rhsbl_sender dbl.spamhaus.org, reject_rbl_client zen.spamhaus.org 哪里: rhs代表右侧,即域名。 当客户端helo或EHLO主机名被列入黑名单时,reject_rhsbl_helo会发出Postfix reject电子邮件。 reject_rhsbl_reverse_client:当未经验证的反向客户端主机名被列入黑名单时,拒绝电子邮件。Postfix将从PTR记录中获取客户端主机名。如果主机名被列入黑名单,请拒绝该电子邮件。 当来自域的邮件被列入黑名单时,reject_rhsbl_发件人会发出Postfix reject电子邮件。 拒绝客户:这是一个基于IP的黑名单。当客户端IP地址被重新列出时,拒绝该电子邮件。 一些垃圾邮件发送者使用谷歌的邮件服务器,因此reject_rhsbl_helo无效,但大多数垃圾邮件发送者在邮件头中使用自己的域名,因此reject_rhsbl_sender将有效。 创建白名单 有时合法的电子邮件服务器会被列入黑名单。你可以创建一个白名单,这样他们就不会被阻止。创建以下文件。 sudo nano /etc/postfix/rbl_override 在这个文件中,白名单域名如下。 dripemail2.com  OK           //This domain belongs to drip.com mlsend.com      OK           //This domain belongs to mailerlite email marketing service 保存并关闭文件。然后运行以下命令创建rbl_覆盖。数据库文件。 sudo postmap /etc/postfix/rbl_override 编辑后缀主配置文件。 sudo nano /etc/postfix/main.cf 在smtpd_收件人_限制中,添加以下行。 check_client_access hash:/etc/postfix/rbl_override, 如下图所示。它应该放在其他RBL检查之上。 smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_policy_service unix:private/policyd-spf, check_policy_service inet:127.0.0.1:10023, check_client_access hash:/etc/postfix/rbl_override, reject_rhsbl_helo dbl.spamhaus.org, reject_rhsbl_reverse_client dbl.spamhaus.org, reject_rhsbl_sender dbl.spamhaus.org, reject_rbl_client zen.spamhaus.org 重新加载后缀以使更改生效。 sudo systemctl reload postfix 利用公共白名单减少误报 维护私有白名单有时是必要的,但也可以使用公共白名单,其中最著名的是dnswl。组织。目前,只有一个IP地址的白名单。域名白名单正在测试中。要使用它,请在smtpd_recipient_restrictions中输入以下行。 permit_dnswl_client list.dnswl.org=127.0.[0..255].[1..3], 如下图所示。应将其置于拒绝客户支票上方。 smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_policy_service unix:private/policyd-spf, check_policy_service inet:127.0.0.1:10023, check_client_access hash:/etc/postfix/rbl_override, reject_rhsbl_helo dbl.spamhaus.org, reject_rhsbl_reverse_client dbl.spamhaus.org, reject_rhsbl_sender dbl.spamhaus.org, permit_dnswl_client list.dnswl.org=127.0.[0..255].[1..3], reject_rbl_client zen.spamhaus.org 另一个著名的白名单是swl。斯帕姆豪斯。org,因此您也可以将其添加到配置中。 permit_dnswl_client swl.spamhaus.org, IP地址不可能同时在Spamhaus白名单和黑名单中列出,因此如果您只在Postfix中使用Spamhaus黑名单,则无需检查Spamhaus白名单。 我的后缀垃圾邮件过滤器 这是我的Postfix垃圾邮件过滤器的截图。 您可能想知道为什么前两个配置片段中没有逗号。你们可以用空格、回车或逗号分隔后缀配置文件中的值。如果在一个参数中添加逗号(smptd_recipient_restrictions,如上图所示),请确保用逗号分隔所有剩余值。 后缀日志报告 Pflogsumm是创建后缀日志摘要的好工具。在Ubuntu上安装时使用: sudo apt install pflogsumm 在CentOS/RHEL上,pflogsumm由postfix perl脚本包提供。 sudo dnf install postfix-perl-scripts 使用以下命令生成今天的报告。(请注意,在CentOS/RHEL上,邮件日志文件是/var/log/maillog。) sudo pflogsumm -d today /var/log/mail.log 生成昨天的报告。 sudo pflogsumm -d yesterday /var/log/mail.log 如果你想生成本周的报告。 sudo pflogsumm /var/log/mail.log 要在“正常”统计数据之前发出“问题”报告(反弹、延迟、警告、拒绝),请使用--problems first标志。 sudo pflogsumm -d today /var/log/mail.log --problems-first 要将电子邮件发件人地址附加到拒绝报告中的每个列表,请使用--rej add from标志。 sudo pflogsumm -d today /var/log/mail.log --rej-add-from 要在拒绝摘要中显示完整原因,请使用--verbose msg detail标志。 sudo pflogsumm -d today /var/log/mail.log --rej-add-from --verbose-msg-detail 您可以添加一个cron作业,使pflogsumm每天向您的电子邮件地址发送报告。 sudo crontab -e 添加以下行,它将在每天早上4:00生成报告。 0 4 * * * /usr/sbin/pflogsumm -d yesterday /var/log/mail.log --problems-first --rej-add-from --verbose-msg-detail -q 要通过电子邮件接收报告,请在所有cron作业上方添加以下行。 MAILTO="your-email-address" 你应该注意邮件拒绝细节部分,在那里你可以看到这些邮件被拒绝的原因,以及是否有任何误报。灰色列表拒绝是可以安全忽略的。 如果已经设置了MAILTO变量,但希望将后缀日志摘要发送到其他电子邮件地址,则可以在Cron作业中添加以下行。 0 4 * * * /usr/sbin/pflogsumm -d yesterday /var/log/mail.log --problems-first --rej-add-from --verbose-msg-detail -q | mutt -s "Postfix log summary"  your-email-address pflogsumm命令的输出被重定向到mutt,这是一个命令行邮件用户代理,它将使用输出作为电子邮件正文,并将其发送到最后指定的电子邮件地址。当然,您需要在Linux服务器上安装mutt。 sudo apt install mutt 或 sudo dnf install mutt 提示#7:设置OpenDMARC以拒绝未通过DMARC检查的电子邮件 DMARC(基于域的消息验证、报告和一致性)是一种互联网标准,允许域所有者防止其域名被电子邮件欺骗者使用。请阅读以下指南之一以设置OpenDMARC。 在Ubuntu上设置带有后缀的OpenDMARC以阻止电子邮件欺骗 在CentOS/RHEL上设置带有后缀的OpenDMARC以阻止电子邮件欺骗 不要做一个开放式接力赛 代表任何人向任何目的地转发邮件的邮件服务器称为开放中继。一开始,这是件好事。随着时间的推移,开放式中继被垃圾邮件发送者滥用,现在开放式中继经常被列入黑名单。下面是/etc/postfix/main中的一行。cf文件防止您的电子邮件服务器成为开放式中继。 smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination 这一行告诉Postfix只从可信网络中的客户端、通过SASL认证的客户端或配置为授权中继目的地的域转发电子邮件。安装Postfix后,它应该已经在主配置文件中。 如何阻止垃圾邮件发送者的SMTP验证泛滥 过了一段时间,垃圾邮件发送者知道他无法通过我的垃圾邮件过滤器。这个坏演员开始用SMTP身份验证连接淹没我的电子邮件服务器。在my/var/log/mail中。日志文件中,我可以找到以下消息。 Dec 14 09:58:37 email postfix/smtpd[22095]: connect from unknown[117.86.35.119] Dec 14 09:58:37 email postfix/smtpd[22119]: lost connection after AUTH from unknown[114.232.141.99] Dec 14 09:58:37 email postfix/smtpd[22119]: disconnect from unknown[114.232.141.99] ehlo=1 auth=0/1 commands=1/2 Dec 14 09:58:37 email postfix/smtpd[22119]: connect from unknown[180.120.191.91] Dec 14 09:58:38 email postfix/smtpd[22095]: lost connection after AUTH from unknown[117.86.35.119] Dec 14 09:58:38 email postfix/smtpd[22095]: disconnect from unknown[117.86.35.119] ehlo=1 auth=0/1 commands=1/2 Dec 14 09:58:38 email postfix/smtpd[22119]: lost connection after AUTH from unknown[180.120.191.91] Dec 14 09:58:38 email postfix/smtpd[22119]: disconnect from unknown[180.120.191.91] ehlo=1 auth=0/1 commands=1/2 Dec 14 09:58:38 email postfix/smtpd[22095]: connect from unknown[49.67.68.34] Dec 14 09:58:39 email postfix/smtpd[22106]: lost connection after AUTH from unknown[180.120.192.199] Dec 14 09:58:39 email postfix/smtpd[22106]: disconnect from unknown[180.120.192.199] ehlo=1 auth=0/1 commands=1/2 Dec 14 09:58:39 email postfix/smtpd[22095]: lost connection after AUTH from unknown[49.67.68.34] Dec 14 09:58:39 email postfix/smtpd[22095]: disconnect from unknown[49.67.68.34] ehlo=1 auth=0/1 commands=1/2 Dec 14 09:58:39 email postfix/smtpd[22119]: connect from unknown[121.226.62.16] Dec 14 09:58:39 email postfix/smtpd[22119]: lost connection after AUTH from unknown[121.226.62.16] Dec 14 09:58:39 email postfix/smtpd[22119]: disconnect from unknown[121.226.62.16] ehlo=1 auth=0/1 commands=1/2 Dec 14 09:58:39 email postfix/smtpd[22106]: connect from unknown[58.221.55.21] Dec 14 09:58:40 email postfix/smtpd[22106]: lost connection after AUTH from unknown[58.221.55.21] Dec 14 09:58:40 email postfix/smtpd[22106]: disconnect from unknown[58.221.55.21] ehlo=1 auth=0/1 commands=1/2 Dec 14 09:58:47 email postfix/smtpd[22095]: connect from unknown[121.232.65.223] Dec 14 09:58:47 email postfix/smtpd[22095]: lost connection after AUTH from unknown[121.232.65.223] Dec 14 09:58:47 email postfix/smtpd[22095]: disconnect from unknown[121.232.65.223] ehlo=1 auth=0/1 commands=1/2 Postfix设计为即使在压力条件下也能运行。它使用有限的内存,因此此类攻击的效果要差得多。然而,我不希望它们出现在我的邮件日志中,我们应该为合法的SMTP客户端保存smtpd进程,而不是浪费时间处理垃圾邮件。要阻止这种洪水攻击,可以使用fail2ban,这是一组服务器和客户端程序,用于限制暴力身份验证尝试。从默认的Ubuntu存储库安装fail2ban。 sudo apt install fail2ban 安装后,它将自动启动,如下所示: sudo systemctl status fail2ban fail2ban中包含的fail2ban服务器程序监视日志文件并发出ban/unban命令。默认情况下,如果客户端的身份验证失败5次,它将禁止客户端的IP地址10分钟。这项禁令是通过添加iptables防火墙规则来实现的。您可以通过运行以下命令来检查iptables规则。 sudo iptables -L 要在PostFX SMTP身份验证攻击中启用fail2ban,请在/etc/fail2ban/jail中添加以下行。本地文件。如果文件不存在,则创建此文件。 [postfix-flood-attack] enabled = true bantime = 10m filter = postfix-flood-attack action = iptables-multiport[name=postfix, port="http,https,smtp,submission,pop3,pop3s,imap,imaps,sieve", protocol=tcp] logpath = /var/log/mail.log 你可以将禁赛时间改为30米或12小时,以延长禁赛时间。如果您想将自己的IP地址列入白名单,请添加以下行,告诉fail2ban忽略您的IP地址。将12.34.56.78替换为您自己的IP地址。多个IP地址由空格分隔。 ignoreip = 127.0.0.1/8 ::1 12.34.56.78 默认情况下,允许的最大失败次数为5次。5次失败后,客户端将被禁止。要指定自定义的失败次数,请添加以下行。根据你的喜好更改号码。 maxretry = 4 保存并关闭文件。然后创建筛选规则文件。 sudo nano /etc/fail2ban/filter.d/postfix-flood-attack.conf 在这个文件中,我们指定,如果发现“身份验证来源后失去连接”,则禁止该IP地址。 [Definition] failregex = lost connection after AUTH from (.*)/[<HOST>/] ignoreregex = 保存并关闭文件。重新启动故障2以使更改生效。 sudo systemctl restart fail2ban 在fail2ban日志文件(/var/log/fail2ban.log)中,我可以找到如下消息,这表明IP地址114.223.221.55已被禁止,因为它的身份验证失败了5次。 2018-12-14 09:52:15,598 fail2ban.filter [21897]: INFO [postfix-flood-attack] Found 114.223.211.55 - 2018-12-14 09:52:15 2018-12-14 09:52:16,485 fail2ban.filter [21897]: INFO [postfix-flood-attack] Found 114.223.211.55 - 2018-12-14 09:52:16 2018-12-14 09:52:20,864 fail2ban.filter [21897]: INFO [postfix-flood-attack] Found 114.223.211.55 - 2018-12-14 09:52:20 2018-12-14 09:52:21,601 fail2ban.filter [21897]: INFO [postfix-flood-attack] Found 114.223.211.55 - 2018-12-14 09:52:21 2018-12-14 09:52:22,102 fail2ban.filter [21897]: INFO [postfix-flood-attack] Found 114.223.211.55 - 2018-12-14 09:52:22 2018-12-14 09:52:22,544 fail2ban.actions [21897]: NOTICE [postfix-flood-attack] Ban 114.223.211.55 我也可以检查我的iptables。 sudo iptables -L 输出: Chain f2b-postfix (1 references) target prot opt source destination REJECT all -- 195.140.231.114.broad.nt.js.dynamic.163data.com.cn anywhere reject-with icmp-port-unreachable RETURN all -- anywhere anywhere 这表明fail2ban已设置了一个iptables规则,拒绝195.140.231.114中的连接。宽阔的新界。js。动态163data。通用域名格式。cn是垃圾邮件发送者使用的主机名。 如果要手动阻止IP地址,请运行以下命令。将12.34.56.78替换为要阻止的IP地址。 sudo iptables -I INPUT -s 12.34.56.78 -j DROP 如果使用UFW(iptables前端),则运行 sudo ufw insert 1 deny from 12.34.56.78 to any 如何阻止未能通过后缀检查的重复发件人 一些垃圾邮件发送者使用自动化工具发送垃圾邮件。他们忽略后缀拒绝消息并继续发送垃圾邮件。例如,有时我可以在Postfix摘要报告中看到以下消息。 504 5.5.2 : Helo command rejected: need fully-qualified hostname; from=<[email protected]> to=<[email protected]> proto=ESMTP helo= (total: 1) 1 185.191.228.36 504 5.5.2 : Helo command rejected: need fully-qualified hostname; from=<[email protected]> to=<[email protected]> proto=ESMTP helo= (total: 1) 1 185.191.228.36 504 5.5.2 : Helo command rejected: need fully-qualified hostname; from=<[email protected]> to=<[email protected]> proto=ESMTP helo= (total: 1) 1 185.191.228.36 504 5.5.2 : Helo command rejected: need fully-qualified hostname; from=<[email protected]> to=<[email protected]> proto=ESMTP helo= (total: 1) 1 185.191.228.36 504 5.5.2 : Helo command rejected: need fully-qualified hostname; from=<[email protected]> to=<[email protected]> proto=ESMTP helo= (total: 1) 1 185.191.228.36 504 5.5.2 : Helo command rejected: need fully-qualified hostname; from=<[email protected]> to=<[email protected]> proto=ESMTP helo= (total: 1) 此垃圾邮件发送者继续发送垃圾邮件,忽略后缀拒绝消息:Helo命令拒绝:需要完全限定的主机名。为了阻止这种行为,我们还可以通过在/etc/Fail2ban/jail中添加以下行来使用Fail2ban。本地文件。 [postfix] enabled = true maxretry = 3 bantime = 1h filter = postfix logpath = /var/log/mail.log [postfix]监狱将使用Fail2ban附带的内置过滤器(/etc/Fail2ban/filter.d/postfix.conf)。保存并关闭文件。然后重启Fail2ban。 sudo systemctl restart fail2ban 现在,垃圾邮件发送者将不得不等待1个小时,然后再次攻击您的邮件服务器。 iRedMail用户的额外提示 iRedMail会自动使用后缀配置Postscreen。默认情况下,Postscreen中有一个pregreet测试来检测垃圾邮件。正如您可能已经知道的,在SMTP协议中,接收SMTP服务器应始终在发送SMTP服务器声明其主机名之前进行声明。一些垃圾邮件发送者违反此规则,并在接收SMTP服务器之前声明其主机名。 有时我可以在/var/log/mail中看到以下几行。日志文件,指示此发件人首先声明其主机名。这个垃圾邮件发送者只是想用无休止的连接攻击我的邮件服务器,但无意发送任何电子邮件。EHLO主机名ylmf pc清楚地表明,这些连接来自受损的家庭电脑。(ylmf是已不存在的中文Linux发行版的首字母缩写:雨林木风.) PREGREET 14 after 0.22 from [121.226.63.86]:64689: EHLO ylmf-pc/r/n PREGREET 14 after 0.24 from [121.232.8.131]:55705: EHLO ylmf-pc/r/n PREGREET 14 after 0.24 from [114.232.9.57]:62783: EHLO ylmf-pc/r/n iRedMail附带了一个fail2ban规则来过滤此类恶意活动。您可以在/etc/fail2ban/filter中看到以下行。d/后缀。iredmail。conf文件。 PREGREET .* from /[<HOST>/]:.* EHLO ylmf-pc 但是我认为这个过滤器的默认工作时间(1小时)太低了。打开/etc/fail2ban/jail。本地文件,并添加一个自定义的bantime参数,如下所示。 [postfix-iredmail] enabled = true max-retry = 1 bantime = 24h filter = postfix.iredmail logpath = /var/log/mail.log 我将bantime值设置为24小时,因为发件人显然正在使用受损的家用电脑。保存并关闭文件。重新启动故障2以使更改生效。 sudo systemctl restart fail2ban 运行本地DNS解析程序以加快DNS查找 正如您所见,Postfix需要查找DNS记录,以便分析每个SMTP对话框。要加快DNS查找,可以按照以下教程运行本地DNS解析器。 在Debian上运行自己的绑定DNS解析器 在Ubuntu 18.04上运行你自己的绑定DNS解析器 在Ubuntu 20.04上运行你自己的绑定DNS解析器 在CentOS/RHEL上运行自己的绑定DNS解析程序 大多数DNS黑名单都有查询限制。运行自己的本地DNS解析器来缓存DNS记录可以帮助您保持在查询限制之下。 下一步 我希望这7个后缀反垃圾邮件措施能帮助你阻止垃圾邮件。您可能还希望部署SpamAssassin等内容过滤器,以更好地检测垃圾邮件。 在Debian/Ubuntu上使用Postfix和SpamAssassin内容过滤器阻止垃圾邮件 在CentOS/RHEL上设置SpamAssassin以阻止垃圾邮件 和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?

    2022.03.24 浏览:437
  • 使用Postfix交通地图,Relayhost地图可灵活发送电子邮件

    在之前的教程中,我们讨论了如何使用iRedMail或Modoboa快速设置功能齐全的邮件服务器,还学习了如何使用Postfix SMTP服务器设置SMTP中继,以绕过端口25阻塞或IP黑名单。但是,您可能不想将整个电子邮件服务器设置为使用中继主机。我们可以配置Postfix传输映射和中继映射,以便通过中继主机发送一些电子邮件,其他电子邮件直接发送给收件人。 有许多SMTP中继服务。在本教程中,我使用Sendinblue,它允许您每月免费发送9000封电子邮件。SMTP中继服务保持良好的IP声誉。它们会阻止坏的发件人,并增加好的发件人,因此使用SMTP中继服务将增加访问收件箱的机会。 如何使用Postfix运输地图 传输映射定义了从收件人地址到传输方法的映射。默认情况下,Postfix中transport_maps参数的值未设置,可以通过以下方式进行检查: postconf transport_maps 样本输出: transport_maps = iRedMail和Modoboa使用MySQL/MariaDB数据库存储交通地图。如果使用iRedMail设置邮件服务器,则输出应如下所示: transport_maps = proxy:mysql:/etc/postfix/mysql/transport_maps_user.cf proxy:mysql:/etc/postfix/mysql/transport_maps_domain.cf 如果使用Modoboa设置邮件服务器,则输出应如下所示: transport_maps = proxy:mysql:/etc/postfix/sql-transport.cf proxy:mysql:/etc/postfix/sql-spliteddomains-transport.cf transport_将参数点映射到一个或多个transport lookup表。您可以编辑后缀主配置文件。 sudo nano /etc/postfix/main.cf 并通过在文件末尾添加以下行来设置值。/etc/postfix/transport文件将包含查找表。 transport_maps = hash:/etc/postfix/transport 如果使用iRedMail,可以找到transport_maps参数并将该值设置为 transport_maps = hash:/etc/postfix/transport proxy:mysql:/etc/postfix/mysql/transport_maps_user.cf proxy:mysql:/etc/postfix/mysql/transport_maps_domain.cf 如果使用Modoboa,可以找到tranport_maps参数,并将该值设置为: transport_maps = hash:/etc/postfix/transport proxy:mysql:/etc/postfix/sql-transport.cf proxy:mysql:/etc/postfix/sql-spliteddomains-transport.cf 查找表可以是文件,也可以是MySQL/MariaDB数据库表的形式。将按指定顺序搜索查找表,直到找到匹配项。 保存并关闭后缀主配置文件。接下来,我们需要创建查找表文件。 sudo nano /etc/postfix/transport 在这个文件中,我们可以定义从收件人地址到传输方法的映射。例如,我发现很多。pl(波兰)域正在使用一个特定的黑名单来阻止我的邮件服务器的IP地址。我可以在此文件中添加以下行,以便将电子邮件发送到。pl域将通过Sendinblue中继。 .pl relay:[smtp-relay.sendinblue.com]:587 有些人发现很难进入微软邮箱(hotmail.com、outlook.com等)的收件箱。你的电子邮件很可能会被放入垃圾邮件文件夹。嗯,你可以尝试使用Sendinblue向Microsoft邮箱用户发送电子邮件。Sendinblue甚至允许您查看收件人是否打开或单击了您电子邮件中的链接。所以我在文件中放了以下几行。 /.*@hotmail.*/i relay:[smtp-relay.sendinblue.com]:587 /.*@outlook.*/i relay:[smtp-relay.sendinblue.com]:587 /.*@live.*/i relay:[smtp-relay.sendinblue.com]:587 /.*@msn.*/i relay:[smtp-relay.sendinblue.com]:587 如果您想使用中继主机向特定收件人发送电子邮件,但直接向同一域中的所有其他收件人发送电子邮件,则可以添加如下行。 [email protected] relay:[smtp-relay.sendinblue.com]:587 如果某个SMTP服务器不使用默认的SMTP端口25,而是使用其他端口(如2525)来接收传入的电子邮件,则可以添加以下行 example.com        smtp:[mail.example.com]:2525 在这个文件中添加自己的域名是一个很好的做法,如下所示。 your-domain.com    local 这告诉Postfix,发送到您自己域的电子邮件应该在本地发送。这是规范域的默认行为。如果邮件服务器有多个虚拟域,则应添加所有虚拟域。 your-domain1.com         local your-domain2.com local 如果您只在文件中添加以下两行,而不添加其他行,这将使所有电子邮件(发送到您自己域的电子邮件除外)通过中继主机发送。星号(*)是代表任何电子邮件地址的通配符。 your-domain.com    local * relay:[smtp-relay.sendinblue.com]:587 我们还可以进行以下配置,这意味着发送到您自己域的电子邮件将在本地传递。发送到gmail的电子邮件。com通常通过执行MX查找来发送,所有其他电子邮件都通过中继主机发送。 your-domain.com    local gmail.com smtp * relay:[smtp-relay.sendinblue.com]:587 保存并关闭文件。然后运行以下命令来构建索引文件。 sudo postmap /etc/postfix/transport 重新启动Postfix以使更改生效。 sudo systemctl restart postfix 发送方相关中继映射 传输映射定义了从收件人地址到传输方法的映射。如果要定义从发送方地址到中继主机的映射,请使用发送方依赖的中继映射参数。默认情况下,其值为空,如下所示: postconf sender_dependent_relayhost_maps 输出: sender_dependent_relayhost_maps = iRedMail使用MySQL/MariaDB数据库存储依赖于发件人的relayhost映射。如果使用iRedMail设置邮件服务器,则输出应如下所示: sender_dependent_relayhost_maps = proxy:mysql:/etc/postfix/mysql/sender_dependent_relayhost_maps.cf 发送方依赖关系将参数点映射到一个或多个查找表。您可以编辑后缀主配置文件。 sudo nano /etc/postfix/main.cf 并通过在文件末尾添加以下行来设置值。/etc/postfix/relay_by_sender文件将包含查找表。 sender_dependent_relayhost_maps = hash:/etc/postfix/relay_by_sender 如果使用iRedMail,可以找到sender_dependent_relayhost_maps参数,并将该值设置为 sender_dependent_relayhost_maps = hash:/etc/postfix/relay_by_sender proxy:mysql:/etc/postfix/mysql/sender_dependent_relayhost_maps.cf 查找表可以是文件,也可以是MySQL/MariaDB数据库表的形式。将按指定顺序搜索查找表,直到找到匹配项。 保存并关闭后缀主配置文件。接下来,我们需要创建查找表文件。 sudo nano /etc/postfix/relay_by_sender 添加如下规则,这将使从[email ;protected]发送的电子邮件通过右侧指定的中继主机发送。 [email protected] [smtp-relay.sendinblue.com]:587 假设你有一个Linux服务器,它有两个网站,每个网站都有自己的邮件服务器,运行在两个不同的主机上,那么你可以添加以下两行代码,让每个网站使用自己的邮件服务器。 domain1.com                     [mail.domain1.com]:587 domain2.com [mail.domain2.com]:587 保存并关闭文件。然后构建索引文件。 sudo postmap /etc/postfix/relay_by_sender 重新启动Postfix以使更改生效。 sudo systemctl restart postfix 设置SMTP身份验证 现在我们需要设置SMTP身份验证,以便Postfix SMTP客户端可以使用中继主机。编辑后缀主配置文件。 sudo nano /etc/postfix/main.cf 在该文件末尾添加以下行。/etc/postfix/sasl_密码将包含用户名和密码。 # 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 如果您已经设置了relayhost参数,那么我建议像下面这样给它一个空值,因为我们现在使用的是传输映射和依赖于发送方的relayhost映射。 relayhost = 保存并关闭文件。然后创建/etc/postfix/sasl_passwd文件。 sudo nano /etc/postfix/sasl_passwd 将SMTP中继主机和SMTP凭据添加到此文件,如下所示。用SendinBlue提供的您自己的用户名和密码替换smtp_用户名和smtp_密码。注意用户名和密码之间有一个冒号。 [smtp-relay.sendinblue.com]:587 smtp_username:smtp_password 保存并关闭文件。然后用postmap创建相应的hash db文件。 sudo postmap /etc/postfix/sasl_passwd 现在你应该有一个文件/etc/postfix/sasl_passwd。db。重新启动Postfix以使更改生效。 sudo systemctl restart postfix 默认情况下,sasl_passwd和sasl_passwd。数据库文件可以被服务器上的任何用户读取。将权限更改为600,这样只有root用户才能读写这两个文件。 sudo chmod 0600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db 测试 现在,您可以向“传输映射”中定义的收件人发送测试电子邮件,或从“依赖发件人的relayhost映射”中指定的地址发送电子邮件。然后检查邮件日志(/var/log/mail.log或/var/log/maillog),看看它是否工作。 请注意,如果您使用的是第三方SMTP中继服务,如Sendinblue,则可能需要验证帐户中的域名,并编辑SPF和DKIM记录。 故障排除 错误#1 如果您的电子邮件未送达,而您在邮件日志(/var/log/maillog)中发现以下消息, Relay access denied (in reply to RCPT TO command)) 然后,您可能需要编辑/etc/postfix/sasl_passwd文件,并删除主机名后面的端口号,如下所示。 smtp-relay.sendinblue.com  smtp_username:smtp_password 保存并关闭文件。然后再次构建索引文件。 sudo postmap /etc/postfix/sasl_passwd 重新启动Postfix以使更改生效。 sudo systemctl restart postfix 现在,您可以刷新电子邮件队列(尝试发送以前的电子邮件)。 sudo postqueue -f 错误#2 请注意,发件人依赖关系主机映射不支持特殊关键字:smtp、本地等。如果在后缀日志中看到以下错误,则表示您使用了smtp关键字。 Host or domain name not found. Name service error for name=smtp type=A: Host not found 额外提示:smtp_回退_中继 可以在后缀中指定回退中继主机。这样,如果无法到达SMTP目标(没有MX记录,没有A记录)或主中继主机处于脱机状态,Postfix将使用回退中继主机。 编辑主后缀配置文件。 sudo nano /etc/postfix/main.cf 在此文件中添加以下行。更换二次泵。relayhost。com与实际的relayhost名称。此中继主机可以来自Sendinblue或任何其他SMTP中继服务。 smtp_fallback_relay = [secondary.relayhost.com]:587 保存并关闭文件。然后,您应该编辑/etc/postfix/sasl_passwd文件,并像上面那样为回退中继主机添加SMTP凭据。最后,重新启动Postfix以使更改生效。 请注意,如果SMTP目的地使用greylisting临时拒绝电子邮件,那么您的Postfix SMTP服务器也将使用回退中继主机。 具有虚拟邮箱的每用户中继规则 假设你已经在Zoho这样的第三方服务上设置了商业电子邮件。现在你有了一个使用虚拟邮箱的自托管电子邮件服务器。你想在Zoho上保留旧的电子邮件地址,但在你自己的电子邮件服务器上创建新的电子邮件地址。在这种情况下,您需要创建每个用户的中继规则,以便将发送到旧电子邮件地址的电子邮件发送到Zoho邮件服务器。 编辑后缀主配置文件。 sudo nano /etc/postfix/main.cf 找到virtual_mailbox_maps参数,并将hash:/etc/postfix/transport添加到值字段。 virtual_mailbox_maps = hash:/etc/postfix/transport proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf, proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf 保存并关闭文件。然后在/etc/postfix/transport文件中,可以为旧电子邮件地址定义中继规则,如下所示。(注意:您也可以使用中继关键字而不是smtp。在这种情况下,它们都是正确的。) [email protected] smtp:[mx.zoho.com]:25 [email protected] smtp:[mx.zoho.com]:25 [email protected] smtp:[mx.zoho.com]:25 保存并关闭文件。然后为/etc/postfix/transport文件构建哈希表。 sudo postmap /etc/postfix/transport 然后重新启动Postfix。 sudo systemctl restart postfix 收尾 我希望本教程能帮助您使用后缀传输映射和依赖发件人的relayhost映射。和往常一样,如果你觉得这篇文章有用,订阅我们的免费时事通讯,获取更多提示和技巧。当心?

    2022.03.24 浏览:277