Fail2banでFedora Serverをブルートフォース攻撃から守る:SSHを「無防備」にしないために

Fedora tutorial - IT technology blog
Fedora tutorial - IT technology blog

あなたのFedoraサーバーは本当に安全ですか?

Fedora Serverを構築し、Nginxをデプロイして、すべてが整ったと感じているかもしれません。しかし、一度 lastb コマンドを入力してみてください。一晩の間に、ロシア、中国、ブラジルといった見知らぬIPから数千回ものログイン失敗が記録されているのを見て、衝撃を受けることでしょう。

実際、公開IPを持つサーバーは、1日に2,000から5,000回もの「鍵開けの試行」を受けるのが一般的です。強力なパスワードがあれば持ちこたえられるかもしれませんが、システムがこれら数万件の偽装リクエストの処理に追われることで、CPUリソースや帯域が無駄に消費されてしまいます。

なぜボットネットは執拗に「訪問」してくるのか?

ハッカーが手作業でパスワードを一つずつ入力しているわけではありません。それはインターネット上のIPレンジをスキャンするようにプログラムされたボットネットのネットワークです. ポート22(SSH)が開いていることを検知すると、自動的にブルートフォース(総当たり)攻撃を開始します。彼らは adminroot といった一般的なユーザー名と、辞書にある数百万通りのパスワードを組み合わせて試行します。

最大の隙となるのがSSHです。リモート管理のために開放せざるを得ないサービスだからです。ボットによるスキャンを放置すれば、遅かれ早かれ「鍵」は破られるでしょう。最悪の場合、システムログが溢れてサーバーが完全にフリーズすることもあります。

手動での対策(とその限界)

管理者の間では、いくつかの即効性のある対策がよく語られます:

  • SSHポートの変更: ポート22を2222などに変更します。これにより「アマチュア」なボットは排除できます。しかし、単純なNmapスクリプトを使えば、新しいSSHポートを見つけるのに数秒もかかりません。
  • SSHキーの使用: これは最も安全な方法です。しかし、秘密鍵を持っていない新しいデバイスから急遽アクセスする必要がある場合には不便です。
  • FirewallによるIPブロック: 悪意のあるIPを見つけたら firewalld でブロックします。しかし、24時間365日ログを監視して、数千ものIPを手動でブロックし続けることは不可能です。

Fail2ban – Fedora上の自動「門番」

最も現実的な解決策は Fail2ban です。このツールはバーのセキュリティガードのように機能します。システムログを監視し、パスワードの誤入力回数をカウントします。あるIPが制限を超えると、Fail2banはFirewallに対して、そのIPを一定期間即座に「出入り禁止」にするよう命令します。

Fedoraにおいて、Fail2banは firewalld および systemd-journald と非常によく連携します。これはサーバーにとって完璧なセキュリティの三種の神器と言えます。

ステップ 1: Fail2banのインストール

Fail2banはFedoraの公式リポジトリで提供されています。ターミナルを開いて以下のコマンドを実行するだけです:

sudo dnf install fail2ban fail2ban-firewalld -y

fail2ban-firewalld パッケージは非常に重要です。これにより、複雑な設定なしでFail2banがFedoraのデフォルトのファイアウォールと直接通信できるようになります。

ステップ 2: 「投獄」ルールの設定

/etc/fail2ban/jail.conf ファイルを直接編集しないでください。ソフトウェアのアップデート時に上書きされてしまうからです。カスタマイズ用にコピーを作成します:

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

jail.local を開き、[DEFAULT] セクションを探して以下のパラメータを調整します:

  • bantime = 1h: 「投獄」される時間(1時間、より厳しくしたい場合は24時間に設定)。
  • findtime = 10m: 失敗をカウントする期間。
  • maxretry = 5: 5回以上間違えるとブロック。

特に、SSH専用の設定を [sshd] セクションで行います:

[sshd]
enabled = true
port    = ssh
logpath = %(sshd_log)s
backend = systemd

注意: Fedoraはsystemdのバイナリ形式のログを使用します。Fail2banがデータを読み取れるようにするため、backend = systemd の行は必須です。

ステップ 3: システムの有効化

ファイルを保存した後、サービスを起動し、起動時に自動実行されるように設定します:

sudo systemctl enable --now fail2ban

動作状況を確認するには以下のコマンドを使います:

sudo fail2ban-client status

Jail list: sshd と表示されれば、「網」の設置は完了です。

ステップ 4: 「ブラックリスト」の確認

数時間後には成果が見られるはずです。以下のコマンドを実行して、いくつのIPが「投獄」されているか確認してみましょう:

sudo fail2ban-client status sshd

もし誤って自分自身のIPをブロックしてしまった場合は、VPSプロバイダーのコンソールなどから以下のコマンドを入力してください:

sudo fail2ban-client set sshd unbanip [あなたのIP]

Fail2banをよりスムーズに運用するための実践的ヒント

Fedoraを運用してきた経験から、3つの小さなアドバイスがあります:

  1. 個人のIPをホワイトリストに入れる: 自宅や会社のIPを jail.localignoreip 行に追加してください。これにより、不当に締め出されることを防げます。
    ignoreip = 127.0.0.1/8 ::1 1.2.3.4 (あなたのIPアドレス)
  2. Firewalldの管理: Fail2banはアプリケーション層の保護に過ぎません。firewalld で80、443、SSHなど、本当に必要なポートのみが開放されていることを確認してください。
  3. リアルタイムでのログ監視: Fail2banがリアルタイムでどのIPを「処理」しているか見たいですか?以下のコマンドを使用します:
    sudo tail -f /var/log/fail2ban.log

サーバーセキュリティは継続的な改善プロセスです。Fail2banを導入することで、強固な自動防御層を構築できました。安価なパスワード試行攻撃に煩わされることなく、アプリケーションの開発に集中できるようになります。

Share: