kaffa a28d7fd646 Add time-period models, outlier filtering, and background retrain
- Split single IsolationForest into 4 period models (night/morning/afternoon/evening)
- Each period trained independently on its time window data
- Filter attack samples during retrain using existing model scores (threshold -0.5)
- Retrain runs in background thread with lock, inference continues uninterrupted
- New pickle format 'period_models' with automatic old format detection
- SIGUSR1 and auto-retrain both use background mode

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 10:43:38 +09:00

XDP Defense

XDP Blocker + DDoS Defense 통합 시스템. libxdp 디스패처를 사용해 두 XDP 프로그램을 하나의 인터페이스에서 체인 실행합니다.

아키텍처

패킷 → [xdp_dispatcher]
  → xdp_blocker (우선순위 10):
      화이트리스트 → PASS
      블록리스트  → DROP
      그 외       → PASS
  → xdp_ddos (우선순위 20):
      화이트리스트 → PASS (속도제한 우회)
      차단 IP     → DROP
      속도 초과   → DROP
      그 외       → PASS → 커널 스택
  • xdp_blocker: CIDR/국가/화이트리스트 기반 패킷 필터링 (LPM Trie)
  • xdp_ddos: Per-IP 속도 제한, 자동 차단(만료 지원), AI 트래픽 피처 수집
  • 화이트리스트 공유: LIBBPF_PIN_BY_NAME으로 /sys/fs/bpf/xdp-defense/에 핀닝하여 두 프로그램이 동일한 맵 참조
  • 데몬: EWMA 이상 탐지, Isolation Forest AI, 시간대별 프로필 전환, 만료 블록 자동 정리

요구사항

  • Linux 커널 6.x+
  • clang, libbpf, libxdp (xdp-loader)
  • bpftool, iproute2
  • Python 3, PyYAML
  • scikit-learn (AI 탐지 사용 시)

설치

cd /opt/xdp-defense
make check-deps    # 의존성 확인
make build         # BPF 프로그램 컴파일
make install       # CLI, 라이브러리, systemd 서비스 설치
make enable        # 부팅 시 자동 시작

빠른 시작

# 서비스 시작 (XDP 로드 + 데몬)
systemctl enable --now xdp-defense

# 상태 확인
xdp-defense status

CLI 사용법

시스템

xdp-defense load [iface]      # XDP 프로그램 로드 (기본: config의 interface)
xdp-defense unload [iface]    # XDP 프로그램 언로드
xdp-defense status            # 전체 상태 확인
xdp-defense build             # BPF 프로그램 재빌드
xdp-defense stop-all          # 데몬 중지 + XDP 언로드

CIDR 차단 (blocker)

xdp-defense blocker add 1.2.3.0/24       # CIDR 차단
xdp-defense blocker add 1.2.3.4          # 단일 IP 차단
xdp-defense blocker add 2001:db8::/32    # IPv6 차단
xdp-defense blocker del 1.2.3.0/24       # 차단 해제
xdp-defense blocker list                  # 차단 목록
xdp-defense blocker stats                 # 통계 (passed/dropped/whitelisted)
xdp-defense blocker enable               # 필터링 활성화
xdp-defense blocker disable              # 필터링 비활성화

국가 차단

xdp-defense country add br     # 브라질 차단 (IPv4+IPv6, ipdeny.com에서 다운로드)
xdp-defense country add cn     # 중국 차단
xdp-defense country del br     # 브라질 차단 해제
xdp-defense country list       # 차단 국가 목록

화이트리스트

# 프리셋 (자동 다운로드)
xdp-defense whitelist add cloudflare    # Cloudflare CDN
xdp-defense whitelist add aws           # Amazon Web Services
xdp-defense whitelist add google        # Google Cloud
xdp-defense whitelist add github        # GitHub

# 직접 IP/CIDR
xdp-defense whitelist add 8.8.8.8/32   # 단일 IP
xdp-defense whitelist add 10.0.0.0/8   # CIDR 대역

xdp-defense whitelist del cloudflare    # 프리셋 제거
xdp-defense whitelist del 8.8.8.8/32   # IP 제거
xdp-defense whitelist list              # 목록

화이트리스트 IP는 blocker의 블록리스트를 우회하고, ddos의 속도 제한도 우회합니다.

DDoS 방어

