サーバーの運営を始めると、数多くの外部攻撃に直面することになります。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は/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の動作原理
-
ログの監視: Fail2Banは設定されたログファイルを継続的に監視します。(例:
/var/log/auth.log
、/var/log/apache2/error.log
) -
フィルタの適用: 特定のパターン(ログイン失敗、認証エラーなど)をフィルタとして検出します。
-
アクションの実行: 設定された
maxretry
を超えた場合、そのIPに対してiptablesを通じてブロックするか、firewall-cmd、nftablesなどのファイアウォールコマンドを実行します。 -
自動解除:
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はそのような脅威を未然に防ぐ頼もしい盾になってくれます。
今この瞬間にも誰かがあなたのサーバーを狙っている事実を忘れないでください。
Add a New Comment