このチュートリアルでは、 CentOS/RHELメールサーバーをハッキングから保護するためのヒントとコツを紹介します。 自己ホスト型VPNサーバーを使用します。多くのスパマーは、他の人の電子メールサーバーをハッキングしようとしています。成功した場合、彼らはハッキングされた電子メールサーバーを使用して、大量のスパムを送信したり、貴重なデータを盗んだりします。なぜセルフホストVPNサーバーを使用するのですか?ホワイトリストを有効にできるため、VPNサーバーに接続している信頼できるユーザーのみがメールサーバーにアクセスできます。
前提条件
メールサーバーがあることを前提としています 稼働中です。そうでない場合は、以下のチュートリアルのいずれかに従って、独自のメールサーバーを設定してください。
- iRedMailを使用してCentOS8でフル機能のメールサーバーを簡単にセットアップする方法
また、VPNサーバーを設定していることも前提としています。 。そうでない場合は、以下のチュートリアルのいずれかに従ってください。メールサーバーとVPNサーバーは、別々のホストで実行することも、同じホストで実行することもできます。
- CentOSで独自のWireGuardVPNサーバーをセットアップする
ヒント :操作の複雑さを軽減するために、VPNサーバーとメールサーバーを別々のホストで実行することをお勧めします 。メールサーバーとVPNサーバーが同じホストで実行されている場合は、追加の手順が必要です。つまり、VPNサーバーに応答ポリシーゾーンを設定して、メールサーバーのホスト名のパブリックDNSAレコードを上書きします。
- CentOS / RHELのBINDリゾルバーで応答ポリシーゾーン(RPZ)を設定する
mail.yourdomain.com
のDNSAレコードを考えてみましょう 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アドレスをメールサーバーファイアウォールのホワイトリストに追加する必要があります。 Firewalldを使用する場合 (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
ポート587および465は、MozillaThunderbirdやMicrosoftOutlookなどのメールクライアントが送信メールを送信するために使用します。悪意のある攻撃者は、ポート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で、次の2つのコマンドを実行して、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
もちろん、他のSMTPサーバーからの電子メールを受信するには、ポート25を開いたままにしておく必要があります。
ステップ3:管理パネルとウェブメールの保護
管理パネルとウェブメールをハッキングから保護するために、ポート80と443を閉じることができます。ただし、これにより、すべての仮想ホストへのパブリックアクセスが禁止されます。一部の人々は、インターネットに開く必要がある仮想ホストをApache/Nginxに持っているかもしれません。ファイアウォールのポート80と443を閉じる代わりに、Apache/Nginxに組み込まれているアクセス制御機能を使用できます。
Nginx
などのウェブメールの仮想ホストファイルを編集します
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
ホワイトリストに含まれていないユーザーには、403forbiddenエラーが表示されます。
Apache
/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
構文がOKの場合は、変更を有効にするためにApacheをリロードします。
sudo systemctl reload httpd
ホワイトリストに含まれていないユーザーには、403forbiddenエラーが表示されます。
CertbotTLS証明書の更新
Apache / Nginx仮想ホストでホワイトリストを有効にすると、Let’sEncryptサーバーがWebサーバーにアクセスするのもブロックされます。これはHTTP-01チャレンジでLet’sEncryptTLS証明書を更新するために必要です。この問題を解決するために、証明書の更新前にホワイトリストを無効にし、更新後に再度有効にすることができます。
/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
ファイルの最後に次の行を追加して、シェルスクリプトが1日1回実行されるようにします。
@daily bash /root/certbot-renewal.sh
ファイルを保存して閉じます。
SSHポートを閉じますか?
VPNサーバーのIPアドレスはホワイトリストに登録されているため、ファイアウォールのSSHポートを閉じることもできます。ただし、そうすることにはリスクが伴います。 VPNサーバーが機能しなくなった場合は、ロックアウトされます。 SSHサービスをハッキングから保護するには、公開鍵認証または2要素認証を設定することをお勧めします。
- CentOS/RHELでSSH公開鍵認証を設定するための2つの簡単な手順
- CentOS /RHELサーバーでSSH2要素認証(2FA)を設定する