go-lsm
메인 인덱스 | bob-yamong | GitHub
이 문서는 go-lsm 레포를 코드 기준으로 다시 읽은 메모입니다. 이 레포는 큰 정책 엔진이라기보다, Go 로더와 C 기반 eBPF LSM 프로그램을 아주 작게 연결해 보는 실험용 예제로 읽힙니다.
한 줄 소개
go-lsm은 Go에서 cilium/ebpf로 LSM 프로그램을 붙이고, ring buffer 이벤트를 읽어 연결 차단 여부를 확인하는 최소 구성 실험 레포입니다.
기술 스택
- Go
- C
github.com/cilium/ebpf- LSM hook
- ring buffer
코드 기준으로 확인한 구조
main.go는loadBpfBlockConnectObjects로 BPF 오브젝트를 로드한 뒤link.RawAttachProgram과ebpf.AttachLSMMac로 LSM 프로그램을 붙입니다.- 같은 파일은
ringbuf.NewReader로 ring buffer를 열고,socketEvent구조체를 읽어ALLOWED/BLOCKED로그를 출력합니다. bpf_block_connect.c는SEC("lsm/socket_connect")훅을 사용하며, IPv4 소켓의 목적지 포트가80일 때return -1로 차단합니다.- 차단 여부와 포트 정보는
socket_eventsring buffer map으로 사용자 공간에 전달됩니다. - 허용된 경우에도 이벤트를 남기므로, 이 레포는 “차단” 자체보다 “Go 로더 + LSM + ring buffer” 조합을 확인하는 학습용 샘플에 더 가깝습니다.
주요 파일과 흐름
main.go: Go 로더, LSM attach, ring buffer consumerbpf_block_connect.c:socket_connect훅에서 포트 80 차단go.mod:cilium/ebpf기반 실험이라는 점을 바로 보여 줍니다.
포트폴리오 메모
이 레포는 youmuu.md나 gomumu.md처럼 큰 시스템을 설명하는 문서보다는, Go로 eBPF LSM 로더를 붙이는 최소 흐름을 설명할 때 더 적합합니다. 현재 소스만 보면 정책 엔진보다는 실험용 프로토타입에 가깝고, 그래서 오히려 user-space 쪽 선택을 어떻게 시험했는지 이야기하기 좋은 레포입니다.