XDP를 사용하여 패킷을 삭제하거나 네트워크를 제어할 수 있다는 것을 알고 있지만 프로세스 수준에서 유사한 것을 어떻게 구현합니까?
커널은 우리가 실행 중인 프로세스를 알지 못하므로 eBPF를 사용하여 특정 프로세스에 대한 네트워크 액세스를 어떻게 차단할 수 있습니까(예:공개 내부고발자)?
답변1
OpenSnitch는 eBPF를 사용하여 패킷을 차단하지 않습니다.
eBPF를 사용하지만 커널 스택의 여러 지점에서 패킷을 추적하고 관련 흐름이 연결된 프로세스에 대한 정보를 포함하여 해당 패킷에 대한 메트릭과 메타데이터를 수집하는 데 사용됩니다. 당신은 볼 수 있습니다OpenSnitch 카탈로그의 관련 탐지기.
이 정보는 eBPF 맵을 통해 사용자 공간으로 전달되고, 사용자 공간 에이전트는 패킷을 차단 iptables
하거나 새로운 규칙을 삽입합니다. nftables
(차단 대신 XDP 프로그램을 사용하는 것도 가능하지만, 패킷을 차단하는 네트워크 스택의 모든 프로그램에서 데이터를 수집하는 추적 프로그램을 분리해야 합니다.)
특정 프로세스와 관련된 패킷을 삭제하도록 시스템 전체에 무언가를 설정하려는 경우 유사한 접근 방식을 취할 수 있습니다. 연결이 연결된 프로세스를 식별하는 추적 섹션을 설정한 다음 이 정보를 다른 프로세스에 제공합니다. 패킷의 구성 요소를 삭제합니다.
대신 모니터링하려는 특정 프로세스를 식별하고 패킷을 필터링하려는 경우(일부 패킷은 허용하지만 모든 패킷은 허용하지 않음) 프로그램 연결에 다른 eBPF 후크(소켓 또는 cgroup 관련)를 사용할 수 있습니다. 특정 소켓 또는 네트워크 스택 기능에.