GNU/Linux >> Linux の 問題 >  >> Cent OS

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

このチュートリアルでは、 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を無効にします。 、imapssmtp-submissionsmtpspop3 および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)を設定する

Cent OS
  1. CentOS 8 /RHEL8にPuppetをインストールする方法

  2. CentOS 7 /RHEL7でNFSサーバーをセットアップする方法

  3. CentOS サーバーでメールを送信する方法を教えてください。

  1. RHEL 8 /CentOS8にvncサーバーをインストールする方法

  2. CentOS 7 /RHEL7でSysLogサーバーをセットアップする方法

  3. CentOS 7 /RHEL7にPuppet6.xをインストールする方法

  1. NextcloudをRHEL8/CentOS8サーバーにインストールする方法

  2. RHEL 8 /CentOS8サーバーにOwnCloudをインストールする方法

  3. RHEL 8 /CentOS8にPostgreSQLサーバーをインストールする方法