GNU/Linux >> Linux の 問題 >  >> Debian

VPNを使用したハッキン​​グから電子メールサーバーを保護する方法(Debian / Ubuntu)

このチュートリアルでは、メールサーバーをハッキングから保護するためのヒントとコツを紹介します。 自己ホスト型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)を設定する

Debian
  1. Ubuntu 18.04 /Ubuntu16.04およびDebian9にPuppet6.xをインストールする方法

  2. Ubuntu/DebianサーバーにPostfixとDovecotを使用してSpamassassinをインストールする方法

  3. OpenSSHを使用してUbuntu/DebianにSSHサーバーをインストールする方法

  1. Debian9でVSFTPDを使用してFTPサーバーをセットアップする方法

  2. vsftpd FTPサーバーをインストールし、Debian11でTLSを使用して保護する方法

  3. UbuntuでMail-in-a-Boxを使用してEメールサーバーをセットアップする方法

  1. Debian9でOpenVPNサーバーをセットアップする方法

  2. Debian10にISPConfigを使用してEメールサーバーをインストールする方法

  3. Debian11でPostfixAdminを使用してメールサーバーを設定する方法