このチュートリアルでは、メールサーバーをハッキングから保護するためのヒントとコツを紹介します。 自己ホスト型VPNサーバーを使用します。多くのスパマーは、他の人の電子メールサーバーをハッキングしようとしています。成功した場合、彼らはハッキングされた電子メールサーバーを使用して、大量のスパムを送信したり、貴重なデータを盗んだりします。なぜセルフホストVPNサーバーを使用するのですか?ホワイトリストを有効にできるため、VPNサーバーに接続している信頼できるユーザーのみがメールサーバーにアクセスできます。
前提条件
メールサーバーがあることを前提としています 稼働中です。そうでない場合は、以下のチュートリアルのいずれかに従って、独自のメールサーバーを設定してください。
- iRedMailを使用してUbuntu20.04で本格的なメールサーバーを簡単にセットアップする方法
- iRedMailを使用してDebian10Busterでメールサーバーを簡単にセットアップする方法
また、VPNサーバーを設定していることも前提としています。 。そうでない場合は、以下のチュートリアルのいずれかに従ってください。メールサーバーとVPNサーバーは、別々のホストで実行することも、同じホストで実行することもできます。
- Ubuntuで独自のWireGuardVPNサーバーをセットアップする
- Debianで独自のWireGuardVPNサーバーをセットアップする
ヒント :操作の複雑さを軽減するために、VPNサーバーとメールサーバーを別々のホストで実行することをお勧めします 。メールサーバーとVPNサーバーが同じホストで実行されている場合は、追加の手順が必要です。つまり、メールサーバーのホスト名のDNSAレコードを上書きするようにVPNサーバーに応答ポリシーゾーンを設定します。
- Debian / Ubuntuの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アドレスをメールサーバーファイアウォールのホワイトリストに追加する必要があります。 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
ポート587および465は、MozillaThunderbirdやMicrosoftOutlookなどのメールクライアントが送信メールを送信するために使用します。ハッカーは、ポート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
サンプル出力
ご覧のとおり、IPv4とIPv6の両方のルールがあります。ポート587を閉じるには、ルール#16
を削除する必要があります および#6
。 (最初に、インデックス番号の大きいルールを削除する必要があります。)
sudo ufw delete 16 sudo ufw delete 6
次に、sudo ufw status numbered
を実行する必要があります ファイアウォールルールの新しいリストを取得するには、もう一度コマンドを実行します。一部のルールでインデックス番号が変更されていることに注意してください。
今回はポート465を閉じたいので、ルール#15
を削除する必要があります および#6
。
sudo ufw delete 15 sudo ufw delete 6
次に、同じ方法を使用してポート143、993、110、および995を閉じます。もちろん、他のSMTPサーバーからの電子メールを受信するには、ポート25を開いたままにしておく必要があります。
ステップ3:管理パネルとウェブメールの保護
管理パネルとウェブメールをハッキングから保護するために、ポート80と443を閉じることができます。ただし、これにより、すべての仮想ホストへのパブリックアクセスが禁止されます。一部の人々は、インターネットに開く必要がある仮想ホストをApache/Nginxに持っているかもしれません。ファイアウォールのポート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;
複数の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
などのウェブメールの仮想ホストファイルを編集します
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>が必要
複数のVPNサーバーがある場合は、次のように複数のIPアドレスを追加できます。
<LocationMatch "^/"> Require ip 12.34.56.78 12.34.56.79 </LocationMatch>が必要
ファイルを保存して閉じます。次に、Apache構成をテストします。
sudo apache2ctl -t
構文がOKの場合は、変更を有効にするためにApacheをリロードします。
sudo systemctl reload apache2
ホワイトリストに含まれていないユーザーには、403forbiddenエラーが表示されます。
CertbotTLS証明書の更新
Apache / Nginx仮想ホストでホワイトリストを有効にすると、Let’sEncryptサーバーがWebサーバーにアクセスするのもブロックされます。これはHTTP-01チャレンジでLet’sEncryptTLS証明書を更新するために必要です。この問題を解決するために、証明書の更新前にホワイトリストを無効にし、更新後に再度有効にすることができます。
/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 postfix dovecot
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 postfix dovecot
ファイルを保存して閉じます。次に、このファイルに実行権限を追加します。
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要素認証を設定することをお勧めします。
- UbuntuでパスワードなしのSSHログインを設定するための2つの簡単な手順
- UbuntuサーバーでSSH2要素認証(2FA)を設定する