咩係 Falco?
Falco 係 CNCF 旗下嘅開源 runtime security 工具,專門用嚟監控 Linux 系統同容器嘅異常行為。佢底下用 eBPF(extended Berkeley Packet Filter)技術,可以喺 kernel 層面直接 capture syscall,唔使裝任何 agent 入 container 入面,真正做到 non-intrusive 嘅安全監控。
簡單講:Falco 就係你啲 container 嘅 CCTV,24×7 幫你睇實邊個做緊啲咩可疑嘢。
Falco 嘅核心原理係咁:佢定義咗一套 rules(用 YAML 寫),每條 rule 描述一個「唔應該發生嘅行為」,例如「有人喺 container 入面 run shell」、「有人改咗 /etc/passwd」、「有 process spawn 咗一個 reverse shell」。當 Falco 偵測到 matching event,就會即刻 send alert 去你指定嘅 channel(stdout、file、syslog、webhook、Slack 等等)。
Falco 用 eBPF 嘅好處係乜?傳統 kernel module 需要 compile against 你嘅 exact kernel version,每次 kernel upgrade 都有機會 break。eBPF 就唔同 — 佢係 kernel 原生支援嘅 sandboxed bytecode execution environment,Falco 嘅 eBPF probe 可以動態 load 入 kernel 而唔需要任何 compile step,兼容性同穩定性都高好多。而且 eBPF 嘅 overhead 極低,production workload 幾乎感覺唔到。
點解 Falco 咁重要?
傳統嘅 container security 方案通常係 image scanning(例如 Trivy、Snyk),scan 完 build-time 嘅 vulnerability 就算。但 runtime 嘅攻擊先係最危險 — 就算你個 image 冇 CVE,attacker 都可以透過 application-level 嘅漏洞(例如 RCE、SSRF)打入嚟然後橫向移動。
Falco 就係填補呢個 gap。佢唔係 scan image,而係 monitor runtime behavior。例如:
有冇人用 `kubectl exec` 入 container?
有冇 program 嘗試 read sensitive file(/etc/shadow)?
有冇 unexpected outbound network connection?
全部呢啲,Falco 都可以 detect 到。
Step 1:安裝 Falco
Falco 支援多種安裝方式:直接裝喺 host Linux、用 Helm 裝喺 Kubernetes cluster、或者用 Docker compose。呢度我哋用最直接嘅方法 — 喺 Ubuntu 22.04 host 上面裝。
# Add Falco repo
curl -fsSL https://falco.org/repo/falcosecurity-packages.asc | \
sudo gpg --dearmor -o /usr/share/keyrings/falco-archive-keyring.gpg
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
# Install Falco
sudo apt update && sudo apt install -y falco
裝完之後 Falco 會自動 start 做 systemd service。你可以 check status:
sudo systemctl status falco
Falco Step 2:啟用 eBPF probe
Falco 預設用 kernel module,但 eBPF probe 更加 modern、唔使 compile kernel module、而且對 system 嘅 overhead 更低。建議用 eBPF mode:
# 確認 kernel version >= 4.14(eBPF 最低要求)
uname -r
# 改 Falco config 改用 eBPF
sudo sed -i 's/^engine: .*/engine: ebpf/' /etc/falco/falco.yaml
# Restart Falco
sudo systemctl restart falco
如果你行嘅係 containerized environment,Falco 仲可以自動 detect 你嘅 container runtime(Docker、containerd、CRI-O),然後自動 enrich event 入面嘅 container ID、image name、pod name 等等 metadata。
# Test Falco 是否正常運作 — 用 event generator
sudo falco-event-generator run syscall.WriteBelowBinaryDir
# 睇 Falco log 有冇 trigger alert
sudo journalctl -u falco -f
Step 3:自訂 Falco Rules
Falco 預設 rules 已經好全面,但有時你要根據自己 environment 加 custom rules。例如你想 monitor 有冇人 access 你個 application 嘅 config file:
# /etc/falco/rules.d/custom-app-rules.yaml
- rule: Unauthorized Config Access
desc: Detect any attempt to read app config
condition: >
open_read
and fd.name startswith /opt/myapp/config/
and not proc.name in (myapp, config-loader)
output: >
Unauthorized config read! user=%user.name
file=%fd.name container=%container.name
priority: WARNING
tags: [app, config, falco]
加完 rules 之後 reload Falco:
sudo systemctl restart falco
Falco 會 parse 所有 /etc/falco/rules.d/ 入面嘅 YAML file,merge 埋一齊行。你可以用好 specific 嘅 condition filter 去減少 false positive。
Falco Step 4:將 Alert 送去 Slack / Webhook
Production 環境當然唔可能淨係靠睇 log。Falco 支援多種 output channel。最基本嘅做法係用 program output 將 alert forward 去 webhook:
# 喺 /etc/falco/falco.yaml 加呢段
program_output:
enabled: true
keep_alive: false
program: |
curl -X POST -H "Content-Type: application/json" \
-d '{"text":"Falco Alert: %output"}' \
https://hooks.slack.com/services/YOUR/WEBHOOK/URL
又或者用 Falcosidekick — 呢個係 Falco 嘅官方 companion tool,可以將 alert forward 去 30+ 種 backend(Slack、Teams、Datadog、Prometheus、Loki、Elasticsearch 等等),仲有 web UI 俾你 visualise event:
# 用 Helm 裝 Falco + Falcosidekick 去 K8s
helm repo add falcosecurity https://falcosecurity.github.io/charts
helm install falco falcosecurity/falco \
--set falcosidekick.enabled=true \
--set falcosidekick.webui.enabled=true \
--set falcosidekick.config.slack.webhookurl="https://hooks.slack.com/..."
咁樣你就可以喺 Slack 收到 Falco 嘅 real-time security alert,仲有 dashboard 睇 trend。
Step 5:Falco + Prometheus 監控 Dashboard
Alert 之外,Falco 仲可以 export metrics 去 Prometheus,俾你用 Grafana 整 dashboard。Falcosidekick 內置 Prometheus endpoint:
# 檢查 Falcosidekick Prometheus metrics endpoint
curl http://localhost:2801/metrics
# 你會見到類似呢啲 metrics:
# falcosidekick_inputs_total{source="syscalls"}
# falcosidekick_outputs_total{destination="slack"}
# falcosidekick_kernel_drops_total
你可以 set alert rule 喺 Prometheus 入面 — 例如 `falcosidekick_kernel_drops_total` 突然飆升就可能代表 Falco miss 咗 event,需要 investigate。
常見嘅 Falco production tuning tips:
**減低 noise**:用 `append: false` override default rules 入面太 sensitive 嘅條件
**Macro 重用**:將常用 condition 抽成 macro,例如定義 `container_env` macro 統一 filter 特定 namespace
**Tag 分類**:用 tags 將 rules 分類(network、filesystem、process),方便之後 filter
**Rate limiting**:set `priority` 同 throttle 去避免 alert fatigue
📌 延伸閱讀:Docker安全掃描懶人包:用Trivy一鍵掃瞄容器漏洞 — Trivy + Falco = build-time + runtime 完整防線!
📌 相關文章:Palo Alto PA-550 系列評測 — 企業級安全防護選擇
🔗 參考資料:Falco Official Docs | Falco GitHub
Falco 總結:Runtime Security 由今日開始
Falco 係 Kubernetes-native runtime security 嘅標準答案。佢唔會取代 image scanning,而係 complement — image scan 管 build-time,Falco 管 runtime。兩樣加埋先係完整嘅 container security 策略。
如果你仲未 deploy runtime security monitoring,今日就係最好嘅時候。起手簡單:裝 Falco → 用 eBPF mode → 駁落 Slack → 慢慢 tune rules。唔使一步到位,最緊要係開始。
📌 延伸閱讀:之前我哋寫過 Docker安全掃描懶人包:用Trivy一鍵掃瞄容器漏洞,Trivy + Falco = build-time + runtime 完整防線!



