사용법

로컬 Rust application으로 실행되며, web dashboard를 내장합니다.

요구 사항

빌드 및 실행

cargo build --release

# live capture 및 dashboard server 시작 (root 또는 CAP_NET_RAW 필요)
sudo ./target/release/capstone serve

기본 dashboard 주소: http://0.0.0.0:8080

설정 (capstone.toml)

섹션주요 설정 항목
storeDB path, snapshot directory
captureinterface 또는 .pcap file, IP cooldown, private address filtering
prefiltermodel/label path, skip_ports, skip_ips, conf_threshold
probetimeout, 최대 asset 수, Chromium 경로
filterwatch / probe 임계값
ip_to_domainlookup source 순서, cache path, DoH verification
apibind address, worker 수

Prefilter 설정 예시

[prefilter]
enabled        = true
model_path     = "~/.local/share/capstone/prefilter.json"
labels_path    = "~/.local/share/capstone/prefilter_labels.toml"
length_dim     = 10
conf_threshold = 0.5

# 분류 제외 port (training data에 없는 traffic)
skip_ports = [22, 23, 25, 53, 110, 123, 143, 389, 3478, 5353]

# 분류 제외 IP (DNS-over-HTTPS resolver)
skip_ips = ["8.8.8.8", "8.8.4.4", "1.1.1.1", "1.0.0.1"]

Training pipeline

전체 pipeline을 한 command로 실행합니다.

# 필요한 package 설치 (최초 1회)
uv run --project scripts python3 -m playwright install chromium

# 전체 pipeline 실행
uv run --project scripts python3 scripts/main.py all \
  --target-flows 300 \
  --max-visits 50

# 또는 step별 실행
uv run --project scripts python3 scripts/main.py capture --target-flows 300
uv run --project scripts python3 scripts/main.py extract
uv run --project scripts python3 scripts/main.py train
uv run --project scripts python3 scripts/main.py export

주요 옵션:

Option기본값설명
--target-flows N50site별 target TCP flow 수 (초과 시 다음 site로)
--max-visits N30site별 최대 visit 횟수 (safety limit)
--dwell N20page당 dwell time(초)
--iface NAMEenp7s0capture interface
--page-list PATHutils/webscrapper/page_list.txtURL list file

training이 끝나면 model은 ~/.local/share/capstone/prefilter.jsonprefilter_labels.toml에 저장됩니다. capstone serve를 재시작하면 바로 적용됩니다.

Dashboard routes

경로내용
/overview — active alert, tracked domain, capture IP, prefilter 현황
/alertsalert list (ARI classification type 포함)
/domainsdomain list (risk score, decision)
/domains/<domain>domain detail 및 history
/probereverse IP lookup tool

tcpdump 권한 설정

# non-root 실행을 위한 권한 부여 (1회)
sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/tcpdump