콘텐츠로 이동

bpfilter - BPF 기반 Linux 패킷 필터링 치트시트

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.daddrIPv6 주소
ip4.proto프로토콜 (tcp, udp, icmp)
tcp.dport / tcp.sportTCP 포트
udp.dport / udp.sportUDP 포트
tcp.flagsTCP 플래그 조합
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
첨부된 XDPip link show <iface>
카운터bfcli ruleset get의 규칙 카운터
오버헤드sudo bpftop으로 프로그램 비용 확인

bpfilter vs 대안

측면bpfilteriptablesnftables원시 XDP/eBPF
성능높음 (BPF/XDP)낮음 (순차)iptables보다 나음최고
구문친숙하거나 bfcli친숙현대, 통합BPF 코드 작성
성숙도최신매우 성숙성숙사용자에 따라 다름
최고의 용도친숙한 규칙이 있는 BPF 속도기존 호환성현대 netfilter맞춤형 데이터 경로

bpftop으로 런타임 비용을 검사하세요; 클래식 경로를 위해 iptables과 비교하세요.

리소스