
XDP 기반 경량 고속 방화벽
Siper는 Go와 C (eBPF)로 구축된 고성능 XDP 기반 IP 블랙리스트 방화벽입니다. 악성 트래픽을 Linux 네트워킹 스택에서 가장 초기 단계인 네트워크 드라이버 수준에서 차단할 수 있습니다. XDP(Express Data Path)를 활용하여 Siper는 패킷이 커널의 무거운 네트워킹 서브시스템에 도달하기 전에 처리하므로, 심각한 DDoS 조건에서도 극한의 성능을 제공합니다.
XDP 기반 성능: 패킷 필터링이 NIC 드라이버 수준에서 XDP_DROP을 사용하여 이루어지므로 iptables나 nftables에 비해 CPU 오버헤드가 현저히 낮습니다.
LPM(Longest Prefix Match): CIDR 기반 차단(예: 192.168.1.0/24)을 지원하며, 효율적인 IP 범위 조회를 위해 특화된 BPF LPM Trie 맵을 사용합니다.
영구 구성: 규칙은 로컬 JSON 기반 블랙리스트를 통해 관리되며, 차단된 주소의 감사 및 버전 관리를 용이하게 합니다.
실시간 관찰 가능성: 드롭 및 통과된 트래픽 모두에 대한 패킷 및 바이트 카운터를 추적하는 내장 메트릭을 제공합니다.
미니멀리스트 아키텍처: 컴파일된 BPF 객체가 데이터 플레인을 처리하고, Go 기반 CLI가 컨트롤 플레인을 관리합니다.
Siper는 컨트롤 플레인(사용자 공간)과 데이터 플레인(커널 공간)을 분리하는 원칙에 따라 작동합니다.
인그레스: 패킷이 네트워크 인터페이스에 도착합니다.
조회: XDP 프로그램이 패킷을 가로채서 block_list 맵에서 조회를 수행합니다.
판정:
사전 요구 사항
make
build/ 디렉토리로 이동
로컬 구성 파일에서 IP 범위를 추가하거나 제거합니다:
# 리스트에 CIDR 추가
sudo ./siper add --cidr 1.2.3.0/24 --comment "Known botnet"
# 규칙 삭제
sudo ./siper del --cidr 1.2.3.0/24
특정 네트워크 인터페이스에 방화벽을 연결합니다:
# 방화벽 시작
sudo ./siper run --iface eth0 --path ./blacklist.json
# 방화벽 중지 및 연결 해제
sudo ./siper stop --iface eth0
커널 내부에서 발생하는 상황을 확인합니다:
# BPF 맵에서 현재 활성 키 보기
sudo ./siper dump-keys
# 드롭/통과 통계 모니터링
sudo ./siper dump-metrics
풀 리퀘스트를 환영합니다. 버그 수정 및 작은 개선 사항은 풀 리퀘스트를 제출해 주세요. 주요 변경 사항의 경우, 먼저 이슈를 열어 변경하고자 하는 내용에 대해 논의해 주세요.
이 프로젝트는 자유 소프트웨어입니다; GPLv3 라이선스 조건에 따라 재배포 및 수정할 수 있습니다. 자세한 내용은 LICENSE 파일을 참조하세요.