UbuntuでのCrowdSecのインストールと設定:次世代コミュニティベースのサーバー保護ソリューション

Security tutorial - IT technology blog
Security tutorial - IT technology blog

問題提起:なぜサーバーにはさらなる保護層が必要なのか?

インターネット上で公開サーバーを管理する際、ネットワークセキュリティの確保は常に最優先事項です。10台以上の異なるサーバーのセキュリティを検証した結果、ほとんどのサーバーに共通の基本的な脆弱性があることに気づきました。その一つは、自動かつ大規模な攻撃から防御するのに十分強力な、能動的な保護層の欠如です。

UFWやiptablesなどの従来のOSファイアウォールは、ネットワーク層で効果を発揮し、特定のポートへの不正アクセスを防ぎます。しかし、SSHのブルートフォース攻撃、Webの脆弱性スキャン、レイヤー7 DDoS攻撃のような、より巧妙なアプリケーション層での攻撃には対処が困難です。

Fail2Banのようなツールは、ローカルなブルートフォース攻撃対策としては非常に優れていますが、静的なルールにのみ基づいており、各サーバーで独立して動作します。ボットネットがますます巧妙化し、大規模になる状況では、ローカルな保護だけでは不十分です。代わりに、世界中の脅威から「学習」できるシステムが必要です。このシステムは、異常な動作を能動的に検出し、広範囲にわたってそれらを連携してブロックする必要があります。まさにそこで、CrowdSecが検討に値するソリューションとなるのです。

コアコンセプト:CrowdSecはどのように機能するのか?

CrowdSecとは?

CrowdSecは、振る舞いベースのサイバー攻撃を検出し、対応するために設計されたオープンソースの侵入防止システム(IPS)です。CrowdSecの最大の特徴は「コミュニティ」の側面です。世界中の何百万ものエージェントから攻撃IPに関するデータを収集し、その情報を共有することで、ネットワーク内のすべてのメンバーを保護します。

CrowdSecの動作メカニズム

より深く理解するために、CrowdSecの主要なコンポーネントを介した動作メカニズムを概説します。

  • エージェント: これはサーバー上で動作するソフトウェアです。その役割は、システムやアプリケーション(例:SSH、Nginx、Apache、Redis、MySQLのログなど)からログファイルを監視・収集することです。
  • パーサー: エージェントはパーサーを使用して、生のログ行を構造化された理解しやすいイベントに解析します。例えば、SSHログイン失敗に関するログ行は、パーサーによって送信元IP、時刻、エラーの種類に関する情報を含むイベントに変換されます。
  • シナリオ: これらは攻撃行動を定義する一連のルールです。例えば、あるシナリオでは「5分以内に同じIPから10回のSSHログイン失敗イベントがあった場合、それはブルートフォース攻撃である」と規定できます。パーサーによって処理されたイベントがシナリオと一致すると、CrowdSecはアラートを生成します。
  • ディシジョン (決定): アラートに基づき、CrowdSecは攻撃IPをどのように処理するかを決定します。最も一般的な決定は、例えば4時間など、「このIPを一定期間ブロックする」というものです。
  • バウンサー: CrowdSecの決定を強制する責任を負うモジュールです。例えば、crowdsec-firewall-bouncerは、そのIPをブロックするためにOSのファイアウォール(iptablesやnftablesなど)にルールを追加します。他のバウンサーは、Cloudflare、Nginx、または他のシステムと統合して、複数のレベルでブロックできます。
  • CrowdSec Security Engine (Community Blocklist): これはコミュニティシステムの心臓部です。エージェントが攻撃IPを検出してブロックすると、そのIPに関する情報(匿名化され、検証済み)がCrowdSecのデータベースに共有される場合があります。その後、他のエージェントはこれらの悪意のあるIPのリストをダウンロードして、たとえ彼らのサーバーを攻撃したことがないIPであっても、積極的にブロックすることができます。私はこの機能を特に高く評価しています。これは、各サーバーが貢献し、コミュニティから保護を受ける共通の防御ネットワークを構築するのに役立ちます。

Fail2Banおよび他のソリューションとの比較

前述したように、Fail2Banはローカルなブルートフォース攻撃をブロックするのに優れたツールです。しかし、CrowdSecと比較すると、いくつかの制限があります。

  • 検出範囲: Fail2Banはローカルサービスにのみ焦点を当てています。CrowdSecは、より広範囲の攻撃タイプに対して、複数のアプリケーションで監視および対応できます。
  • コミュニティ機能: Fail2Banは完全にローカルであり、他のサーバーと攻撃IPに関する情報を共有する機能がありません。CrowdSecは、Community Blocklistにより、他の場所で検出された脅威から自動的に保護するのに役立ちます。
  • 機能: CrowdSecには、コンポーネントの管理、メトリクス、アラート、および決定を一元的に表示するための強力なCLI(cscli)があります。
  • 拡張性: CrowdSecは、OSファイアウォールに限定されず、さまざまなバウンサーで容易に拡張でき、複数の層でブロックできます。

要約すると、Fail2Banが個人の門番のようなものだとすれば、CrowdSecは大規模な防衛ネットワークです。このシステムは、サーバーを保護する上で、はるかに組織的で能動的です。

詳細な実践:UbuntuでのCrowdSecのインストールと設定

さて、UbuntuサーバーにCrowdSecをインストールして設定してみましょう。段階的にご案内します。

ステップ1:システムの準備

まず、すべてのソフトウェアパッケージと依存関係が最新バージョンであることを確認するためにシステムを更新してください。


