特定のポートのTCPトラフィックを監視する


49

私はこれを非常に広範囲に検索しましたが、実用的な例が思いつかないようです。

私の目的は、特定のポートのTCPトラフィックを監視して着信接続を確認し、テキストファイルに書き込むことです。キャッチは、クライアントが2番目に接続したときを正確に示すために、各行にタイムスタンプも必要だということです。

netstat、nmap、tcptrackは使い果たしましたが、タイムスタンプをサポートしているものはありません。

特定のローカルポートを監視し、接続が確立されたときにテキストをファイルに書き込み、各行の日付を連結するだけで、Linuxシェルスクリプトが機能する可能性があると考えていました。

私はこれで遊んでいました:

netstat -ano|grep 443|grep ESTABLISHED

これと同様に:

tcptrack -i eth0 port 443

しかし、接続が来る時間を必要とするので、どちらも私のニーズに合いません。

あなたが何か提案を持っているか、正しい方向に私を指すことができれば、それは大歓迎です。

ありがとう。:)

linux  bash 

ハハはstackoverflowから移行しましたが、unix / linuxに移行する必要があります
Kolob Canyon

回答:


71

編集:私はこの数年後もまだ賛成票を得ています。この答えに行かないでください、ここで使用iptablesする答えは私の意見でははるかに優れています。


tcpdump port 443 and '(tcp-syn|tcp-ack)!=0'

必要なものに応じてtcp-syn、またはonly 、またはonly tcp-ack(私の推測ではその1つになります)。


各接続のホスト名を表示する代わりに、IPでホスト名をオーバーライドする方法はありますか?

はい、-ntcpdumpの後に追加します(man tcpdump:-nアドレス(ホストアドレス、ポート番号など)を名前に変換しないでください。
Wrikken

5
カーネルログへのスパム送信は、それほど優れているとは言えません。;)
ダニエルB

1
ああ、しかし、私は、どのログがもちろん行くべき場所を適切に構成することを提供します:Pしかし、ちょっとそれは、それが取引ブレーカであれば、この答えはまだここにあります:)
Wrikken

2
@Wrikkenカーネルログを使用する際の問題は、tcpdumpからctrl + cを押したときにソリューションを使用すると、すべてが以前のままであるということです。iptablesソリューションは、ルールを手動で削除しない場合に「サプライズ」を残すことを意味します。この驚きは、すぐに完全なルートディスクを持つことになります。申し訳ありませんが、私はupvotingよこの(:
ジョン・ベリー

31

これには、Linuxカーネルのiptablesサポートを使用できます。利点は、適度に有用であるために追加のソフトウェアを必要としないことです。欠点は、セットアップするのにルート権限が必要なことです(ただし、ポート443について話しているので、これはほとんどのソリューションでルート権限が必要です)。

次のようなiptablesルールを追加します。

sudo iptables -I INPUT -p tcp --dport 443 --syn -j LOG --log-prefix "HTTPS SYN: "

-I INPUT好みに合わせてパーツを調整します。)

ルールがトリガーされると、カーネルによってsyslogエントリーが発行されます。たとえば、入力ルールでは、ログエントリは次のようになります。

12月5日09:10:56ホスト名カーネル:[1023963.185332] HTTPS SYN:IN = ifX OUT = MAC = 80:80:80:80:80:80:80:80:80:80:80:80:08:00 SRC = ABCD DST = WXYZ LEN = 52 TOS = 0x00 PREC = 0x20 TTL = 119 ID = 11901 DF PROTO = TCP SPT = 37287 DPT = 443 WINDOW = 8192 RES = 0x00 SYN URGP = 0

その後、任意の実行ログ監視ツールを使用して、この情報を使用して有用なことを実行できます。syslog実装でサポートされている場合は、これらを個別のログファイルに送信して、追加のソフトウェアなしで2番目にタイムスタンプされたファイルに接続データを書き込むという要件を効果的に満たすこともできます。

LOGターゲットは非終了ターゲットであることに注意してください。これは、それに続くルールが引き続き評価され、LOGルール自体によってパケットが拒否または受け入れられないことを意味します。これにより、LOGターゲットはファイアウォールルールのデバッグにも役立ちます。

ログのフラッディングを回避するにはlimit、これと組み合わせてモジュールを使用することを検討してください。詳細については、iptables(8)のマニュアルページを参照してください。


これをトリガーするPythonスクリプトを実行することは可能ですか?
カールジルナー

完了したら、これらのIPテーブルルールを削除することを忘れないでください。削除しないと、ルールに応じてログが大量にスパムされます。digitalocean.com/community/tutorials/...
MoのBeigi

26

マイクロ秒の解像度

デフォルトでは、tcpdumpユーティリティはマイクロ秒の解像度で時間を報告します。例えば:

$ sudo tcpdump -i any port 443

次のような出力が表示されます。

12:08:14.028945 IP localhost.33255> localhost.https:フラグ[S]、seq 1828376761、win 43690、オプション[mss 65495、sackOK、TS val 108010971 ecr 0、nop、wscale 7]、長さ0
12:08: 14.028959 IP localhost.https> localhost.33255:フラグ[R。]、seq 0、ack 1828376762、win 0、length 0

tcpdumpオプションの完全なリストについてはtcpdump(8)を、使用できるフィルターの完全な構文についてはpcap-filter(7)を参照してください。


5

443は暗号化されたトラフィックです。このポートでトラフィックの先頭または末尾を作成するのは非常に困難です。

できるよ

yum install ngrepまたはapt-get install ngrep

その後、実行します

ngrep -W byline -d any port 443 -q

2

これは、他のマシンからの着信および発信パケットを監視するためにも必要になる場合があります。

tcpflow -i eth0 -c port 7891

-iネットワークに言及するオプション-c、コンソールでパケットを印刷するオプション)


これは実際にはコメントであり、元の質問に対する答えではありません。投稿者に批評または説明を依頼するには、投稿の下にコメントを残します-自分の投稿にいつでもコメントできます。十分な評判たら、投稿コメントできるようになります。コメントするのに50の評判が必要な理由を
DavidPostill


0

対象ポートのトラフィックを常に監視する永続的なソリューションが必要な場合は、QoS(Linuxのtcコマンド)を使用することをお勧めします。tcは少し暗号化されており、文書化されていないため、FireQoSを使用してQoSとnetdataをセットアップし、リアルタイムで監視します。

詳細については、これを確認してください:https : //github.com/firehol/netdata/wiki/You-should-install-QoS-on-all-your-servers


これは、iPTables + --logが機能する接続のログを記録するためだけの、ちょっとしたキルです。
djsmiley2k-CoW

接続を記録する必要がある場合、それはやり過ぎです。このソリューションを使用して、接続されているクライアントを監視するのではなく、サービスが使用する帯域幅を監視します。
コスタツァーシス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.