如何使用 VPN (CentOS/RHEL) 保护电子邮件服务器免受黑客攻击

在本教程中,我将与您分享我的提示和技巧 保护 CentOS/RHEL 电子邮件服务器免受黑客攻击 使用自托管 VPN 服务器。 许多垃圾邮件发送者正试图侵入其他人的电子邮件服务器。 如果成功,他们将使用被黑的电子邮件服务器发送大量垃圾邮件或窃取有价值的数据。 为什么我们使用自托管 VPN 服务器? 因为它允许您启用白名单,所以只有连接到 VPN 服务器的可信用户才能访问您的邮件服务器。

先决条件

假设你有一个 电子邮件服务器 启动并运行。 如果没有,请按照以下教程之一设置您自己的邮件服务器。

  • 如何使用 iRedMail 在 CentOS 8 上轻松设置全功能邮件服务器

还假设您已经设置了一个 VPN服务器. 如果没有,请按照以下教程之一进行操作。 邮件服务器和 VPN 服务器可以运行在不同的主机上,也可以运行在同一台主机上。

  • 在 CentOS 上设置您自己的 WireGuard VPN 服务器

暗示建议在不同的主机上运行 VPN 服务器和邮件服务器以降低操作复杂性. 如果邮件服务器和 VPN 服务器在同一台主机上运行,​​则需要额外的步骤,即在 VPN 服务器上设置响应策略区域以覆盖邮件服务器主机名的公共 DNS A 记录。

  • 在 CentOS/RHEL 上的 BIND 解析器中设置响应策略区 (RPZ)

假设 DNS A 记录 mail.yourdomain.com 决心 12.34.56.78,那么你需要在响应策略区创建一条记录,将其解析为VPN服务器的私有IP地址 10.10.10.1.

在下面的文本中,我使用 12.34.56.78 作为 VPN 服务器的公共 IP 地址。 如果VPN服务器和邮件服务器运行在同一台主机上,则需要更换 12.34.56.78 使用 VPN 服务器的私有 IP 地址 10.10.10.1.

步骤 1:将 VPN 服务器 IP 地址添加到防火墙白名单

一旦您启动并运行了邮件服务器和 VPN 服务器,您应该将 VPN 服务器的 IP 地址添加到邮件服务器防火墙的白名单中。 如果你使用 防火墙 (CentOS/RHEL),在邮件服务器上运行以下命令。 将 12.34.56.78 替换为 VPN 服务器的 IP 地址。

sudo firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="12.34.56.78" accept" 

您还可以将其他服务器的 IP 地址列入白名单。 例如,有些人可能有另一个需要通过电子邮件服务器发送电子邮件的 Web 服务器。 然后也将其添加到白名单中。

sudo firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="IP-address-of-the-other-web-server" accept"

重新加载 firewalld 以使更改生效。

sudo systemctl reload firewalld

第二步:关闭提交端口、IMAP端口和POP3端口

  • 提交端口: 587 和 465
  • IMAP 端口: 143 和 993
  • POP3 端口: 110 和 995

Mozilla Thunderbird 和 Microsoft Outlook 等邮件客户端使用端口 587 和 465 来提交外发电子邮件。 恶意行为者可以对端口 587 和 465 进行暴力攻击。

以下是在我的邮件日志中找到的示例(/var/log/maillog 在 CentOS/RHEL 上)。 坏人试图登录,但每次都未能通过 SASL 身份验证。

postfix/smtps/smtpd[18071]: Anonymous TLS connection established from unknown[92.118.38.56]: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits) postfix/smtps/smtpd[18071]: warning: unknown[92.118.38.56]: SASL LOGIN authentication failed: UGFzc3dvcmQ6 postfix/smtps/smtpd[18071]: lost connection after AUTH from unknown[92.118.38.56] postfix/smtps/smtpd[18071]: disconnect from unknown[92.118.38.56] ehlo=1 auth=0/1 rset=1 commands=2/3 postfix/smtps/smtpd[18071]: connect from unknown[92.118.38.56] postfix/smtps/smtpd[18071]: Anonymous TLS connection established from unknown[92.118.38.56]: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits) postfix/smtps/smtpd[18071]: warning: unknown[92.118.38.56]: SASL LOGIN authentication failed: UGFzc3dvcmQ6 postfix/smtps/smtpd[18071]: lost connection after AUTH from unknown[92.118.38.56] postfix/smtps/smtpd[18071]: disconnect from unknown[92.118.38.56] ehlo=1 auth=0/1 rset=1 commands=2/3 postfix/smtps/smtpd[18071]: connect from unknown[92.118.38.56] postfix/smtps/smtpd[18071]: Anonymous TLS connection established from unknown[92.118.38.56]: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits) postfix/smtps/smtpd[18071]: warning: unknown[92.118.38.56]: SASL LOGIN authentication failed: UGFzc3dvcmQ6 postfix/smtps/smtpd[18071]: lost connection after AUTH from unknown[92.118.38.56] postfix/smtps/smtpd[18071]: disconnect from unknown[92.118.38.56] ehlo=1 auth=0/1 rset=1 commands=2/3

我不想在我的邮件日志中看到这种活动,所以我只是 close 防火墙中的端口 587、465、143、993、110 和 995。 因为我的 VPN 服务器的 IP 地址被列入白名单,所以只有连接到我的 VPN 服务器的用户才能访问这些端口。

在 CentOS/RHEL 上,运行以下两个命令来禁用 imap, imaps, smtp-submission, smtps, pop3pop3s 服务。

sudo firewall-cmd --permanent --remove-service={smtp-submission,smtps,imap,imaps,pop3,pop3s}  sudo firewall-cmd --permanent --remove-port={587/tcp,465/tcp,143/tcp,993/tcp,110/tcp,995/tcp}

如果您看到类似的警告 Warning: NOT_ENABLED: smtps,您可以忽略警告。 重新加载 firewalld 以使更改生效。

sudo systemctl reload firewalld

当然,您需要保持端口 25 打开以接收来自其他 SMTP 服务器的电子邮件。

步骤 3:保护管理面板和 Webmail

我们可以 close 80 和 443 端口保护 admin 来自黑客的面板和网络邮件。 但是,这将禁止对所有虚拟主机进行公共访问。 有些人可能有虚拟主机 Apache/Nginx 需要打开到互联网。 我们可以使用内置的访问控制功能,而不是在防火墙中关闭端口 80 和 443 Apache/Nginx。

nginx

编辑webmail的虚拟主机文件,如

sudo nano /etc/nginx/conf.d/mail.your-domain.com.conf

server {...} 语境。 这将只允许 IP 地址 12.34.56.78 访问网络邮件,并拒绝所有其他 IP 地址。

allow 12.34.56.78; deny all;