나는 정기적으로 반복되는 특정 단기 네트워크 연결을 담당하는 Linux 프로그램/프로세스를 결정하는 올바른 절차를 배우는 데 관심이 있습니다.
"트래픽이 이 포트에 있으므로 프로그램 X와 관련이 있어야 합니다."와 같은 가정을 하지 마십시오.
또한 이 트래픽이 식별된 프로그램이나 프로세스와 관련되어 있는지 확인할 수 있는 검증 가능하고 입증 가능한 방법을 갖고 싶습니다.
tcpdump
예를 들어, Ubuntu 배포판을 보고 있는데 다음과 같은 내용이 보인다고 가정해 보겠습니다 .
07:28:59.935102 IP 10.8.8.5.57667 > time-a-b.nist.gov.ntp: NTPv4, Client, length 48
07:29:00.048145 IP time-a-b.nist.gov.ntp > 10.8.8.5.57667: NTPv3, Server, length 48
08:03:08.184704 IP 10.8.8.5.59451 > time-a-b.nist.gov.ntp: NTPv4, Client, length 48
08:03:08.297119 IP time-a-b.nist.gov.ntp > 10.8.8.5.59451: NTPv3, Server, length 48
정보를 수집하고 어떤 프로그램이 실제로 해당 정보를 생성하는지 확인하려면 어떻게 해야 합니까?
시간 서버에 대한 NTP 호출은 단지 실제적인 예일 뿐입니다. 다른 네트워크 호출에도 작동하는 솔루션이 있기를 바랍니다. 마음대로 정보를 외부로 보낼 수 있는 애플리케이션이 점점 더 많아지고 있는 것 같은데, 어떤 프로세스인지 알아보고 적법성을 판단하고 싶습니다.
답변1
가능한 옵션 중 하나는 오픈 소스 도구를 사용하는 것입니다.sysdig
, 이를 통해 프로세스별로 시스템 호출을 추적할 수 있습니다. 을 사용하면 sysdig
나가는 연결을 모니터링할 수 있습니다.
귀하의 예를 바탕으로 어떤 프로세스가 원격 NTP 서버에 연결되어 있는지 알고 싶다면 다음을 사용할 수 있습니다.
$ sudo sysdig evt.type=connect and fd.sport=ntp
connect()
그러면 표준 NTP 포트를 서버측 포트로 지정하는 시스템 호출이 필터링됩니다 .
설명하기 위해 NTP 업데이트를 트리거하겠습니다.
$ sudo ntpdate pool.ntp.org
그러면 sysdig
다음과 같은 출력이 생성됩니다.
50365 18:54:32.790143415 7 ntpdate (4089388) < connect res=0 tuple=192.168.1.135:33982->173.72.22.244:123
50368 18:54:32.790144930 7 ntpdate (4089388) > connect fd=3(<4u>192.168.1.135:33982->173.72.22.244:123)
50371 18:54:32.790147190 7 ntpdate (4089388) < connect res=0 tuple=192.168.1.135:46730->204.11.201.12:123
50374 18:54:32.790148380 7 ntpdate (4089388) > connect fd=3(<4u>192.168.1.135:46730->204.11.201.12:123)
50377 18:54:32.790150548 7 ntpdate (4089388) < connect res=0 tuple=192.168.1.135:40705->129.250.35.251:123
50380 18:54:32.790151746 7 ntpdate (4089388) > connect fd=3(<4u>192.168.1.135:40705->129.250.35.251:123)
50383 18:54:32.790153641 7 ntpdate (4089388) < connect res=0 tuple=192.168.1.135:42732->104.236.116.147:123
50392 18:54:32.790161130 7 ntpdate (4089388) < connect res=0 tuple=192.168.1.135:36404->173.72.22.244:123
50398 18:54:32.790165853 7 ntpdate (4089388) < connect res=0 tuple=192.168.1.135:50312->204.11.201.12:123
50404 18:54:32.790170315 7 ntpdate (4089388) < connect res=0 tuple=192.168.1.135:37229->129.250.35.251:123
50410 18:54:32.790174565 7 ntpdate (4089388) < connect res=0 tuple=192.168.1.135:59468->104.236.116.147:123
50450 18:54:32.790255847 7 ntpdate (4089388) < connect res=0 tuple=::1:44859->:::123
50453 18:54:32.790257385 7 ntpdate (4089388) > connect fd=3(<6u>::1:44859->:::123)
50456 18:54:32.790260502 7 ntpdate (4089388) < connect res=0 tuple=127.0.0.1:41670->0.0.0.0:123
ntpdate
이 출력을 통해 이것이 NTP 서버에 연결하는 프로그램이고 프로세스 ID가 4089388이라는 것을 알 수 있습니다 .
위의 예는 NTP에만 해당되지만 sysdig
다양한 사용 사례에 대해 유사한 작업을 수행할 수 있습니다. 너는 볼 수있어시스템 마이닝 사용자 가이드다양한 필터 옵션 및 출력 형식에 대한 자세한 내용.