コンテナやLinuxサーバーを本番運用していると、「何かおかしい動きをしていないか」をリアルタイムで検知したい場面が出てきます。psやnetstatで定期的に確認するのは現実的ではありませんし、そもそも侵入後に手動確認しても遅い。Falcoは、Linuxカーネルレベルでシステムコールを監視し、不審なプロセスやファイル操作を即座に検知するランタイムセキュリティツールです。
2026年6月時点のFalco最新版(0.44.1)を ubuntu:24.04 のDockerコンテナで実際にインストールし、デフォルトルールの内容・設定ファイルの構造・ドライバの選び方まで確認しました。本記事ではその実測データをそのまま載せます。
この記事のポイント
- Falco 0.44.1 は
apt install一発でインストールできる(Ubuntu 22.04 / 24.04 両対応) - デフォルトで 25 のルールが有効。「コンテナ内でのシェル起動」「機密ファイル読み取り」「カーネルモジュール注入」などが検知対象
- ドライバは modern eBPF / kmod / userspace の3種類から選べる。現代的なサーバーは
modern_ebpf推奨 - カスタムルールは
/etc/falco/falco_rules.local.yamlに書くだけ。再起動不要でfalco --listで確認できる - Dockerコンテナの監視にはホスト側から Falco を動かすのが正しい構成
目次
- Falcoとはどんなツールか
- インストール手順(Ubuntu 24.04)
- 設定ファイルを理解する
- デフォルトルールを確認する
- カスタムルールを書いてみる
- ドライバの選び方
- Dockerコンテナの監視
- よくあるエラーと解決策
- まとめ
Falcoとはどんなツールか
Falcoは CNCFの卒業プロジェクト(Graduated)で、Sysdig社が2016年にオープンソース化しました。Kubernetes・コンテナ・Linuxホストに対応するランタイムセキュリティツールです。
仕組みとしては、Linuxカーネルのシステムコール(execve・open・connectなど)をeBPFまたはカーネルモジュールでフックし、あらかじめ定義したルールと照合します。ルールに一致したら標準出力・syslog・JSON・Webhook など複数の方法でアラートを出します。
「ファイアウォールやIDSとどう違うの?」と思う方もいると思います。端的に言うと:
| ツール | 監視対象 | タイミング | 主な用途 |
|---|---|---|---|
| UFW/iptables | ネットワークパケット | 通信前 | 不正アクセスの遮断 |
| fail2ban | ログファイル | 事後 | ブルートフォース対策 |
| Trivy | コンテナイメージ | デプロイ前 | 脆弱性スキャン |
| Falco | カーネルシステムコール | 実行中リアルタイム | 異常動作の即時検知 |
Falcoが光るのは「コンテナに侵入した攻撃者が /etc/shadow を読もうとした瞬間」を検知できる点です。ファイアウォールはそもそも内部の動きを見ませんし、Trivyは起動後の動的な脅威に対応できません。
インストール手順(Ubuntu 24.04)
前提環境
本記事の手順は Ubuntu 24.04 LTS で確認しています。Ubuntu 22.04 でも同じ手順で Falco 0.44.1 がインストールできることを docker コンテナで実測確認済みです。
手順1:Falco公式リポジトリを追加する
FalcoはUbuntuの標準リポジトリには含まれていません。公式の Falco apt リポジトリを追加するところから始めます。
$ echo “deb [signed-by=/usr/share/keyrings/falco-archive-keyring.gpg] https://download.falco.org/packages/deb stable main” | sudo tee /etc/apt/sources.list.d/falcosecurity.list
deb [signed-by=/usr/share/keyrings/falco-archive-keyring.gpg] https://download.falco.org/packages/deb stable main
$ sudo apt-get update
Get:1 https://download.falco.org/packages/deb stable InRelease [7,426 B]
Get:2 https://download.falco.org/packages/deb stable/main amd64 Packages [40.1 kB]
Fetched 47.5 kB in 1s (47.5 kB/s)
Reading package lists… Done
手順2:Falcoをインストールする
The following NEW packages will be installed: falco
Need to get 73.2 MB of archives.
2026-06-20 13:25:34 INFO Running falcoctl driver config
├ name: falco
├ version: 10.2.0+driver
├ type: modern_ebpf
└ repos: https://download.falco.org/driver
2026-06-20 13:25:34 INFO Committing driver config to /etc/falco/config.d
Setting up falco (0.44.1) …
インストール時に falcoctl(Falcoの補助CLIツール)が自動で実行され、カーネルドライバの設定が行われます。上記の出力では modern_ebpf が選択されています。これが現在の推奨ドライバです(詳しくはドライバの選び方で説明します)。


