CentOS7でFail2Banを使用してSSHを保護する方法
序章
SSHを介したサーバーへの接続は非常に安全ですが、SSHデーモン自体は、正しく機能するためにインターネットに公開する必要があるサービスです。 これには固有のリスクが伴い、加害者になる可能性のある人に攻撃のベクトルを提供します。
ネットワークに公開されているサービスはすべて、このように潜在的なターゲットになります。 これらのサービスのアプリケーションログに注意を払うと、ユーザーとボットによるブルートフォース攻撃を表す、体系的なログイン試行が繰り返されることがよくあります。
Fail2ban と呼ばれるサービスは、事前定義された失敗したログイン試行回数に基づいてiptablesファイアウォール構成を自動的に変更するルールを作成することにより、この問題を軽減できます。 これにより、サーバーはユーザーの介入なしに不正なアクセスの試みに応答できるようになります。
このガイドでは、CentOS7サーバーにFail2banをインストールして使用する方法について説明します。
CentOS7にFail2banをインストールする
Fail2banは公式のCentOSパッケージリポジトリでは利用できませんが、EPELプロジェクト用にパッケージ化されています。 エンタープライズLinux用のExtraPackagesの略であるEPELは、CentOSからが入手可能なリリースパッケージとともにインストールできます。
- sudo yum install epel-release
続行するように求められます。yを押してから、Enterを押します。
yum promptTransaction Summary
============================================================================
Install 1 Package
Total download size: 14 k
Installed size: 24 k
Is this ok [y/d/N]: y
これで、をインストールできるようになります。 fail2ban
パッケージ:
- sudo yum install fail2ban
再度、続行するように求められたら、yおよびEnterを押します。
インストールが完了したら、 systemctl
を有効にするには fail2ban
サービス:
- sudo systemctl enable fail2ban
ローカル設定を構成する
Fail2banサービスは、構成ファイルを /etc/fail2ban
ディレクトリ。 そこで、デフォルト値が呼ばれるファイルを見つけることができます jail.conf
. このファイルはパッケージのアップグレードによって上書きされる可能性があるため、その場で編集しないでください。 代わりに、という新しいファイルを作成します jail.local
. で定義された値 jail.local
それらをオーバーライドします jail.conf
.
jail.conf
が含まれています [DEFAULT]
セクション、続いて個々のサービスのセクション。 jail.local
これらの値のいずれかをオーバーライドできます。 さらに、 /etc/fail2ban/jail.d/
これらのファイルの両方の設定を上書きするために使用できます。 ファイルは次の順序で適用されます。
/etc/fail2ban/jail.conf
/etc/fail2ban/jail.d/*.conf
、アルファベット順/etc/fail2ban/jail.local
/etc/fail2ban/jail.d/*.local
、アルファベット順
どのファイルにも [DEFAULT]
セクション。最初に実行され、個々の刑務所のセクションが含まれる場合もあります。 特定のパラメーターに設定された最後のvavalueが優先されます。
の非常に単純なバージョンを書くことから始めましょう jail.local
. を使用して新しいファイルを開く nano
(または選択したエディター):
- sudo nano /etc/fail2ban/jail.local
以下を貼り付けます。
[DEFAULT]
# Ban hosts for one hour:
bantime = 3600
# Override /etc/fail2ban/jail.d/00-firewalld.conf:
banaction = iptables-multiport
[sshd]
enabled = true
これは3つの設定を上書きします:新しいデフォルトを設定します bantime
すべてのサービスで、使用していることを確認してください iptables
ファイアウォール構成の場合、 sshd
刑務所。
終了して新しいファイルを保存します( nano
、 Ctrl-X を押して終了し、 y を押して保存し、 Enter を押してファイル名を確認します)。 これで再起動できます fail2ban
を使用したサービス systemctl
:
- sudo systemctl restart fail2ban
The systemctl
コマンドは出力なしで終了するはずです。 サービスが実行されていることを確認するために、 fail2ban-client
:
- sudo fail2ban-client status
OutputStatus
|- Number of jail: 1
`- Jail list: sshd
特定の刑務所に関するより詳細な情報を入手することもできます。
- sudo fail2ban-client status sshd
利用可能な設定を調べる
のバージョン jail.local
上で定義したのは良いスタートですが、他の多くの設定を調整することもできます。 開ける jail.conf
、およびデフォルトのいくつかを調べます。 これらの値のいずれかを変更する場合は、の適切なセクションにコピーする必要があることに注意してください。 jail.local
インプレースで変更するのではなく、そこで調整します。
- sudo nano /etc/fail2ban/jail.conf
すべての刑務所のデフォルト設定
まず、スクロールします [DEFAULT]
セクション。
ignoreip = 127.0.0.1/8
Fail2banが無視する送信元アドレスを調整するには、に値を追加します。 ignoreip
パラメータ。 現在、ローカルマシンからのトラフィックを禁止しないように構成されています。 パラメータの最後にスペースで区切って追加することにより、無視する追加のアドレスを含めることができます。
bantime = 600
The bantime
パラメータは、クライアントが正しく認証に失敗したときにクライアントが禁止される時間の長さを設定します。 これは秒単位で測定されます。 デフォルトでは、これは600秒または10分に設定されています。
findtime = 600
maxretry = 3
注意したい次の2つのパラメータは findtime
と maxretry
. これらは連携して、クライアントが禁止されるべき条件を確立します。
The maxretry
変数は、クライアントが次のように定義された時間枠内に認証する必要がある試行回数を設定します。 findtime
、禁止される前に。 デフォルト設定では、Fail2banは、10分以内に3回ログインに失敗したクライアントを禁止します。
destemail = root@localhost
sendername = Fail2Ban
mta = sendmail
電子メールアラートを構成する場合は、 destemail
, sendername
、 と mta
設定。 The destemail
パラメータは、禁止メッセージを受信する必要がある電子メールアドレスを設定します。 The sendername
電子メールの「From」フィールドの値を設定します。 The mta
パラメータは、メールの送信に使用されるメールサービスを設定します。
action = $(action_)s
このパラメーターは、Fail2banが禁止を開始するときに実行するアクションを構成します。 値 action_
このパラメータの直前のファイルで定義されています。 デフォルトのアクションは、禁止時間が経過するまで、問題のあるホストからのトラフィックを拒否するようにファイアウォールを構成することです。
電子メールアラートを構成する場合は、この値を action_
に action_mw
. 電子メールに関連するログ行を含める場合は、次のように変更できます。 action_mwl
. メールアラートを使用する場合は、適切なメール設定が構成されていることを確認する必要があります。
個々の刑務所の設定
後 [DEFAULT]
、さまざまなサービスの個々の刑務所を構成するセクションに遭遇します。 これらには通常、 port
禁止され、 logpath
悪意のあるアクセスの試みを監視します。 たとえば、すでに有効にしたSSH刑務所 jail.local
次の設定があります。
[sshd]
port = ssh
logpath = %(sshd_log)s
この場合、 ssh
は標準SSHポートの事前定義変数であり、 %(sshd_log)s
Fail2banの標準構成の他の場所で定義された値を使用します(これにより、 jail.conf
異なるオペレーティングシステム間でポータブル)。
あなたが遭遇するかもしれないもう一つの設定は filter
これは、ログの行が認証の失敗を示しているかどうかを判断するために使用されます。
The filter
値は実際にはにあるファイルへの参照です /etc/fail2ban/filter.d
ディレクトリ、その .conf
拡張機能が削除されました。 このファイルには、ログの行が不良であるかどうかを判別する正規表現が含まれています。 このファイルはかなり複雑で、事前定義された設定が適切な行とよく一致しているため、このガイドではこのファイルについて詳しく説明しません。
ただし、そのディレクトリを調べると、使用可能なフィルタの種類を確認できます。
- ls /etc/fail2ban/filter.d
使用しているサービスに関連していると思われるファイルが表示された場合は、テキストエディタで開く必要があります。 ほとんどのファイルはかなりよくコメントされており、スクリプトがどのタイプの状態を防ぐように設計されているかを知ることができるはずです。 これらのフィルターのほとんどには、適切な(無効にされた)セクションがあります。 jail.conf
で有効にできること jail.local
必要に応じて。
たとえば、Nginxを使用してWebサイトにサービスを提供していると偽って、パスワードで保護されたサイトの一部がログイン試行で非難されていることに気づきます。 Fail2banに使用するように指示できます nginx-http-auth.conf
内でこの状態をチェックするファイル /var/log/nginx/error.log
ファイル。
これは実際にはすでにと呼ばれるセクションで設定されています [nginx-http-auth]
私たちの中で /etc/fail2ban/jail.conf
ファイル。 追加する必要があります enabled
のパラメータ nginx-http-auth
刑務所に jail.local
:
[DEFAULT]
# Ban hosts for one hour:
bantime = 3600
# Override /etc/fail2ban/jail.d/00-firewalld.conf:
banaction = iptables-multiport
[sshd]
enabled = true
[nginx-http-auth]
enabled = true
そして、再起動します fail2ban
サービス:
- sudo systemctl restart fail2ban
Fail2banログとファイアウォール構成を監視する
Fail2banのようなサービスが意図したとおりに機能していることを知っておくことが重要です。 を使用して開始します systemctl
サービスのステータスを確認するには:
- sudo systemctl status fail2ban
ここで何かがおかしいと思われる場合は、ログをチェックしてトラブルシューティングを行うことができます。 fail2ban
前回の起動以降のユニット:
- sudo journalctl -b -u fail2ban
次に、 fail2ban-client
の全体的なステータスを照会するには fail2ban-server
、または個々の刑務所:
- sudo fail2ban-client status
- sudo fail2ban-client status jail_name
最近のアクションの記録については、Fail2banのログをたどってください( Ctrl-C を押して終了します)。
- sudo tail -F /var/log/fail2ban.log
iptablesに設定されている現在のルールを一覧表示します。
- sudo iptables -L
各ルールを有効にするために必要なコマンドを反映した形式でiptablesルールを表示します。
- sudo iptables -S
結論
これで、サービスの基本的な禁止ポリシーを構成できるようになります。 Fail2banはセットアップが非常に簡単で、認証を使用するあらゆる種類のサービスを保護するための優れた方法です。
Fail2banの仕組みについて詳しく知りたい場合は、fail2banのルールとファイルの仕組みに関するチュートリアルを確認してください。