実行する

Falcoの運用と管理

サービスとしてのFalcoを実行

deb もしくは rpmパッケージを使用してFalcoをインストールした場合は、サービスを開始することができます:

service falco start

あるいは、systemd の場合:

systemctl start falco

これは systemd-sysv-generatorinit.d スクリプトを systemd ユニットにラップしているからです。

また、journalctlを使ってFalcoのログを見ることもできます。

journalctl -fu falco

手動でFalcoを実行する

手作業でFalcoを実行したい場合は、入力することでFalcoの完全な使用法の説明を見つけることができます:

falco --help

ユーザースペースのインストルメントをお探しですか?このページをご覧ください。

Dockerでの実行

Falcoは公式のdocker imagesのセットを提供しています。 イメージは以下の2つの方法で使用できます:

最少特権(推奨)

少なくともKernel 5.8以上でないと、eBPFプローブドライバでLeast privilegedモードを使用することはできません。 これは --privilegedbpf のシステムコールを行うために必要だからです。 Kernel >= 5.8 を実行している場合は、ステップ 2 の docker run コマンドに --cap-add SYS_BPF を渡すことができます。 そして、カーネルモジュールのインストールセクションは完全に無視してください。

詳しくはこちらをご覧くださいこちら

このようにして、Falco ユーザスペースプロセスをコンテナ内で実行することができます。

カーネルモジュールがホストシステムに直接インストールされると、コンテナ内から使用することができます。

  1. カーネルモジュールのインストール:

    • 公式のインストール方法をホスト上で直接使用することができます。
    • あるいは、特権コンテナを一時的に使用してホストにドライバをインストールすることもできます:
    docker pull falcosecurity/falco-driver-loader:latest
    docker run --rm -i -t \
        --privileged \
        -v /root/.falco:/root/.falco \
        -v /proc:/host/proc:ro \
        -v /boot:/host/boot:ro \
        -v /lib/modules:/host/lib/modules:ro \
        -v /usr:/host/usr:ro \
        -v /etc:/host/etc:ro \
        falcosecurity/falco-driver-loader:latest
    

falcosecurity/falco-driver-loader イメージは単に falco-driver-loader スクリプトをラップしているだけです。 その使用法についての詳細はこちらをご覧ください

  1. Dockerを使ってコンテナ内のFalcoを最小特権の原則で実行する:

    docker pull falcosecurity/falco-no-driver:latest
    docker run --rm -i -t \
        --cap-add SYS_PTRACE --pid=host $(ls /dev/falco* | xargs -I {} echo --device {}) \
        -v /var/run/docker.sock:/var/run/docker.sock \
        falcosecurity/falco-no-driver:latest
    

AppArmor LSMを有効にしたシステム(例:Ubuntu)でFalcoを実行している場合、--security-opt apparmor:unconfinedを次のように渡す必要があります。 上記の docker run コマンドを実行します。

AppArmorが有効になっているかどうかは、以下のコマンドを使用して確認できます:

docker info | grep -i apparmor

ls /dev/falco* | xargs -I {} echo --device {} は CPU ごとに --dev/dev/falcoX オプションを出力することに注意してください (つまり、Falco のカーネルモジュールによって作成されたデバイスだけです)。

完全特権

Dockerを使ってコンテナでFalcoをフル権限で実行するには:

カーネルモジュールドライバでFalcoを使用する場合

docker pull falcosecurity/falco:latest
docker run --rm -i -t \
    --privileged \
    -v /dev:/host/dev \
    -v /proc:/host/proc:ro \
    -v /boot:/host/boot:ro \
    -v /lib/modules:/host/lib/modules:ro \
    -v /usr:/host/usr:ro \
    -v /etc:/host/etc:ro \
    falcosecurity/falco:latest

あるいは、eBPFプローブドライバを使用することもできます:

docker pull falcosecurity/falco:latest
docker run --rm -i -t \
    --privileged \
    -e FALCO_BPF_PROBE="" \
    -v /dev:/host/dev \
    -v /proc:/host/proc:ro \
    -v /boot:/host/boot:ro \
    -v /lib/modules:/host/lib/modules:ro \
    -v /usr:/host/usr:ro \
    -v /etc:/host/etc:ro \
    falcosecurity/falco:latest

その他の設定可能なオプション:

  • DRIVER_REPO - ドライバのインストール を参照してください。
  • SKIP_DRIVER_LOADER - この環境変数を設定することで、falcosecurity/falco イメージの起動時に falco-driver-loader を実行しないようにします。ドライバが既に他の方法でホストにインストールされている場合に便利です。

ホットリロード

これは、PIDを殺さずにFalcoの設定を再ロードし、エンジンを再起動します。これは、デーモンを殺さずに新しい設定変更を伝播させるのに便利です。

kill -1 $(cat /var/run/falco.pid)