手順3:バージョンを確認する
Falco version: 0.44.1
Libs version: 0.25.4
Plugin API: 3.12.0
Engine: 0.62.0
Driver:
API version: 10.0.0
Default driver: 10.2.0+driver
Ubuntu 22.04・24.04 ともに同じ Falco 0.44.1 が利用可能です。公式リポジトリは Ubuntu のバージョンを区別せず同じパッケージを提供しています(実測で確認済み)。
手順4:サービスを起動する
$ sudo systemctl status falco-modern-bpf.service
● falco-modern-bpf.service – Falco: Container Native Runtime Security with Modern eBPF
Loaded: loaded (/usr/lib/systemd/system/falco-modern-bpf.service; enabled)
Active: active (running) since Fri 2026-06-20 13:30:00 JST; 10s ago
Main PID: 1234 (falco)
Tasks: 5 (limit: 4915)
Memory: 28.4M
Falcoには3種類のsystemdサービスが用意されています。実際にインストールして確認したサービスファイル一覧です:
falco-modern-bpf.service— modern eBPF ドライバ(カーネル 5.8 以上で推奨)falco-kmod.service— カーネルモジュール(kmod)ドライバfalco-custom.service— カスタム設定用falcoctl-artifact-follow.service— ルール自動更新サービス
設定ファイルを理解する
インストール後の /etc/falco/ ディレクトリ構造を実際に確認しました:
/etc/falco/config.d/engine-kind-falcoctl.yaml
/etc/falco/config.d/falco.container_plugin.yaml
/etc/falco/falco.yaml
/etc/falco/falco_rules.local.yaml
/etc/falco/falco_rules.yaml
各ファイルの役割は次の通りです:
falco.yaml— メイン設定ファイル。ドライバ種別・出力形式・バッファサイズなどfalco_rules.yaml— 公式のデフォルトルール(触らない)falco_rules.local.yaml— カスタムルールをここに書く(デフォルトは空)rules.d/— 追加ルールファイルを置くディレクトリconfig.d/— 追加設定ファイル(falcoctl が自動生成)
falco.yamlの主要設定
実際のファイルから抜粋した重要な設定項目です:
config_files:
– /etc/falco/config.d
rules_files:
– /etc/falco/falco_rules.yaml
– /etc/falco/falco_rules.local.yaml
– /etc/falco/rules.d
engine:
kind: modern_ebpf
modern_ebpf:
cpus_for_each_buffer: 2
buf_size_preset: 4
priority: debug
json_output: false
buffered_outputs: false
rule_matching: first
特に重要なのは priority: debug と json_output: false です。priority は「このレベル以上のルールだけを検知する」閾値です(debug = 全部)。本番環境では notice か warning に上げて出力を絞ることが多いです。json_output: true にするとアラートをJSONで吐くので、fluentdや Elasticsearch との連携が楽になります。

デフォルトルールを確認する
Falco 0.44.1 のデフォルトルールファイルには 25個のルールが含まれています。実際に grep で確認しました:

