LinuxでのCrowdSec:Fail2Banを超え、コミュニティ主導のセキュリティへ

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

CrowdSecでサーバーを保護する

数年前、ある朝目覚めると、VPSが一晩で4万回以上のSSHログイン試行失敗を記録していました。10年以上にわたり、この問題への標準的な回答はFail2Banでした。これはログを監視し、悪意のあるアクターを特定して遮断します。しかし、従来のツールは「サイロ(孤立)」状態で動作します。フランクフルトのボットネットに私のサーバーが攻撃されても、シンガポールにあるあなたのサーバーは、次のターゲットになるまでその存在に気づきません。この「孤立」を解決するのがCrowdSecです。

CrowdSecは、クラウド時代のために構築された最新の侵入検知システム(IDS)および侵入防止システム(IPS)です。これはコラボレーション(協調)型のアプローチを採用しています。あなたのインスタンスが攻撃を検知すると、そのメタデータが中央APIに共有されます。特定のIPアドレスがコミュニティメンバー(多くの場合、数千のユニークなレポート)の合意によってフラグを立てられると、グローバルブロックリストに登録されます。単独のサーバーを防御するだけではありません。何百万ものエンドポイントを保護する「地域の防犯ネットワーク」の一員となるのです。

クイックスタート:5分以内にセキュリティを確保

私は、機能させるために何時間もYAMLをいじる必要がないツールを重視しています。CrowdSecはDebian、Ubuntu、RHEL、Rocky Linuxなどの主要なディストリビューション向けにパッケージ化されています。ここでは、多くの管理者にとって最も一般的な入り口であるUbuntuの例を使用します。

1. リポジトリの追加

まず、公式のインストールスクリプトを取得します。これにより、GPGキーとリポジトリのセットアップが自動的に処理され、パッケージマネージャーがクリーンに保たれます。

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

2. セキュリティエンジンのインストール

エンジンはこのシステムの「頭脳」です。ログを監視して脅威を検知しますが、まだ実際にはトラフィックをブロックしません。ドアにまだ鍵がかかっていない監視カメラのようなものだと考えてください。

sudo apt install crowdsec

3. インストールの確認

インストール中、CrowdSecはシステムを自動的にフィンガープリント(識別)します。SSH、Nginx、MariaDBなどのサービスを検出し、必要な検知ロジックをインストールします。cscliツールでステータスを確認しましょう:

sudo cscli status

出力結果でローカルAPIがアクティブであることが確認できるはずです。sudo cscli hub listを実行すると、sshdなどのサービス向けにプリインストールされた設定リストが表示されます。手動で正規表現を書く必要はありません。

ディープダイブ:パイプラインの仕組み

CrowdSecを最大限に活用するには、それを「Observe(観察)」「Decide(判断)」「Act(行動)」という3段階のパイプラインとしてイメージしてください。これはノイズを処理するためのシンプルかつ効果的なワークフローです。

パーサー(Parsers):目

ログは煩雑です。パーサーの役割は、生のテキストを構造化データに変換することです。/var/log/auth.logの特定の行が、午後10時にIP 1.2.3.4からのログイン失敗を表していることを特定します。パーサーがなければ、システムはアプリケーションが何をしているか実質的に「見えない」状態になります。

シナリオ(Scenarios):脳

シナリオは、構造化データにロジックを適用します。通常、「漏れバケツ(Leaky Bucket)」アルゴリズムを使用します。1つのIPを表すバケツを想定してください。ログインに失敗するたびに水滴が加わります。そのIPが30秒間に5回失敗すると、バケツが溢れます。これが、そのIPが悪意のあるものであるという「シグナル」をトリガーします。

バウンサー(Bouncers):執行

デフォルトでは、CrowdSecはアラートを出すだけです。攻撃を止めるには、**Bouncer(バウンサー)**が必要です。これらは、禁止(BAN)を実行する軽量なプラグインです。ファイアウォール(nftables/iptables)、Webサーバー(Nginx/Apache)、あるいはCloudflareと直接対話します。この分離により、セキュリティエンジンがネットワークトラフィックを遅延させることはありません。

高度な使用法:検知を保護に変える

ブルートフォース攻撃でCPU使用率が急上昇しているときに、アラートを送るだけのセキュリティツールは、午前3時には役に立ちません。バウンサーをインストールして防御を自動化する必要があります。

ファイアウォールバウンサーのインストール

これは最も一般的なセットアップです。CrowdSecとLinuxファイアウォールの間の橋渡しをします。エンジンがIPにフラグを立てると、バウンサーはそのトラフィックをアプリケーションに到達する前にネットワークレベルで遮断します。

sudo apt install crowdsec-firewall-bouncer-iptables

エンジンとバウンサーの接続がアクティブであることを確認します:

sudo cscli bouncers list

CrowdSecコンソール

CLIは強力ですが、長期的なトレンドを把握するには視覚的なデータの方が優れています。CrowdSecは、サーバーを連携できる無料のWebコンソールを提供しています。攻撃のグローバルマップを表示し、単一のダッシュボードから複数のインスタンスを管理できます。次のコマンド1つでサーバーを登録できます:

sudo cscli console enroll <あなたの登録キー>

カスタムアプリケーションの監視

独自の社内ツールを実行している場合は、/etc/crowdsec/acquis.yamlを編集してCrowdSecにそのログを参照させることができます。/var/log/custom-app.logにログを出力するアプリの場合、以下のスニペットを追加します:

filenames:
  - /var/log/custom-app.log
labels:
  type: custom_app_logs

その後、custom_app_logs用のパーサーを見つけるか作成すれば、特有の脅威の検知を開始できます。

本番環境メンテナンスのプロのヒント

セキュリティシステムは「設定して終わり」にすべきではありませんが、フルタイムの仕事にすべきでもありません。私がすべての本番ノードで行っている3つのことを紹介します。

  • 管理IPのホワイトリスト登録: 自分自身をBANしないでください。これは非常にストレスが溜まることですが、回避可能です。すぐに自分のオフィスのIPやVPNの範囲を/etc/crowdsec/parsers/s02-enrich/whitelists.yamlに追加しましょう。
  • Hubアップデートの自動化: 攻撃パターンは毎週進化します。毎週のcronジョブでsudo cscli hub update && sudo cscli hub upgradeを実行し、検知シナリオを最新に保ちます。
  • BANの監査: sudo cscli decisions listを使用して、現在誰がブロックされているかを確認します。誤検知(False Positive)を見つけた場合は、sudo cscli decisions delete --ip 1.2.3.4ですぐに解除してください。

CrowdSecは、サーバーの要塞化(Hardening)における大きな転換点です。各システム管理者が個別に静かな戦いを繰り広げる代わりに、データを共有し合うことで、インターネットをボットネットにとって住みにくい場所にできます。今日新しいLinuxインスタンスを立ち上げるなら、これは最初にインストールすべき3つのツールの1つです。

Share: