준비

준비

iptables 또는 기타 방화벽/도구를 사용하여 Linux에서 특정 프로그램/cmd의 모든 패킷(인바운드 및 아웃바운드)에 태그를 지정하는 방법

--cmd-owner 옵션이 더 이상 사용되지 않는 경우 참조:http://www.spinics.net/lists/netfilter/msg49716.html.

예를 들어, Firefox가 프로세스를 생성할 수 있다는 것을 알고 모든 Firefox 패킷을 표시하는 방법이 있으므로 PID 옵션을 사용할 수 없습니다.

답변1

가능한 해결책은 다음과 같습니다.cgroups net_clscgroup하위 시스템은 특정 프로세스 그룹을 그룹화하고 iptables규칙을 사용하여 그 안에 있는 패킷을 표시합니다.경기 확장, 이는 tcpdump이 cgroup의 패킷을 모니터링하는 데 사용됩니다. 청취 nflog인터페이스를 통해.

준비

net_cls서브시스템에 cgroup 생성

$ mkdir /sys/fs/cgroup/net_cls/firefox

cgroup에 관련 pid를 추가합니다.

모든 관련 PID가 그룹화되었는지 확인하는 가장 좋은 방법은 다음을 수행하는 것입니다.앞으로애플리케이션 실행을 시작합니다.

예를 들어 Firefox를 실행하려면 먼저 echo $$현재 쉘의 pid( )를 확인하세요. 그런 다음 생성한 cgroup에 추가합니다.

$ echo <pid> > /sys/fs/cgroup/net_cls/firefox/tasks

쉘에서 생성된 모든 프로세스는 이제 "firefox" cgroup에 할당됩니다.

cgroup에 클래스 ID 할당

문서에서cgroups net_cls:

net_cls.classid에 16진수 값을 쓸 수 있습니다. 이 값은 0xAAAABBBB 형식입니다. AAAA는 기본 핸들 번호이고 BBBB는 보조 핸들 번호입니다.

echo 0x100001 > /sys/fs/cgroup/net_cls/firefox/net_cls.classid

iptables규칙에서 이러한 패킷을 표시합니다.

iptables가지다경기 확장다음을 활용할 수 있습니다.

게임 확장

iptables는 -m 또는 --match 옵션과 함께 확장 패킷 일치 모듈을 사용할 수 있으며 그 뒤에는 일치 모듈 이름이 있으며 특정 모듈에 따라 다양한 추가 명령줄 옵션을 사용할 수 있습니다.

너는 사용한다그룹확장 모듈을 할당하고 이러한 패킷을 표시합니다.신경망 로그그룹 목표:

신경망 로그

이 대상은 일치하는 패킷의 로깅을 제공합니다. 규칙에 대해 이 대상이 설정되면 Linux 커널은 패킷을 로드된 로깅 백엔드로 전달하여 패킷을 기록합니다. 이는 일반적으로 nfnetlink_log와 함께 로깅 백엔드로 사용되며, 이는 netlink 소켓을 통해 지정된 멀티캐스트 그룹으로 패킷을 멀티캐스트합니다. 하나 이상의 사용자 공간 프로세스가 이 그룹에 가입하여 패킷을 수신할 수 있습니다.

--nflog-group nlgroup

패킷이 속한 netlink 그룹(0 - 2^16-1)입니다(nfnetlink_log만 해당). 기본값은 0입니다.

따라서 다음과 같습니다(생성한 net_cls.classid를 가져오고 nflog 그룹에 대한 특정 번호를 결정합니다).

$ iptables -I INPUT 1 -m cgroup --cgroup 0x100001 -j NFLOG --nflog-group 123
$ iptables -I OUTPUT 1 -m cgroup --cgroup 0x100001 -j NFLOG --nflog-group 123

nflog이 규칙은 cgroup의 모든 들어오고 나가는 패킷에 그룹 번호 123으로 태그를 지정합니다.

달리기tcpdump

이 인터페이스를 사용할 수 있습니다 nflog. 모든 버전이 tcpdump이 기능을 지원하는 것은 아닙니다. 귀하의 버전이 다음을 지원하는지 확인할 수 있습니다.

$ tcpdump --list-interfaces |grep nflog
5.nflog (Linux netfilter log (NFLOG) interface) [none]

그렇다면 해당 인터페이스에서 생성한 cgroup의 프로세스가 보내고 받는 모든 패킷을 수신할 수 있습니다.

$ tcpdump -v -i nflog:123

관련 정보