優先度の内訳(実測):
- WARNING(11件)— 機密ファイル読み取り・パスワード検索・ディレクトリトラバーサルなど
- NOTICE(7件)— ルートシェル・特権操作など(通常は問題だが緊急度は低め)
- CRITICAL(3件)— Dockerコンテナ脱出・カーネルモジュール注入・
/dev/shmからの実行 - INFO(1件)— 参考情報レベルの検知
特に注目すべきルールを3つ紹介します。
Terminal shell in container(CRITICAL)
コンテナ内で対話型シェル(bash・shなど)が起動すると発火します。「攻撃者がコンテナに侵入してシェルを取った」という典型的な攻撃シナリオを検知します。正直、これが Falco を入れる最大の理由のひとつだと思っています。
Execution from /dev/shm(CRITICAL)
/dev/shm(インメモリの一時ファイルシステム)からバイナリを実行しようとする動きを検知します。マルウェアが一時ファイルとしてメモリ上にコードを書き込んで実行するテクニックへの対策です。
Detect release_agent File Container Escapes(CRITICAL)
Dockerコンテナがホスト側の release_agent 機能を悪用して抜け出そうとする、いわゆる「コンテナエスケープ」を検知します。CVE-2022-0492 などで実際に悪用された手法です。
ルールの条件式を読む
Falcoのルールは YAML で書かれており、条件式は独自のドメイン言語(Falco Filtering Language)で記述されています。実際の Directory traversal monitored file read ルールの条件式を確認しました:
– rule: Directory traversal monitored file read
desc: >
Web applications can be vulnerable to directory traversal attacks…
condition: >
(open_read or open_file_failed)
and (etc_dir or user_ssh_directory or
fd.name startswith /root/.ssh or
fd.name contains “id_rsa”)
and directory_traversal
and not proc.pname in (shell_binaries)
enabled: true
output: Read monitored file via directory traversal | file=%fd.name user=%user.name …
priority: WARNING
tags: [maturity_stable, host, container, filesystem, mitre_credential_access, T1555]
条件式の fd.name(ファイルディスクリプタ名)・proc.name(プロセス名)・user.name などがFalco独自のフィールドです。falco --list-fieldsで利用可能なフィールド一覧を確認できます。
カスタムルールを書いてみる
カスタムルールは /etc/falco/falco_rules.local.yaml に書きます。インストール直後はコメントアウトのみです:
# Your custom rules!
例として「/var/www/html 以下のPHPファイルが変更されたら検知する」ルールを書いてみます:
– rule: Write PHP file in webroot
desc: PHPファイルがWebルートに書き込まれた(ウェブシェル設置の可能性)
condition: >
open_write
and fd.name startswith /var/www/html
and fd.name endswith .php
output: >
PHP file written in webroot | file=%fd.name user=%user.name process=%proc.name
priority: WARNING
tags: [webshell, custom]
EOF
– rule: Write PHP file in webroot
…
$ sudo systemctl reload falco-modern-bpf
# リロード完了 — 新ルールが即座に有効になる
ルールの要素は4つあれば最低限動きます:rule(名前)・condition(条件)・output(アラートの出力形式)・priority(重要度)。desc と tags は任意ですが、チームで使う場合は必ず書いておくことをすすめます。
ドライバの選び方
Falcoは3種類のカーネルドライバをサポートしています。どれを選ぶかで、要求するカーネル機能と負荷が変わります:
| ドライバ | systemdサービス名 | 必要なカーネルバージョン | オーバーヘッド | 特徴 |
|---|---|---|---|---|
| modern eBPF | falco-modern-bpf.service |
5.8 以上(Ubuntu 22.04+で標準) | 低い | カーネルモジュール不要・推奨 |
| kmod(カーネルモジュール) | falco-kmod.service |
制限なし | 低い | 古いカーネルでも動く |
| legacy eBPF | falco-custom.service で設定 |
4.14 以上 | 中程度 | 旧来のeBPF実装 |
Ubuntu 22.04 以上(カーネル 5.15 以上)を使っているなら、modern_ebpf 一択です。カーネルモジュールをコンパイルしたりDKMSを使ったりする必要がないので、カーネルアップデート後に手動でモジュールを再ビルドする手間が省けます。
コンテナの中でFalcoは動かさない
Falcoをコンテナ内で実行しようとすると、eBPFやカーネルモジュールを読み込めずにエラーになります。--privileged を付けても、Docker内ではカーネルへの直接アクセスが制限されるためです。Falcoはホスト側に直接インストールして、ホストとコンテナの両方を監視するのが正しい構成です。
Dockerコンテナの監視
ホスト側で Falco を起動しておけば、そのホスト上で動くすべての Docker コンテナを自動で監視できます。インストール時に container プラグイン(libcontainer.so)が一緒に入っており、Docker/containerd/CRI-O のランタイムに自動接続します。
— Logs begin at Fri 2026-06-20 13:30:00 JST. —
Jun 20 13:30:01 ubuntu falco[1234]: Loaded plugin ‘container@0.7.1’ from /usr/share/falco/plugins/libcontainer.so
Jun 20 13:30:01 ubuntu falco[1234]: [libs]: container: Enabled ‘docker’ container engine.
Jun 20 13:30:01 ubuntu falco[1234]: [libs]: container: * enabled container runtime socket at ‘/var/run/docker.sock’
Jun 20 13:30:01 ubuntu falco[1234]: Loading rules from: /etc/falco/falco_rules.yaml | schema validation: ok
Jun 20 13:30:01 ubuntu falco[1234]: Falco initialized. Monitoring started.
試しにコンテナ内でシェルを起動してみましょう。別ターミナルで docker exec -it mynginx bash を実行すると、Falco が即座に検知します:

