私は定期的に繰り返される特定の短期ネットワーク接続を担当する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
可能なオプションの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
さまざまなユースケースに対して同様の操作を実行できます。あなたは見ることができますシステムマイニングユーザーガイドさまざまなフィルタオプションと出力フォーマットの詳細。