[Linux] eBPF란?
[Linux] eBPF란?
eBPF (Extended Berkeley Packet Filter) 개요
- eBPF (Extended Berkeley Packet Filter)는 리눅스 커널에서 네트워크 패킷 필터링을 넘어선 다양한 작업을 수행할 수 있게 해주는 기술이다.
본래 패킷 필터링 및 분석을 목적으로 개발되었지만, 현재는 성능 모니터링, 보안, 트레이싱, 시스템 관찰 등 다양한 분야에 활용되고 있다.
- eBPF는 일반적으로 커널의 실행을 중단하지 않고 안전하게 코드를 삽입하거나 후킹할 수 있는 기능을 제공한다.
- 이로 인해 커널 모듈을 직접 수정하지 않고도 커널 수준에서 다양한 작업을 수행할 수 있게 되었다.
1. eBPF의 동작 방식
- eBPF는 “프로그램”을 커널 내부에 삽입하여 실행하는 방식으로 작동한다.
- 이 프로그램은 주로 C 언어로 작성되며, 사용자 공간에서 컴파일된 후 커널에 로드된다.
- eBPF 프로그램은 커널의 특정 이벤트나 트리거에서 실행된다.
- 예를 들어, 네트워크 패킷을 필터링하거나 시스템 호출을 추적하는 작업을 수행할 수 있다.
eBPF 프로그램의 흐름
- 프로그램 작성: C 언어로 작성된 eBPF 프로그램이 커널에서 실행될 수 있도록 컴파일됩니다.
- 프로그램 로드: 사용자 공간에서 커널에 eBPF 프로그램을 로드합니다.
- 핸들러(후킹): eBPF 프로그램은 특정 커널 함수, 시스템 호출, 네트워크 스택 등에서 후킹될 수 있습니다.
- 실행: 해당 이벤트나 트리거가 발생하면, 커널은 해당 eBPF 프로그램을 실행합니다.
- 결과 처리: eBPF 프로그램은 결과를 커널에 전달하거나, 특정 작업을 수행한 후 사용자 공간으로 결과를 반환할 수 있습니다.
2. eBPF의 주요 특징
- 커널과 사용자 공간 분리: eBPF는 사용자 공간에서 작성된 프로그램을 커널에 안전하게 로드하고 실행할 수 있게 해줍니다. 커널을 직접 수정하지 않으므로 시스템 안정성에 영향을 주지 않습니다.
- 경량화: eBPF는 코드가 매우 작고 효율적입니다. 이는 성능에 미치는 영향을 최소화하면서 커널 내에서 고급 작업을 처리할 수 있게 합니다.
- 안전성: eBPF는 특정 검증 과정을 거쳐 안전하게 실행될 수 있도록 보장합니다. 프로그램이 잘못된 작업을 수행하지 않도록 커널은 로드되는 프로그램을 검증합니다.
- 확장성: eBPF는 다양한 서브시스템에서 사용할 수 있으며, 네트워크, 트레이싱, 보안, 성능 모니터링 등 여러 분야에 활용됩니다.
3. eBPF의 주요 활용 사례
3.1. 네트워크 필터링 (BPF)
- eBPF는 처음에 네트워크 패킷 필터링을 위해 사용되었다.
tcpdump
나Wireshark
와 같은 도구들이 이 기술을 활용하여 네트워크 패킷을 효율적으로 캡처하고 분석할 수 있다.- eBPF는 커널 내에서 실시간으로 패킷을 필터링하고, 이를 기반으로 고급 분석을 수행할 수 있다.
3.2. 성능 모니터링 및 트레이싱
- eBPF는 성능 모니터링 및 트레이싱 도구에서 매우 중요한 역할을 한다.
- 예를 들어, bpftrace와 perf 같은 도구는 eBPF를 활용하여 시스템 콜, 함수 호출, 스레드 상태 변화 등을 추적한다.
- 이를 통해 실시간으로 시스템의 성능을 분석하고 최적화할 수 있다.
3.3. 보안
- eBPF는 보안에도 중요한 역할을 한다.
- 예를 들어, Seccomp(Secure Computing Mode)와 결합된 eBPF는 시스템 호출을 제어하고, 불법적인 시스템 호출을 차단하여 보안을 강화한다.
- 또한 Cilium과 같은 eBPF 기반 보안 솔루션은 네트워크 트래픽을 검사하고, 이상 징후를 실시간으로 차단하는 기능을 제공한다.
3.4. 커널 오버헤드 감소
- eBPF는 커널 모듈을 작성하지 않고도 커널 기능을 확장할 수 있는 기능을 제공한다.
- 이는 커널을 재구성하거나 새로 컴파일할 필요 없이 실시간으로 커널 기능을 변경할 수 있게 해준다.
3.5. 프로파일링 및 디버깅
- eBPF는 시스템의 동작을 실시간으로 모니터링하고 문제를 추적하는 데 유용하다.
- 예를 들어, 시스템의 특정 함수가 얼마나 자주 호출되는지, 어떤 리소스를 많이 사용하는지 등을 추적할 수 있다.
- 이는 성능 문제나 버그를 찾는 데 유용하다.
4. eBPF와 관련된 도구들
- bpftrace: 사용자 공간에서 eBPF 프로그램을 작성하고 실행할 수 있는 도구입니다. 시스템 트레이싱 및 프로파일링을 위한 고급 스크립팅 언어를 제공합니다.
- Cilium: eBPF를 기반으로 한 네트워크 보안 및 로드 밸런싱 솔루션입니다. Kubernetes 환경에서 네트워크 보안을 관리하는 데 많이 사용됩니다.
- BCC (BPF Compiler Collection): eBPF 프로그램을 작성하고 관리하는 데 도움이 되는 라이브러리와 툴셋을 제공합니다. 시스템 모니터링, 디버깅, 성능 분석 등을 위한 다양한 도구들이 포함되어 있습니다.
- BPF Type Format (BTF): eBPF 프로그램을 작성할 때 사용할 수 있는 커널 데이터 구조에 대한 메타데이터 형식입니다. 이를 통해 eBPF 프로그램이 커널 내부 구조를 보다 효율적으로 다룰 수 있게 합니다.
5. eBPF의 발전
- eBPF는 계속해서 발전하고 있으며, 최신 리눅스 커널(4.x, 5.x)에서는 더 많은 기능과 확장성이 추가되었다.
- 특히, eBPF는 커널 버전마다 새로운 기능을 제공하고, 성능 향상 및 다양한 보안 메커니즘을 추가하는 데 기여하고 있다.
결론
- eBPF는 네트워크 패킷 필터링에서 시작하여, 보안, 성능 모니터링, 트레이싱 등 다양한 영역에 걸쳐 커널과 사용자 공간 사이의 경계를 허물며 중요한 역할을 하고 있다.
- 이를 통해 시스템 관리자와 개발자들은 커널의 복잡한 부분을 안전하고 효율적으로 제어할 수 있으며, 다양한 문제를 실시간으로 해결할 수 있다.
This post is licensed under CC BY 4.0 by the author.