bpfilter - BPF 기반 Linux 패킷 필터링 치트시트
bpfilter는 친숙한 방화벽 규칙을 최적화된 BPF 프로그램으로 변환하는 데몬입니다. 그것이 해결하는 오래된 문제: iptables는 잘 이해되는 구문이지만 순차적 규칙 평가의 성능 천장이 있고, 원시 eBPF/XDP는 빠르지만 BPF 코드 작성 및 유지를 필요로 합니다. bpfilter는 그들을 다리로 연결합니다 — 친숙한 방식으로 규칙을 표현하고, 올바른 훅 (XDP를 포함하여)에 첨부된 효율적인 BPF로 컴파일합니다.
방화벽 변경은 원격 호스트에서 잠금을 걸 수 있습니다. 콘솔 액세스 가능 시스템에서 테스트하고 롤백 경로를 유지하세요.
요구 사항
- 현대식 Linux 커널 with BPF 지원 (6.4+ 권장)
- 루트 권한 (BPF 프로그램 로드)
libbpf 사용 가능
설치
| 방법 | 방법 |
|---|
| 소스에서 | git clone https://github.com/facebook/bpfilter && make && sudo make install |
| 배포 패키지 | 일부 최신 배포에서 사용 가능 |
| 데몬 시작 | sudo bpfilter (또는 systemd를 통해) |
| 확인 | bpfilter --version |
아키텍처
| 부분 | 역할 |
|---|
bpfilter 데몬 | 규칙을 수신, BPF 생성 및 로드 |
bfcli | 규칙을 표현하기 위한 네이티브 CLI |
| iptables/nftables 프론트 엔드 | 기존 규칙을 bpfilter로 변환 |
| BPF 프로그램 | 훅에 첨부된 컴파일된 필터 |
연결 훅
| 훅 | 패킷이 처리되는 곳 |
|---|
| XDP | 가장 먼저 — 드라이버에서, 스택 전 (가장 빠름) |
| TC (트래픽 제어) | 기본 파싱 후, ingress/egress |
| cgroup | 그룹당 소켓 필터링 |
| Netfilter | 클래식 경로에 호환 배치 |
XDP를 선택하면 가장 큰 성능 향상을 얻습니다. 특히 원하지 않는 트래픽 (DDoS 완화)을 버릴 때, 거부된 패킷은 스택을 절대 통과하기 때문입니다.
bfcli로 규칙 정의
# 개념적 규칙 집합: 기본 드롭, SSH 및 설정 트래픽 허용
sudo bfcli ruleset set --from-str '
chain BF_HOOK_XDP policy DROP
rule
ip4.proto tcp
tcp.dport 22
ACCEPT
rule
ip4.saddr 10.0.0.0/8
ACCEPT
'
| 명령 | 설명 |
|---|
bfcli ruleset set --from-file F | 파일에서 규칙 로드 |
bfcli ruleset get | 활성 규칙 집합 표시 |
bfcli ruleset flush | 모든 규칙 제거 |
bfcli chain set | 단일 체인 관리 |
매쳐
| 매쳐 | 매칭 |
|---|
ip4.saddr / ip4.daddr | 소스/대상 IPv4 (CIDR 지원됨) |
ip6.saddr / ip6.daddr | IPv6 주소 |
ip4.proto | 프로토콜 (tcp, udp, icmp) |
tcp.dport / tcp.sport | TCP 포트 |
udp.dport / udp.sport | UDP 포트 |
tcp.flags | TCP 플래그 조합 |
meta.ifindex | 인터페이스 |
판정
| 판정 | 효과 |
|---|
ACCEPT | 패킷 허용 |
DROP | 조용히 폐기 |
CONTINUE | 다음 규칙으로 폴스루 |
기존 iptables 규칙 사용
bpfilter는 기존 도구를 유지할 수 있도록 변환 프론트 엔드를 제공합니다:
# iptables 호환 프론트 엔드를 bpfilter로 지정
sudo iptables-bpfilter -A INPUT -p tcp --dport 22 -j ACCEPT
이것이 마이그레이션 경로입니다: 규칙 구문과 관리 스크립트를 유지하고, 아래의 BPF 실행을 얻습니다.
검증
| 확인 | 명령 |
|---|
| 활성 규칙 집합 | sudo bfcli ruleset get |
| 로드된 BPF 프로그램 | sudo bpftool prog list |
| 첨부된 XDP | ip link show <iface> |
| 카운터 | bfcli ruleset get의 규칙 카운터 |
| 오버헤드 | sudo bpftop으로 프로그램 비용 확인 |
bpfilter vs 대안
| 측면 | bpfilter | iptables | nftables | 원시 XDP/eBPF |
|---|
| 성능 | 높음 (BPF/XDP) | 낮음 (순차) | iptables보다 나음 | 최고 |
| 구문 | 친숙하거나 bfcli | 친숙 | 현대, 통합 | BPF 코드 작성 |
| 성숙도 | 최신 | 매우 성숙 | 성숙 | 사용자에 따라 다름 |
| 최고의 용도 | 친숙한 규칙이 있는 BPF 속도 | 기존 호환성 | 현대 netfilter | 맞춤형 데이터 경로 |
bpftop으로 런타임 비용을 검사하세요; 클래식 경로를 위해 iptables과 비교하세요.
리소스