여기 지침에 따라 단일 프로세스에서 모든 네트워크 트래픽을 격리하고 tcpdump하려고 합니다.프로그래밍 방식으로 패킷을 표시하는 방법):
$ sudo bash
# mkdir /sys/fs/cgroup/net_cls
# mount -t cgroup -onet_cls net_cls /sys/fs/cgroup/net_cls
# mkdir /sys/fs/cgroup/net_cls/tcpdump
# pidof my_program > /sys/fs/cgroup/net_cls/tcpdump/tasks
# echo 0x100001 > /sys/fs/cgroup/net_cls/tcpdump/net_cls.classid
# iptables -A INPUT -m cgroup --cgroup 0x100001 -j NFLOG --nflog-group 123
# iptables -A OUTPUT -m cgroup --cgroup 0x100001 -j NFLOG --nflog-group 123
# tcpdump -i nflog:123
그러나 들어오는 트래픽이 아닌 아웃바운드 트래픽만 표시하므로 성능이 저하됩니다.
# iptables-save -c | grep cgroup
[0:0] -A INPUT -m cgroup --cgroup 1048577 -j NFLOG --nflog-group 123
[4242:623034] -A OUTPUT -m cgroup --cgroup 1048577 -j NFLOG --nflog-group 123
아웃바운드 트래픽에만 관심을 갖는 흐름 제어(tc)와 함께 사용하도록 의도되었으므로 이는 의도적으로 설계된 것입니까, 아니면 결함입니까?
해당 질문에 대한 대답에 관계없이 특정 프로세스(또는 프로세스 집합)에 들어오고 나가는 모든 패킷을 기록하는 더 좋은 방법이 있습니까?
추신 : 명령은 tcpdump -i nflog:123 not src host x.x.x.x
계속 말합니다
tcpdump: NFLOG link-layer type filtering not implemented
링크 레이어 필터링이 필요하지 않더라도. 그게 문제야?
미리 감사드립니다!