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

Fail2BanでLinuxサーバーを保護する[初心者向けガイド]

Fail2Banとは何ですか?

SSHを有効にしている場合は、Linuxサーバーのログイン履歴を確認してください。 SSH経由でサーバーにログインしようとする膨大な数のIPを目にすると驚かれることでしょう。

これらのログイン試行を阻止するメカニズムがない場合、システムはブルートフォース攻撃を受けやすくなります。基本的に、スクリプト/ボットは、ユーザー名とパスワードのさまざまな組み合わせを試行することにより、システムでSSH接続を試行し続けます。

ここで、Fail2Banのようなツールが登場します。 Fail2Banは、悪意のあるログインからLinuxサーバーを保護するのに役立つ無料のオープンソースソフトウェアです。一定数のログイン試行が失敗した場合、Fail2Banは(一定期間)IPを禁止します。

Fail2Banは、基本設定でそのまま動作しますが、非常に構成可能です。好みに合わせて調整し、必要に応じてフィルターとルールを作成できます。

興味深いですね? Fail2Banをテストしてみませんか?記事の残りの部分を読んでフォローし、Fail2Banを自分で試してください。

LinuxへのFail2Banのインストール

Fail2Banの人気は、すべての主要なLinuxディストリビューションの公式リポジトリで利用できるという事実から推測できます。これにより、Fail2Banのインストールが簡単になります。

CentOSとRedHatにFail2Banをインストールする

システムに新しいソフトウェアをインストールするには、rootまたはsudoユーザーである必要があります。

システムが最新であり、EPELリポジトリがインストールされていることを確認する必要があります。

sudo yum update && sudo yum install epel-release

これで、次のコマンドを使用してFail2Banをインストールできます。

sudo yum install fail2ban

UbuntuとDebianにFail2Banをインストールする

まず、システムが更新されていることを確認します:

sudo apt update && sudo apt upgrade -y

次に、次のコマンドを使用してFail2Banをインストールします。

sudo apt install fail2ban
Fail2Ban構成ファイルについて

Fail2Banには、/ etc / fail2ban/fail2ban.confと/etc/fail2ban/jail.confの2つの主要な構成ファイルがあります。彼らが何をしているのか説明させてください。

/etc/fail2ban/fail2ban.conf :これは、Fail2Banデーモンの操作設定の構成ファイルです。ログレベル、ログファイル、ソケット、pidファイルなどの設定はここで定義されます。

/etc/fail2ban/jail.conf :ここですべての魔法が起こります。これは、デフォルトの禁止時間、IPを禁止するまでの再試行回数、IPのホワイトリストへの登録、メール送信情報などを構成できるファイルです。基本的に、このファイルからFail2Banの動作を制御します。

これらのファイルを変更する前に、Fail2Banは、これらのconfファイルの.localファイルを使用してコピーを作成することをお勧めします。これは、デフォルトのconfファイルが更新で上書きされる可能性があり、すべての設定が失われるためです。

sudo cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

それでは、jail.confファイルについて理解しましょう。 lessコマンドを使用してこの大きなファイルを読み取ると、かなり混乱するように見える場合があります。 confファイルは、コメントが多すぎてすべてを説明しようとします。だから、これを単純化させてください。

jail.confファイルはサービスに分割されています。 [デフォルト]セクションがあり、すべてのサービスに適用されます。そして、それぞれの設定(ある場合)でさまざまなサービスを見ることができます。これらのサービスはすべて角かっこで囲まれています。 [sshd]、[apache-auth]、[squid]などのセクションが表示されます。

コメントを削除すると、デフォルトのセクションは次のようになります。

[DEFAULT]
ignorecommand =
bantime = 10m
findtime = 10m
maxretry = 5
backend = auto
usedns = warn
logencoding = auto
enabled = false
mode = normal
filter = %(name)s[mode=%(mode)s]
destemail = [email protected]
sender = [email protected]
mta = sendmail
protocol = tcp
chain =
port = 0:65535
fail2ban_agent = Fail2Ban/%(fail2ban_version)s
banaction = iptables-multiport
banaction_allports = iptables-allports
action_abuseipdb = abuseipdb
action = %(action_)s

これらのパラメータのいくつかの意味をお話ししましょう。

  • bantime:禁止の長さを設定します。デフォルトは10分です。
  • findtime:IPに対するアクションが実行されるウィンドウ。デフォルトは10分です。 10時30分に特定のIPによって不正なログインが試行されたとします。同じIPが10:40までに最大再試行回数に達した場合、そのIPは禁止されます。それ以外の場合、10:40以降に失敗した次の試行は、最初の失敗した試行としてカウントされます。
  • maxretry:アクションが実行される前に失敗した再試行の数
  • usedns:「警告」設定は、逆引きDNSを使用してホスト名を検索し、ホスト名を使用して禁止しようとします。 noに設定すると、ホスト名ではなくIPが禁止されます。
  • destemail:アラートの送信先のメールアドレス(設定が必要)
  • 送信者:通知メールの送信者名
  • mta:通知メールに使用されるメール転送エージェント
  • banaction:このパラメーターは、/ etc / fail2ban / action.d / iptables-multiport.confファイルを使用して、最大再試行失敗後のアクションを設定します
  • プロトコル:禁止後にドロップされるトラフィックのタイプ

