サーバーの運営を始めると、数多くの外部攻撃に直面することになります。SSHブルートフォース攻撃、Webアプリケーションを狙った無差別ログイン試行、ポートスキャンなどは日常的な脅威です。これらの脅威を放置すると、最終的にはシステム侵入につながります。Fail2Banはこれらの問題を解決するための、軽量で強力なLinuxベースの侵入防止ソリューションです。

Fail2Banは疑わしいIPを自動的に検出してブロックします。これにより、管理者は特に手間をかけずにサーバーを保護できます。

Fail2Banのインストール方法

Fail2BanはほとんどのLinuxディストリビューションでパッケージとして提供されているため、インストールは非常に簡単です。

Ubuntu/Debian系

sudo apt update
sudo apt install fail2ban

インストールが完了したら、サービスの起動およびブート時の自動起動設定を行います。

sudo systemctl start fail2ban
sudo systemctl enable fail2ban

Fail2Banの概要

Fail2Banの基本設定方法

Fail2Banは/etc/fail2ban/jail.confファイルを基本設定ファイルとして使用しますが、このファイルを直接修正するのではなく、/etc/fail2ban/jail.localファイルを作成してカスタマイズすることが推奨されます。

jail.localファイルの作成:

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

主要設定項目: - bantime: ブロック期間(秒単位) - findtime: 攻撃と見なされる時間範囲(秒単位) - maxretry: 許可される最大失敗試行数

[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log

実際の適用事例の例

1. SSHブルートフォースのブロック

上記のように[sshd] jailを設定すると、ログイン失敗が5回以上発生した場合、そのIPが1時間ブロックされます。

2. Apacheログイン攻撃のブロック

[apache-auth]
enabled = true
filter = apache-auth
logpath = /var/log/apache2/error.log
maxretry = 3

Webサーバーへの認証失敗が3回発生した場合、ブロックされます。

Fail2Banの監視方法

Fail2Banが正しく動作しているかを監視する方法はいくつかあります。

1. fail2ban-clientを使用した状態確認

特定のjail(例:sshd)の状態を確認できます。

sudo fail2ban-client status sshd

出力例:

Status for the jail: sshd
|- Filter
|  |- Currently failed: 2
|  |- Total failed: 15
|  `- File list:    /var/log/auth.log
`- Actions
   |- Currently banned: 1
   |- Total banned: 3
   `- Banned IP list: 192.168.1.100

2. ログファイルの監視

Fail2Banの動作履歴は/var/log/fail2ban.logファイルに記録されます。

tail -f /var/log/fail2ban.log

これにより、リアルタイムでブロックおよび解除イベントを監視できます。

Fail2Banの動作原理

  1. ログの監視: Fail2Banは設定されたログファイルを継続的に監視します。(例:/var/log/auth.log/var/log/apache2/error.log

  2. フィルタの適用: 特定のパターン(ログイン失敗、認証エラーなど)をフィルタとして検出します。

  3. アクションの実行: 設定されたmaxretryを超えた場合、そのIPに対してiptablesを通じてブロックするか、firewall-cmd、nftablesなどのファイアウォールコマンドを実行します。

  4. 自動解除: bantimeが経過するとブロックを自動的に解除します。

Fail2Banはモジュール化された構造で、さまざまなサービス(jail)ごとに独立した監視およびブロック設定が可能で、単純なSSH保護を超えてさまざまなサービスへのセキュリティを強化できます。

SSH攻撃に対する永久ブロック設定方法

SSH攻撃者には断固として対処することが重要です。Fail2Banではbantime-1に設定すると永久にブロックできます。

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
bantime = -1
findtime = 600
maxretry = 5

このように設定すると、SSH認証失敗が5回以上発生したIPは永久にブロックされ、サーバーアクセスができなくなります。

[高度なヒント] Fail2Banの基本的なブロック動作の理解

Fail2Banではactionを別途定義しなくても基本的に動作します。その理由は、基本設定にiptablesを利用するブロックコマンドを含んでいるからです。

  • 別途actionを指定しない場合、[DEFAULT]セクションのaction = %(action_)s設定が適用されます。
  • %(action_)sは内部的にiptablesコマンドを使用して悪性IPをブロックする動作を実行します。
  • したがって、actionを特に記述しなくてもiptablesによってIPブロックが行われます。

基本ブロックコマンドの例(action_.conf参照)

iptables -I INPUT -s <ip> -j REJECT

つまり、Fail2Banが自動的にiptablesを制御して攻撃IPをブロックすることになります。

注意: - もしUFW、firewalldなどの他のファイアウォールツールを使用したい場合、actionを明示的に設定する必要があります。 - また、ブロックルールはサーバーが再起動されると消失する恐れがあるため、ブート時にFail2Banサービスが自動的に開始されるよう設定しておくことをお勧めします。


さらにさまざまなフィルターを自作して適用したり、email警告設定など高度な設定も可能です。


サーバーをインターネットの世界にさらした瞬間から、セキュリティは決して選択ではなく必須です。
一瞬の油断が致命的な結果を引き起こす可能性があります。
Fail2Banはそのような脅威を未然に防ぐ頼もしい盾になってくれます。
今この瞬間にも誰かがあなたのサーバーを狙っている事実を忘れないでください。