本教程將為您提供提示和技巧 保護您的 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
第 2 步:關閉提交、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
關閉防火牆中的端口 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 步:保護您的管理面板和網絡郵件
您可以關閉 80 和 443 端口以保護您的管理面板和網絡郵件免受黑客攻擊。但是,這會禁用對所有虛擬主機的公共訪問。有些人擁有需要暴露在互聯網上的虛擬主機 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;
保存並關閉文件。接下來,測試您的 Nginx 配置。
sudo nginx -t
如果測試成功,請重新加載 Nginx 以使更改生效。
sudo systemctl reload nginx
不在白名單上的用戶將看到 403 Forbidden 錯誤。
阿帕奇
編輯 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>
保存並關閉文件。接下來,測試您的 Apache 配置。
sudo apachectl -t
如果語法正確,請重新加載 Apache 以使更改生效。
sudo systemctl reload httpd
不在白名單上的用戶將看到 403 Forbidden 錯誤。
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
保存並關閉文件。然後給這個文件添加執行權限。
sudo chmod +x /root/certbot-renewal.sh
編輯 root 用戶的 crontab 文件。
sudo crontab -e
將以下行添加到文件末尾以每天運行一次 shell 腳本。
@daily bash /root/certbot-renewal.sh
保存並關閉文件。
關閉 SSH 端口?
VPN 服務器的 IP 地址被列入白名單,因此您也可以在防火牆中關閉 SSH 端口。然而,這樣做是危險的。 如果您的 VPN 服務器停止工作,您將自己鎖定在外。 為了保護您的 SSH 服務免受黑客攻擊,我們建議設置公鑰身份驗證或兩因素身份驗證。
- 在 CentOS/RHEL 上設置 SSH 公鑰認證的兩個簡單步驟
- 在 CentOS/RHEL 服務器上設置 SSH 雙重身份驗證 (2FA)
包起來
我們希望本教程可以幫助您保護您的電子郵件服務器免受 CentOS/RHEL 上的黑客攻擊。與往常一樣,如果您發現本文對您有幫助,請訂閱我們的免費時事通訊以獲取新教程。照顧好自己?