最大再試行、​​禁止時間、検索時間など、任意のjail(またはすべてのjail)に変更を加える場合は、jail.localファイルを編集する必要があります。

Fail2Banを使用してLinuxサーバーを保護する方法

Fail2Banを使用してLinuxのセキュリティを強化する方法をいくつか紹介します。

fail2banコマンドを実行するには、rootユーザーであるか、sudoアクセス権を持っている必要があることに注意してください。

サーバーでFail2Banを有効にし、実行中のすべてのjailを確認します

systemdコマンドを使用して、LinuxサーバーでFail2Banを起動および有効化できます。

systemctl start fail2ban
systemctl enable fail2ban

Fail2Banを有効にすると、fail2ban-clientコマンドでステータスとアクティブなjailを確認できます。

fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshd

ご参考までに、sshdjailはデフォルトで有効になっています。

Fail2Banログを参照

Fail2Banログは/var/log/fail2ban.logにあります。ログファイルの形式は次のとおりです。

2019-03-25 07:09:08,004 fail2ban.filter [25630]: INFO [sshd] Found 139.59.69.76 – 2019-03-25 07:09:07
2019-03-25 07:09:36,756 fail2ban.filter [25630]: INFO [sshd] Found 159.89.205.213 – 2019-03-25 07:09:36
2019-03-25 07:09:36,757 fail2ban.filter [25630]: INFO [sshd] Found 159.89.205.213 – 2019-03-25 07:09:36
2019-03-25 07:09:36,774 fail2ban.actions [25630]: NOTICE [sshd] Ban 159.89.205.213
2019-03-25 07:09:36,956 fail2ban.filter [25630]: INFO [sshd] Found 182.70.253.202 – 2019-03-25 07:09:36
2019-03-25 07:09:36,957 fail2ban.filter [25630]: INFO [sshd] Found 182.70.253.202 – 2019-03-25 07:09:36
2019-03-25 07:09:36,981 fail2ban.actions [25630]: NOTICE [sshd] Ban 182.70.253.202
2019-03-25 07:09:37,247 fail2ban.filter [25630]: INFO [sshd] Found 112.64.214.90 – 2019-03-25 07:09:37
2019-03-25 07:09:37,248 fail2ban.filter [25630]: INFO [sshd] Found 112.64.214.90 – 2019-03-25 07:09:37
2019-03-25 07:09:37,589 fail2ban.actions [25630]: NOTICE [sshd] Ban 112.64.214.90

IPを識別し、最大再試行のしきい値を超えるとIPを禁止することがわかります。

Fail2Banによって禁止されているIPを参照

1つの方法は、特定の刑務所のステータスを確認することです。この目的でFail2Banクライアントを使用できます。

fail2ban-client status <jail_name>

たとえば、Fail2Banによって禁止されているすべての不正なsshログインを確認する必要がある場合は、次の方法で使用できます。出力には、失敗した試行の合計と禁止されたIPの合計が表示されます。