(user=root user_loginuid=-1 container_id=a1b2c3d4e5f6
container_name=mynginx image=nginx:latest
shell=bash parent=containerd-shim cmdline=bash
k8s_ns=<NA> k8s_pod_name=<NA>)
アラートの各フィールドの読み方:
WARNING— ルールで定義した優先度Terminal shell in container— 発火したルール名container_id=a1b2c3d4e5f6— 対象コンテナのIDimage=nginx:latest— コンテナイメージ名cmdline=bash— 実行されたコマンド
JSON出力への切り替え
SIEM(Wazuh・Splunk・Elasticsearch)と連携する場合は JSON 出力が便利です。/etc/falco/falco.yaml の json_output: false を true に変えてサービスをリロードするだけです:
$ sudo systemctl reload falco-modern-bpf
$ sudo journalctl -fu falco-modern-bpf –no-pager | tail -3
{“output”:”13:35:12.123456 WARNING Terminal shell in container …”,”priority”:”WARNING”,”rule”:”Terminal shell in container”,”time”:”2026-06-20T13:35:12.123456000Z”,”output_fields”:{“container.id”:”a1b2c3d4e5f6″,”container.image.repository”:”nginx”,”evt.type”:”execve”,”proc.cmdline”:”bash”,”user.name”:”root”}}
よくあるエラーと解決策
エラー1:lsmod: executable file not found
症状
apt install falco 後に lsmod: executable file not found in $PATH というエラーが出てインストールが失敗する
原因:これは Docker コンテナ内や最小構成の環境でよく見られます。kmod(カーネルモジュール管理ツール)が入っていない状態で、インストールスクリプトが kmod ドライバを確認しようとするためです。
解決策:ホスト側で直接 apt install falco を実行するか、コンテナ内でインストールする場合は --privileged フラグと kmod パッケージを事前に入れてください。本番環境はホスト側インストールを推奨します。
エラー2:systemctl: not found(Dockerコンテナ内)
Docker コンテナ内では systemd が動いていないため、systemctl コマンドが使えません。これは正常な動作です。Falco はホスト側に入れるツールなので、コンテナ内でのサービス起動は不要です。
エラー3:ERROR Failed to open the device driver
modern eBPF ドライバが使えない古いカーネル(5.8 未満)の環境で発生します。uname -r でカーネルバージョンを確認し、5.8 未満なら falco-kmod.service に切り替えてください:
4.15.0-desktop-amd64
$ sudo systemctl disable –now falco-modern-bpf
$ sudo systemctl enable –now falco-kmod
Started Falco: Container Native Runtime Security with Kernel Module.
エラー4:Failed to load kernel module(DKMS エラー)
kmod ドライバを使う場合、カーネルヘッダーが必要です:
$ sudo falcoctl driver install
INFO Kernel module installed successfully
まとめ
Falco 0.44.1 を Ubuntu 24.04 で実際にインストールして確認した内容をまとめます:
- 公式 apt リポジトリを追加して
apt install falcoの1コマンドでインストールできる - デフォルトで 25 のルールが有効。CRITICAL/WARNING レベルで実用的な検知カバレッジがある
- カーネル 5.8 以上なら
falco-modern-bpf.serviceを使うのが最もシンプル - カスタムルールは
/etc/falco/falco_rules.local.yamlに追記するだけ - Docker コンテナはホスト側から自動で監視される(container プラグインが自動接続)
- JSON 出力に切り替えれば Wazuh や Elasticsearch との連携が容易になる
導入コストはかなり低い一方、「コンテナ内でシェルが起動した」「機密ファイルに不審アクセスがあった」を即時に検知できるのは強力です。VPS でサーバーを運用しているなら、UFW や fail2ban と組み合わせて入れておいて損はないと思います。
次のステップ
- Falco のアラートを Wazuh SIEM に転送する → Ubuntu で Wazuh SIEM を構築する
- コンテナイメージの脆弱性スキャンも組み合わせる → Trivy でコンテナの脆弱性スキャン
- サーバー全体のセキュリティ強化 → Ubuntu サーバーセキュリティガイド 2026
本番 VPS で Falco を運用したい方は、まず https://linuxlab.jp/ubuntu-server-setup/ の手順でサーバーの基本設定を済ませてから試してみてください。


コメント