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

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

先决条件

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

  • 如何使用iRedMail在Ubuntu 20.04上轻松设置完整的邮件服务器
  • 如何使用iRedMail在Debian 10 Buster上轻松设置邮件服务器

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

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

暗示建议在单独的主机上运行VPN服务器和邮件服务器,以减少操作复杂性。 如果邮件服务器和VPN服务器在同一主机上运行,​​则需要执行其他步骤,即在VPN服务器上设置响应策略区域以覆盖邮件服务器主机名的DNS A记录。

  • 在Debian / Ubuntu上的BIND Resolver中设置响应策略区域(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 Server IP地址添加到防火墙白名单

邮件服务器和VPN服务器启动并运行后,应将VPN服务器的IP地址添加到邮件服务器防火墙的白名单中。 如果您使用 UFW防火墙Debian / Ubuntu),在邮件服务器上运行以下命令。 将12.34.56.78替换为VPN服务器的IP地址。

sudo ufw insert 1 allow in from 12.34.56.78

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

sudo ufw insert 1 allow in from IP-address-of-the-other-web-server

步骤2:关闭提交端口,IMAP端口和POP3端口

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

邮件客户端(例如Mozilla Thunderbird和Microsoft Outlook)使用端口587和465提交外发电子邮件。 黑客可以在587和465端口上进行蛮力攻击。

以下是在我的邮件日志中找到的示例(/var/log/mail.log 在Debian / Ubuntu上, /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

我不想在邮件日志中看到这种活动,因此我只需要关闭防火墙中的端口587、465、143、993、110和995。 而且由于我的VPN服务器的IP地址已列入白名单,因此只有连接到我的VPN服务器的用户才能访问这些端口。

要关闭UFW防火墙中的这些端口,请首先列出您的防火墙规则。

sudo ufw status numbered

样品输出

sudo ufw状态编号

如您所见,同时存在IPv4和IPv6规则。 要关闭端口587,我需要删除规则 #12#5。 (您应该首先删除索引编号更高的规则。)

sudo ufw delete 12
sudo ufw delete 5

那你应该跑 sudo ufw status numbered 再次命令以获取防火墙规则的新列表。 请注意,某些规则的索引号已更改。

关闭ufw防火墙中的端口465

这次我要关闭端口465,因此我需要删除规则 #11#5

sudo ufw delete 11
sudo ufw delete 5

然后使用相同的方法关闭其他端口。 当然,您需要保持端口25开放才能接收来自其他SMTP服务器的电子邮件。

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

我们可以关闭端口80和443,以保护管理面板和网络邮件免遭黑客入侵。 但是,这将禁止公共访问所有虚拟主机。 有些人可能在Apache / Nginx中拥有虚拟主机,需要打开Internet。 无需关闭防火墙中的端口80和443,我们可以使用Apache / Nginx中的内置访问控制功能。

Nginx的

编辑网络邮件的虚拟主机文件,例如

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

将以下行添加到SSL服务器块。 这将仅允许IP地址 12.34.56.78 访问网络邮件,并拒绝所有其他IP地址。

allow 12.34.56.78;
deny all;

网络邮件白名单访问Nginx

如果有多个VPN服务器,则可以添加多个IP地址,如下所示:

allow 12.34.56.78;
allow 12.34.56.79;
deny all;

保存并关闭文件。 然后测试Nginx配置。

sudo nginx -t

如果测试成功,请重新加载Nginx以使更改生效。

sudo systemctl reload nginx

不在白名单中的用户将看到403禁止错误。

安全电子邮件服务器Nginx

阿帕奇

编辑网络邮件的虚拟主机文件,例如

sudo nano /etc/apache2/sites-enabled/mail.your-domain.com-le-ssl.conf

在之间添加以下行 <VirtualHost>...</VirtualHost> 标签。 这将仅允许IP地址 12.34.56.78 访问网络邮件,并拒绝所有其他IP地址。

    <LocationMatch "^/">
       Require ip 12.34.56.78
    </LocationMatch>

apache访问控制网络邮件

如果有多个VPN服务器,则可以添加多个IP地址,如下所示:

    <LocationMatch "^/">
       Require ip 12.34.56.78 12.34.56.79
    </LocationMatch>

保存并关闭文件。 然后测试Apache配置。

sudo apache2ctl -t

如果语法正确,请重新加载Apache以使更改生效。

sudo systemctl reload apache2

不在白名单中的用户将看到403禁止错误。

保护管理面板和Webmail免受黑客入侵

Certbot TLS证书续订

如果在Apache / Nginx虚拟主机中启用了白名单,则还将阻止“让我们加密”服务器访问您的Web服务器,这是使用HTTP-01挑战续订“让我们加密TLS”证书所必需的。 为了解决此问题,我们可以在证书更新之前禁用白名单,并在更新之后再次启用白名单。

在中创建一个shell脚本 /root/ 目录。

sudo nano /root/certbot-renewal.sh

如果您使用Nginx,请将以下行添加到此文件中。

#! /bin/bash

# disable whitelisting
sed -i 's/deny all;/#deny all;/g' /etc/nginx/conf.d/mail.your-domain.com.conf
systemctl reload nginx

# renew TLS certificate
certbot renew --quiet

# enable whitelisting
sed -i 's/#deny all;/deny all;/g' /etc/nginx/conf.d/mail.your-domain.com.conf
systemctl reload nginx

如果使用Apache,则将以下行添加到此文件中。

#! /bin/bash

# disable whitelisting
sed -i 's/Require ip/#Require ip/g' /etc/apache2/sites-enabled/mail.your-domain.com-le-ssl.conf
systemctl reload apache2

# renew TLS certificate
certbot renew --quiet

# enable whitelisting
sed -i 's/#Require ip/Require ip/g' /etc/apache2/sites-enabled/mail.your-domain.com-le-ssl.conf
systemctl reload apache2

保存并关闭文件。 然后向该文件添加执行权限。

sudo chmod +x /root/certbot-renewal.sh

然后编辑根用户的crontab文件。

sudo crontab -e

在文件末尾添加以下行,因此shell脚本每天运行一次。

@daily bash /root/certbot-renewal.sh

保存并关闭文件。

关闭SSH端口?

由于VPN服务器的IP地址已列入白名单,因此您也可以关闭防火墙中的SSH端口。 但是,这样做会带来风险。 如果您的VPN服务器停止工作,那么您将被锁定在自己的范围之外。 为了保护SSH服务免遭黑客攻击,建议您设置公共密钥身份验证或两因素身份验证。

  • 在Ubuntu上设置无密码SSH登录的2个简单步骤
  • 在Ubuntu服务器上设置SSH双向身份验证(2FA)

包起来

我希望本教程可以帮助您保护电子邮件服务器免遭黑客攻击。 您可能还需要查看其他安全性教程。

  • 如何在Debian,Ubuntu,Linux Mint上使用UFW防火墙
  • 在Ubuntu上设置自动安全更新(无人值守升级)
  • Canonical Livepatch Service:无需重新启动即可在Ubuntu上修补Linux内核

与往常一样,如果您发现这篇文章很有用,请订阅我们的免费新闻简报以获取新教程🙂

Sidebar