如何使用 VPN (CentOS / RHEL) 保護您的電子郵件服務器免受黑客攻擊 Linux 技術博客


在本教程中,我將與您分享我的提示和技巧 保護您的 CentOS / RHEL 電子郵件服務器免受黑客攻擊 使用自託管 VPN 服務器。許多垃圾郵件發送者正試圖入侵他人的電子郵件服務器。如果成功,他們會使用被黑的電子郵件服務器發送大量垃圾郵件或竊取有價值的數據。為什麼要使用自託管 VPN 服務器?您可以啟用白名單,以便只有連接到 VPN 服務器的受信任用戶才能訪問郵件服務器。

先決條件

假設你有 郵件服務器 它正在運行中。如果沒有,請按照以下教程之一設置您自己的郵件服務器。

  • 如何使用 iRedMail 在 CentOS 8 上輕鬆設置全功能郵件服務器

還假設您設置 VPN服務器如果沒有,請遵循以下教程之一。郵件服務器和 VPN 服務器可以運行在不同的主機上,也可以運行在同一台主機上。

  • 在 CentOS 上設置您自己的 WireGuard VPN 服務器

暗示為了降低操作複雜性,我們建議您在不同的主機上運行您的 VPN 服務器和郵件服務器。..如果您的郵件服務器和 VPN 服務器在同一台主機上運行,則需要執行其他步驟。這是為了配置 VPN 服務器的響應策略區域以覆蓋郵件服務器主機名的公共 DNSA 記錄。

  • 在 CentOS / RHEL BIND 解析器上設置響應策略區 (RPZ)

假設一個 DNSA 記錄 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 以保護管理面板和網絡郵件免受黑客攻擊。但是,這將禁用對所有虛擬主機的公共訪問。有些人可能有一個需要對 Internet 開放的虛擬主機 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 錯誤。

安全郵件服務器 nginx

阿帕奇

編輯 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>

apache 訪問控制 webmail

如果您有多個 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 錯誤。

保護管理面板和網絡郵件免受 apache 黑客攻擊

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 黑客的攻擊。與往常一樣,如果您覺得本文有用,請訂閱我們的免費通訊以獲取新教程。照顧好自己?