[email protected]:~# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 14
| |- Total failed: 715
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 7
|- Total banned: 17
`- Banned IP list: 177.47.115.67 118.130.133.110 68.183.62.73 202.65.154.110 106.12.102.114 61.184.247.3 218.92.1.150

失敗したログインからSSH経由でログインしようとすると、次のようなエラーが発生するはずです

ssh: connect to host 93.233.73.133 port 22: Connection refused

Fail2Banを使用してIPを永続的に禁止する方法

これで、Fail2BanによるIPの禁止は一時的なものであることがわかりました。デフォルトでは10分間であり、攻撃者は10分後に再度ログインを試みることができます。

攻撃者は10分後にログインを試みるスクリプトを使用する可能性があるため、これはセキュリティリスクをもたらします。

では、Fail2Banを使用して恒久的な禁止をどのように設定しますか?そのための明確な答えはありません。

Fail2Banバージョン0.11以降、禁止時間は自動的に計算され、永続IPの禁止時間は指数関数的に増加します。

ただし、Fail2Banのバージョンを確認すると、おそらくバージョン0.10を実行していることになります。

fail2ban-server --version 
Fail2Ban v0.10.2
Copyright (c) 2004-2008 Cyril Jaquier, 2008- Fail2Ban Contributors
Copyright of modifications held by their respective authors.
Licensed under the GNU General Public License v2 (GPL).

以前のバージョンでは、負のbantime(bantime =-1)を使用でき、これは永続的な禁止と同等でしたが、この方法を試してみると、「Starting fail2ban:ERROR NOK:(」のようなエラーが表示される可能性があります。データベースディスクイメージの形式が正しくありません'、)'。

それほどクリーンではない回避策の1つは、禁止時間を1日、1週間、1か月、または1年のように増やすことです。これにより、システムで新しいバージョンが利用可能になるまで問題を回避できます。

Fail2BanによってブロックされたIPの禁止を解除する方法

まず、IPがブロックされているかどうかを確認します。 Fail2Banはiptablesで機能するため、iptableを調べて、サーバーによって禁止されているIPを確認できます。

iptables -n -L

禁止されているIPが多すぎる場合は、grepコマンドを使用する必要がある場合があります。

出力に指定されたIPアドレスが見つかった場合、それは禁止されています:

したがって、次のステップは、どの「刑務所」が前述のIPを禁止しているかを見つけることです。ここでは、fail2banログでGrepコマンドを使用する必要があります。

以下の出力でわかるように、IPはsshdjailによって禁止されています。

[email protected]:~# grep -E ‘Ban.*61.184.247.3’ /var/log/fail2ban.log
2019-03-14 13:09:25,029 fail2ban.actions [25630]: NOTICE [sshd] Ban 61.184.247.3
2019-03-14 13:52:56,745 fail2ban.actions [25630]: NOTICE [sshd] Ban 61.184.247.3

IPをブロックしている刑務所の名前がわかったので、fail2ban-clientを使用してIPの禁止を解除できます。

fail2ban-client set <jail_name> unbanip <ip_address>
Fail2BanでIPをホワイトリストに登録する方法

自分を禁止するのは良いことではありませんよね? Fail2Banの現在のセッションによってIPアドレスが禁止されないようにするには、次のようなコマンドを使用してIPをホワイトリストに登録できます。

fail2ban-client set <JAIL_NAME> addignoreip <IP_Address>

LinuxでIPアドレスを簡単に見つけることができます。私の場合は

sudo fail2ban-client set sshd addignoreip 203.93.83.113
These IP addresses/networks are ignored:
`- 203.93.83.113

IPを永続的にホワイトリストに登録する場合は、jail構成ファイルを編集する必要があります。上記のjailセクションに移動し、次のようにignoreip行を追加します。

ignoreip = 127.0.0.1/8 <IP_TO_BE_WHITELISTED>

システム上のすべてのjailからIPをホワイトリストに登録する場合は、/ etc / fail2ban / jail.localファイルを編集して、上記のようにDEFAULTセクションの下に行を追加することをお勧めします。

>

この変更を有効にするには、Fail2Banを再起動する必要があります。

刑務所でIPホワイトリストを表示する方法

次のコマンドを使用して、jailによってホワイトリストに登録されたすべてのIPを表示できます。

fail2ban-client get <JAIL_NAME> ignoreip

その刑務所のFail2Banによって無視されているすべてのIPが表示されるはずです:

sudo fail2ban-client set sshd addignoreip 203.93.83.113
These IP addresses/networks are ignored:
|- 127.0.0.0/8
|- ::1
`- 203.93.83.113
Fail2BanホワイトリストからIPを削除する方法

特定の刑務所のホワイトリストからIPを削除する場合は、次のコマンドを使用できます。

fail2ban-client set <JAIL_NAME> delignoreip <IP_Address>

IPを完全に削除する場合は、/ etc / fail2ban/jail.localファイルを編集する必要があります。

他に何がありますか?

Fail2Banを使用すると、さらに多くのことができます。このガイドでは、Fail2Banの使用を開始するための基本を説明します。アクション、メール通知、フィルターなどのトピックには触れていません。

Fail2Banの基本を理解したら、さらに詳しく調べることができます。とりあえず、それを試して、LinuxサーバーのSSHにセキュリティの層を追加してください。


Linux
  1. LinuxサーバーにDockerを使用してNextcloudをインストールする方法

  2. Linuxサーバーを保護するための6つの必須のオープンソースツール

  3. UNIX / Linux で Apache Web サーバーを保護するための 10 のヒント

  1. Linuxサーバーのネットワーク接続をnetstatで表示する

  2. SELinuxでコンテナを保護する

  3. LinuxメールサービスをSSL/TLSで保護する方法

  1. LinuxMint17でownCloud6を使用してクラウドストレージを作成します

  2. Linuxのセキュリティ:fail2banでシステムを保護する

  3. CSF ファイアウォールで Ubuntu サーバーを保護する方法