xdp-defense ddos stats                   # 통계 (passed/dropped/total)
xdp-defense ddos top [N]                 # 패킷 수 기준 상위 N개 IP
xdp-defense ddos blocked                 # 차단 IP 목록 (만료 시간 포함)
xdp-defense ddos block 1.2.3.4 3600     # 1시간 차단
xdp-defense ddos block 1.2.3.4 0        # 영구 차단
xdp-defense ddos unblock 1.2.3.4        # 차단 해제
xdp-defense ddos config show             # 속도 제한 설정 확인
xdp-defense ddos config set pps 500     # PPS 임계값 변경
xdp-defense ddos config set bps 1000000 # BPS 임계값 변경
xdp-defense ddos config set window 1    # 윈도우 (초)

AI 이상 탐지

xdp-defense ai status     # AI 모델 상태
xdp-defense ai retrain    # 모델 재학습 요청 (SIGUSR1)

데몬

xdp-defense daemon start     # 백그라운드 시작
xdp-defense daemon stop      # 중지
xdp-defense daemon restart   # 재시작

GeoIP 조회

xdp-defense geoip 1.2.3.4   # 국가, 도시, ASN, 차단 상태 확인

하위 호환

xdp-block 명령은 xdp-defense blocker로 자동 매핑됩니다:

xdp-block add 1.2.3.0/24      # = xdp-defense blocker add 1.2.3.0/24
xdp-block stats                # = xdp-defense blocker stats
xdp-block country-add br       # = xdp-defense country add br

설정

/etc/xdp-defense/config.yaml:

general:
  interface: eth0              # XDP 인터페이스
  log_level: info

blocker:
  enabled: true
  config_dir: /etc/xdp-blocker  # 블록리스트/국가/화이트리스트 데이터

rate_limits:
  default_pps: 1000            # 초당 패킷 임계값
  default_bps: 0               # 초당 바이트 (0=비활성)
  window_sec: 1
  profiles:                    # 시간대별 프로필
    business_hours:
      hours: "09:00-18:00"
      weekdays: "mon-fri"
      pps: 2000
    night:
      hours: "00:00-06:00"
      pps: 500

escalation:
  temp_block_after: 5          # 위반 N회 후 임시 차단
  temp_block_duration: 300     # 임시 차단 시간 (초)
  violation_window: 600        # 위반 기억 윈도우 (초)

ewma:
  alpha: 0.3                   # EWMA 평활 계수
  threshold_multiplier: 3.0    # 기준선 대비 이상 판단 배율

ai:
  enabled: true
  model_type: IsolationForest
  learning_duration: 86400     # 학습 기간 (초)
  anomaly_threshold: -0.16

디렉토리 구조

/opt/xdp-defense/              # 프로젝트 루트
├── bpf/                       # BPF 소스 및 오브젝트
│   ├── xdp_blocker.c
│   └── xdp_ddos.c
├── lib/                       # Python 라이브러리
│   ├── xdp_common.py
│   ├── xdp_country.py
│   ├── xdp_whitelist.py
│   └── xdp_defense_daemon.py
├── bin/                       # 실행 스크립트
│   ├── xdp-defense
│   └── xdp-startup.sh
├── config/                    # 설정 템플릿
│   ├── config.yaml
│   └── xdp-defense.service
└── Makefile

/etc/xdp-defense/config.yaml   # 런타임 설정
/etc/xdp-blocker/              # 블록리스트/국가/화이트리스트 데이터
/var/lib/xdp-defense/          # PID, AI 모델, 학습 데이터
/sys/fs/bpf/xdp-defense/       # 공유 BPF 맵 핀 경로

systemd 서비스

systemctl enable --now xdp-defense   # 활성화 + 시작
systemctl restart xdp-defense        # 재시작
systemctl status xdp-defense         # 상태
journalctl -u xdp-defense -f        # 로그

서비스 흐름:

  1. ExecStartPre: XDP 프로그램 로드 + 블록리스트/국가/화이트리스트 복원
  2. ExecStart: 데몬 포그라운드 실행 (EWMA, AI, 프로필, 클린업 스레드)
  3. ExecStop: 데몬 중지 + XDP 언로드

제거

make uninstall                       # CLI, 서비스 제거 (설정은 보존)
systemctl stop xdp-defense           # 서비스 중지

롤백 (이전 시스템으로):

systemctl stop xdp-defense
systemctl start xdp-blocker          # 기존 blocker 복원
Description
XDP-based network defense: CIDR blocker + DDoS detection with time-aware AI
Readme 88 KiB
Languages
Python 49.6%
Shell 31.2%
C 16.8%
Makefile 2.4%