sudo apt update
sudo apt upgrade -y

ステップ2:CrowdSecのインストール

CrowdSecには独自のリポジトリがあり、インストールと更新が容易になります。

まず、CrowdSecのリポジトリを追加します。


curl -s https://packagecloud.io/install/repositories/crowdsec/crowdsec/script.deb.sh | sudo bash

次に、CrowdSecエージェントとcrowdsec-firewall-bouncer-iptablesをインストールします。このバウンサーは、悪意のあるIPをブロックするために、iptablesファイアウォールに自動的に統合されます。


sudo apt install crowdsec crowdsec-firewall-bouncer-iptables -y

インストールが完了したら、サービスが正常に動作していることを確認するために、そのステータスを確認します。


sudo systemctl status crowdsec
sudo systemctl status crowdsec-firewall-bouncer

両方のサービスがactive (running)状態になっていることがわかります。

ステップ3:cscliを使用した基本設定と探索

cscli (CrowdSecコマンドラインインターフェース) は、CrowdSecと対話するための主要なツールです。いくつかの基本的なコマンドを紹介します。

cscliの使用法

  • メトリクスの確認: パフォーマンスとイベント/決定の数に関する概要情報を表示します。

sudo cscli metrics
  • 決定(ディシジョン)リストの表示: 現在CrowdSecによってブロックされているIPのリストです。

sudo cscli decisions list
  • シナリオリストの表示: CrowdSecが使用している攻撃検出ルールです。

sudo cscli scenarios list
  • パーサーリストの表示: ログ分析モジュールです。

sudo cscli parsers list
  • コレクションリストの表示: コレクションは、特定のサービス(例:SSH、Nginx)向けに事前設定されたパーサーとシナリオのセットです。

sudo cscli collections list

サービス向けコレクションの有効化

デフォルトでは、CrowdSecはSSHを監視します。CrowdSecがサーバー上の他のサービスで効果的に機能するには、対応するコレクションをインストールする必要があります。

SSHの例:crowdsecurity/ssh-authコレクションは、crowdsecをインストールする際に通常デフォルトでインストールされています。もしインストールされていない場合は、以下のコマンドでインストールできます。


sudo cscli collections install crowdsecurity/ssh-auth
sudo systemctl restart crowdsec

Nginxの例(サーバーにNginxがある場合):


sudo cscli collections install crowdsecurity/nginx
sudo systemctl restart crowdsec

同様に、Apacheを使用している場合は、crowdsecurity/apache2コレクションがあります。cscli collections list -aコマンドを使用して、他のコレクションを検索できます。

CrowdSecの動作確認

CrowdSecがどのように機能するかを確認するために、サーバーではない別のコンピューター(または別のターミナル)から簡単なSSHブルートフォース攻撃をシミュレートしてみてください。

別のマシンから、誤ったパスワードでSSHを介してサーバーに複数回(例:5~10回)ログインを試みます。


ssh user@your_server_ip
# 誤ったパスワードを複数回入力

数回の誤った試行の後、サーバーのターミナルに戻り、アラートと決定を確認します。


sudo cscli alerts list
sudo cscli decisions list

SSHログイン失敗に関するアラートと、その後に攻撃元IPをブロックするための決定が表示されます。そのマシンから再度SSHを試みると、もう接続できなくなります。

iptablesにブロックルールがどのように追加されたかを確認するには、次のコマンドを使用します。


sudo iptables -L -n | grep crowdsec

crowdsec-blacklistsという名前のチェインと、そこに追加されたIPブロックルールが表示されます。

ステップ4:コミュニティブロックリストの活用

CrowdSecのコミュニティパワーを最大限に活用するには、サーバーをCrowdSec Central APIに登録することをお勧めします。

登録すると、サーバーは検出された攻撃IP(検証され匿名化されたもの)をCrowdSecに提供します。その見返りとして、世界中の何百万もの他のエージェントから悪意のあるIPのリストを受け取ることができます。

登録するには、app.crowdsec.netで無料アカウントを作成する必要があります。その後、エージェントを接続するための登録キーを受け取ります。


sudo cscli console enroll [YOUR_ENROLL_KEY]

これは必須ではありませんが、サーバーの防御能力を大幅に向上させるため、強く推奨します。

ステップ5:その他の役立つcscliコマンド

  • すべてのブロック決定を削除: 誤って正当なIP(または自分自身のIP)をブロックしてしまい、すぐにブロックを解除したい場合。

sudo cscli decisions delete --all
  • 登録済みマシン(エージェント)のリスト表示: 複数のサーバーを管理している場合に役立ちます。

sudo cscli machines list
  • インストールされているバウンサーのリスト表示:

sudo cscli bouncers list

結論:CrowdSecでサーバーをより効果的に保護する

これで、UbuntuサーバーへのCrowdSecのインストールと設定が完了しました。これにより、ブルートフォース攻撃やスキャンなどの自動攻撃からサーバーを保護するための、能動的で強力なセキュリティ層がもたらされます。

コミュニティベースのアプローチにより、CrowdSecは個人のサーバーを保護するだけでなく、すべてのインターネットユーザーにとってより安全なサイバースペースの構築にも貢献します。

セキュリティは継続的なプロセスであり、「一度設定したら終わり」のソリューションではありません。しかし、CrowdSecを防衛戦略に統合することで、一般的な脅威からのリスクを大幅に軽減できます。そのパフォーマンスを監視し続け、インフラストラクチャの保護能力を最適化するために、CrowdSecの他の高度な機能もさらに探索してください。

Share: