\r\n\r\n
fail2banを使用すると、Linuxコンピュータは、障害が発生したあまりにも多くのIPアドレスへの接続を自動的にブロックします。自主規制のセキュリティなんです!その使い方をご紹介します。
ウィンザー公爵夫人、ウォリス・シンプソンの有名な言葉に、"You can never be too rich or too thin "というのがあります。私たちはこの言葉を、相互接続された現代社会に合わせて更新しました。「注意しすぎることも、安全すぎることもない」。
コンピュータがSecure Shell(SSH)接続などの着信接続要求を受け入れる場合や、Webサーバーやメールサーバーとして動作する場合、ブルートフォース攻撃やパスワードの推測から保護する必要があります。
そのためには、アカウントへのアクセスを許可していない接続要求を監視する必要があります。短期間に何度も認証に失敗するようであれば、それ以上の試みを禁止すべきです。
そのためには、すべてのプロセスを自動化することが唯一の現実的な方法です。fail2banは、簡単な設定を行うだけで、監視、禁止、解除の管理を代行します。
fail2banは、Linuxのファイアウォールiptablesと統合されています。ファイアウォールにルールを追加することで、不審なIPアドレスに対して禁止を実施します。この説明をわかりやすくするために、iptablesと空のルールセットを使用します。
もちろん、セキュリティを重視するのであれば、よく設定された人口ルールセットを持つファイアウォールをお持ちでしょう。fail2banは、自身のルールを追加・削除するだけで、通常のファイアウォール機能はそのまま維持されます。
次のコマンドで空のルールセットを表示することができます。
sudo iptables -L関連:iptables初心者ガイド、Linuxファイアウォール
この記事の調査に使用したすべてのディストリビューションへのfail2banのインストールは簡単でした。Ubuntu 20.04の場合、コマンドは以下のようになります。
sudo apt-get install fail2banFedora 32の場合は、次のように入力します。
sudo dnf install fail2banManjaro 20.0.1では、pacmanを使いました。
sudo pacman -Sy fail2banfail2banのインストールにはjail.confというファイルが含まれており、アップグレードするとこのファイルが上書きされるため、このファイルをカスタマイズした場合、変更した内容が失われます。
代わりに、jail.conf ファイルをコピーして jail を呼び出すようにします。現地で設定をjail.confに変更することでfail2banは自動的に両方のファイルを読み込みます。
コピーする方法は次のとおりです。
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.localこのファイルをお好みのエディタで開いてください。ここではgeditを使用します:.
sudo gedit /etc/fail2ban/jail.localこのファイルには、[DEFAULT]と[sshd]の2つのセクションを探します。ただし、実際のセクションを探すのに注意が必要です。これらのタグは、それを説明するセクションの最上部近くにも表示されますが、これは私たちが望むものではありません。
40行目付近に[DEFAULT]というセクションがありますが、このセクションはコメントや説明が多く、長いです。
90行目あたりまでスクロールすると、必要な4つの設定があります。
同一IPアドレスからの接続がfindtime中にmaxretry失敗した場合、bantime中にこれらの試みは無効となる。唯一の例外は、ignoreipリストにあるIPアドレスです。
fail2banは、IPアドレスを一定期間ジェイルに入れます。fail2banは多数の異なるジェイルをサポートしており、各ジェイルは単一の接続タイプに適用される設定を表します。これにより、様々な接続形態に異なる設定を適用することができます。また、選択した接続タイプのみをfail2banモニターに監視させることもできます。
DEFAULT]セクションの名前から推測されるかもしれませんが、今回調べた設定はデフォルト値です。では、SSH jailの設定を見てみましょう。
関連:Linuxでテキストファイルをグラフィカルに編集するgeditの使い方
Jailsは、fail2banのモニタリングにおける接続タイプの入力と終了を可能にします。デフォルトの設定がJailに適用する設定と一致しない場合、bantime、findtime、maxretryに特定の値を設定することができます。
280行目までスクロールすると、[sshd]の項目があります。
ここでは、SSH接続に関する値を設定することができます。この刑務所をモニタリングとテイクダウンに含めるには、次の行を入力する必要があります。
enabled = trueまた、次のような行を入力します。
maxretry = 3デフォルトは5ですが、SSH接続をより慎重に行いたいので、3にしてから保存し、ファイルを閉じました。
このjailをfail2banのモニタリングに追加し、デフォルト設定の1つをオーバーライドしました。刑務所は、デフォルトの設定と刑務所独自の設定を組み合わせて使用することができます。
ここまでで、fail2banのインストールと設定が完了しましたので、次は自動起動サービスとして動作させる必要があります。そして、期待通りに動作することを確認するために、テストをする必要があります。
fail2banをサービスとして有効にするために、systemctlコマンドを使用します。
sudo systemctl enable fail2banまた、サービスを開始する際にも使用しています。
sudo systemctl start fail2banまた、systemctl:を使用してサービスの状態を確認することもできます。
sudo systemctl status fail2ban.serviceすべて順調で、ゴーサインも出たので、すべて順調でした。
fail2banが同意するかどうか見てみましょう。
sudo fail2ban-client statusこれは私たちの設定を反映したものです。sshd]という名前のJailを有効にしています。前のコマンドにジェイルの名前を入れておけば、もっと深く掘り下げられたかもしれません。
sudo fail2ban-client status sshd失敗した試行回数と禁止されたIPアドレスがリストアップされます。もちろん、現在すべての統計はゼロです。
別のコンピュータで、テスト機にSSH接続要求を行い、わざと間違ったパスワードを入力します。各接続試行では、正しいパスワードを取得するために3回の試行が行われます。
maxretry値は、パスワードの試行に3回失敗した後ではなく、接続に3回失敗した後にトリガーされます。したがって、接続に失敗するためには、3つの不正なパスワードを入力する必要があります。
その後、再度接続を試み、さらに3回パスワードを間違えて入力することになります。3回目の接続要求に対する最初の不正なパスワードの試行がfail2banのトリガーとなるはずです。
3回目の接続要求で1回目の誤ったパスワードを入力した後、リモートコンピュータから応答が得られませんでした。何の説明もなく、ただ冷たくあしらわれただけだった。
Ctrl+Cでコマンドプロンプトに戻る必要があります。もう一度やってみると、違う答えが返ってくるでしょう。
ssh [email protected]以前は「権限がありません」というエラーメッセージでしたが、今回は完全に接続が拒否されました。
sshd]刑務所の詳細に戻りましょう。
sudo fail2ban-client status sshd3件の失敗があり、1件のIPアドレス(192.168.4.25)が禁止された。
先に述べたように、fail2banはファイアウォールのルールセットにルールを追加することで禁止を実施する。ルールセットをもう一度見てみましょう(以前は空でした)。
sudo iptables -LSSH トラフィックを f2b sshd チェーンに送信するルールが入力ポリシーに追加されました。 f2b sshd チェーンのルールは 192.168.4.25 からの SSH 接続を拒否します。バンタイムの初期設定は変更しておりませんので、10分以内にIPアドレスのバインドが解除され、新たに接続要求ができるようになります。
禁止期間を長く設定した場合(例:数時間)、あるIPアドレスがより迅速に別の接続要求を行うことを許可したい場合は、早めに禁止期間を設定することができます。
そのために、次のようなコマンドを入力します。
sudo fail2ban-client set sshd unbanip 192.168.5.25リモートコンピューター上で、再度SSH接続要求を行い、正しいパスワードを入力すると、接続が許可されます。
ssh [email protected]シンプルであることは通常良いことであり、fail2banは厄介な問題に対するエレガントな解決策です。設定はほとんど必要なく、お客様やお客様のコンピューターに運用上のオーバーヘッドをほとんど与えません。