[ad_1]
在本教程中,我将与您分享我的提示和技巧 保护 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
, pop3
和 pop3s
服务。
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;
如果您有多个 VPN 服务器,您可以添加多个 IP 地址,如下所示:
allow 12.34.56.78; allow 12.34.56.79; deny all;
Save 和 close 文件。 然后测试 Nginx 配置。
sudo nginx -t
如果测试成功,请重新加载 Nginx 以使更改生效。
sudo systemctl reload nginx
不在白名单中的用户将看到 403 禁止错误。
Apache
编辑 webmail 的虚拟主机文件 /etc/httpd/conf.d/
目录,比如
sudo nano /etc/httpd/conf.d/mail.your-domain.com-le-ssl.conf
之间添加以下几行 <VirtualHost>...</VirtualHost>
标签。 这将只允许 IP 地址 12.34.56.78
访问网络邮件,并拒绝所有其他 IP 地址。
<LocationMatch "^/">
Require ip 12.34.56.78
</LocationMatch>
如果您有多个 VPN 服务器,您可以添加多个 IP 地址,如下所示:
<LocationMatch "^/"> Require ip 12.34.56.78 12.34.56.79 </LocationMatch>
Save 和 close 文件。 然后测试 Apache 配置。
sudo apachectl -t
如果语法正常,则重新加载 Apache 以使更改生效。
sudo systemctl reload httpd
不在白名单中的用户将看到 403 禁止错误。
Certbot TLS 证书更新
如果您启用白名单 Apache/Nginx 虚拟主机,那么您还将阻止 Let’s Encrypt 服务器访问您的 Web 服务器,这是更新 Let’s Encrypt TLS 证书和 HTTP-01 质询所必需的。 为了解决这个问题,我们可以在证书更新前关闭白名单,更新后重新开启。
在里面创建一个shell脚本 /root/
目录。
sudo nano /root/certbot-renewal.sh
如果您使用 Nginx,请将以下几行添加到此文件中。
#! /bin/bash # disable whitelisting in the Nginx virtual host 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 in the Apache virtual host sed -i 's/Require ip/#Require ip/g' /etc/httpd/conf.d/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/httpd/conf.d/mail.your-domain.com-le-ssl.conf systemctl reload apache2
Save 和 close 文件。 然后给这个文件添加执行权限。
sudo chmod +x /root/certbot-renewal.sh
编辑 root 用户的 crontab 文件。
sudo crontab -e
在文件末尾添加以下行,以便 shell 脚本每天运行一次。
@daily bash /root/certbot-renewal.sh
Save 和 close 文件。
关闭SSH端口?
由于您的 VPN 服务器的 IP 地址已列入白名单,您还可以 close 防火墙中的 SSH 端口。 然而,这样做是有风险的。 如果您的 VPN 服务器停止工作,那么您就会将自己锁在外面。 为了保护 SSH 服务免受黑客攻击,我建议设置公钥身份验证或双因素身份验证。
- 在 CentOS/RHEL 上设置 SSH 公钥认证的 2 个简单步骤
- 在 CentOS/RHEL 服务器上设置 SSH 两步验证 (2FA)
包起来
我希望本教程能帮助您保护您的电子邮件服务器免受 CentOS/RHEL 上的黑客攻击。 与往常一样,如果您发现这篇文章有用,请订阅我们的免费时事通讯以获取新教程。 保重?
[ad_2]