반응형
BPF, 패킷을 필터링하는 도구

 

BPF(Berkeley Packet Filter)가 무엇을 하는가?

 BPF는 일종의 툴로, 패킷 필터링하는 도구이다. 그 이름에서 알 수 있다. 이름 앞에 버클리(Berkeley)가 들어간 이유는 Berkeley Lab에서 탄생했기 때문이다.

 BPF는 일종의 기술로도 쓰이는 데, 네트워크 트래픽을 분석하는 프로그램을 위한, 특정 OS에서 사용하는 기술을 의미한다. 즉, 특정 OS (예를 들면 우분투)에서 네트워크 트래픽을 분석하는 프로그램을 만들고 싶다면, 이 BPF라는 기술을 쓸 수 있다.

 BPF는 리눅스 시스템을 관찰하는 도구로도 쓰인다.

 

BPF, 이 기술은 누가 만들었는가?

 BPF는 Steven McCanne와 Van Jacobson가 Berkeley Lab에서 만들어졌다. Berkeley Lab은 로렌스 버클리 국립연구소의 줄임말이다. 여튼 미국인이 만들었다.

 

 

 

읽어두면 좋을 것 (소켓 필터에 관해서)

https://www.kernel.org/doc/html/latest/networking/filter.html#notice

 Linux Socket Filtering (LSF)은 Berkeley Pacekt Filter에서 파생되어졌다. 우리가 BPF 혹은 LSF을 말할 때, 사실 그 둘은 리눅스 커널 안에서 거의 같은 필터링 메커니즘이다.

 

 BPF는 user-space의 프로그램이 특정 소켓에 대해서 필터를 추가할 수 있도록 해준다. 그리고, 그 소켓으로 오는 특정 데이터 타입을 허용/불허할 수 있습니다. 필터들을 만드는데 bpf.4 manpage는 매우 유용할 것이다.

 

 On Linux, BPF is much simpler than on BSD. BPF는 디바이스들에 대해서 걱정하지 않아도 된다. 우리는 우리만의 filter code를 쉽게 만들 수 있다. SO_ATTACH_FILTER 옵션을 통해서 그것을 커널에게 보내버리고 나의 필터 코드가 커널 check에 통과한다면?, 즉시 그 소켓에 대해서 필터링을 시작할 수 있다.

 

 

 

 

좀 더 자세히 알아보자

그래, 이 툴로 그래서 무엇을 하는 것인가?

이 BPF는 데이터링크에 대한 원시 인터페이스를 제공하여 원시 링크 계층 패킷을 송수신 할 수 있게한다.

 


어렵게 풀어쓰자면,

BPF의 주요 특징은 무엇인가?

- BPF는 대부분의 유닉스 계열의 OS에서 사용할 수 있다.

- BPF는 네트워크 인터페이스의 드라이버가 무차별 모드를 지원하는 경우 다른 호스트로 가는 패킷을 포함하여 네트워크의 모든 패킷을 수신하도록 인터페이스를 해당 모드로 전환할 수 있다.

- BPF는 패킷 필터링을 지원하므로 유저 스페이스 프로세스가 수신할 패킷을 지정하는 필터 프로그램을 제공할 수 있다. 예를 들어 tcpdump

- BPF는 데이터링크에 대한 원시 인터페이스를 제공하여 원시 링크 계층 패킷을 송수신 할 수 있게 한다.

 

 

ubuntu에서 사용해보자



출처/참고자료

https://www.kernel.org/doc/html/latest/networking/filter.html

 

예제실행해보기

https://kernel.googlesource.com/pub/scm/linux/kernel/git/ast/bpf/+/v14/samples/bpf 

 

 

https://www.ibm.com/docs/en/qsip/7.4?topic=queries-berkeley-packet-filters
https://zetawiki.com/wiki/BPF

반응형