マシンからのすべての発信要求/接続を監視するにはどうすればよいですか?


71

私のマシンはサーバーですので、サーバーへの接続を無視したいと思います(誰かが私のWebサイトにアクセスしたときなど)。サーバーから他の場所への接続/要求のみを確認したい。

発信接続のみを表示するにはどうすればよいですか?

編集:私はこれらのタイプのものに新しいです。私がやろうとしているのは、私のウェブアプリのデータ以外にサーバーから何かが送信されているかどうかを確認することです。たとえば、誰かが私のWebサイトにアクセスすると、明らかにサーバーがクライアントのブラウザーにデータを送信します。しかし、統計情報データを知らない他の場所に送信するコードが、私のWebアプリのフレームワークのどこかにあるとします。サーバーがデータを送信している場所があれば、それを確認したいと思います。おそらくそうではないかもしれませんが、あなたが書いていないphpまたはnodejsフレームワークを使用することに決めたとしましょう。何らかのタイプのデータをどこかに送信する可能性はわずかです。もしそうなら、それは私が見たいものです。

回答:


77

を使用しnetstatます。例えば

$ netstat -nputw
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
[...]
tcp        0      0 192.168.25.222:22       192.168.0.134:42903     ESTABLISHED 32663/sshd: gert [p

すべてのUDP(u)、TCP(t)、およびRAW(w)発信接続(lまたはを使用しないa)を数値形式でリストし(n、長時間実行される可能性のあるDNSクエリを防止p)、それに関連するプログラム()を含みます。

c出力を継続的に更新するオプションを追加することを検討してください。


ありがとう。それは良い情報です。更新された質問をご覧ください。
trusktr

1
完全に不適切なハイジャック(この回答が適切にグーグル検索されたことを除く):この回答はWindowsでも機能します。netstatそこで「連続モード」で使用するには、-c機能しません。代わりに数字を使用します(netstat -na 1 | find "[Scan_Host_IP_Addr]"毎秒更新するため1など)(この例では)。(ソース)。
ルフィン

4
これはポーリングするため、常にすべての接続をキャッチするとは限りません。
reinierpost

ドメイン名、IPに関する情報など、よりユーザーフレンドリーな情報を表示する方法はありますか?おそらくカスタムスクリプトを使用していますか?
awm

@awmまあ、それはstraceプロセス上で実行可能で、ネームサーバー検索のフィルタリング(詳細はありません、これに対する完全な答えではありません)。または、回答に含まれてnetstatいるnオプションを省略することで、リストされているIPの逆DNSを表示できます。
gertvdijk

11

すべての接続試行をログに記録するだけの場合、おそらく最も簡単なのはiptables LOGLinux(またはシステム上の同等のファイアウォールログ機能)をターゲットにすることです。

接続の継続時間や両方向で交換されるデータの量などの詳細情報が必要な場合は、conntrackdおそらく(Linuxで)最適なオプションです。

ただし、上記の2つは、netfilterを通過するトラフィックのみをログに記録することに注意してください。これは一般にすべてのトラフィックですが、ユーザー空間(仮想マシンやrawソケットを使用するものなど)のIPスタックで生成されたトラフィックやブリッジされたトラフィックは考慮しません。

より一般的なソリューションについては、次のようなものを見ていることができargusbro-idssancpまたはntopそれは、彼らがインターフェイス上で盗聴トラフィックに基づいてあらゆる種類の情報をログに記録します。


8

私には、ツールの束を試してみたiftopntopiptraf内蔵の、そしてもちろんの非常に便利なnetstat -tupln(サポートされているオプションは、OSに依存します)が、私のユースケースのための最も実用的であることが判明nethogs-それはコネクションを集約し、発信することによりアプリ、そしてすべての中で最もうるさいです。

経由でインストール可能:

sudo apt-get install nethogs

ルートとして実行:

sudo nethogs

目的が、任意のアプリによって開始されたすべてのTCP接続を確認することである場合、次を使用できます。

sudo tcpdump -i lo -A | grep Host:

6

あなたがやりたいと思うのは、リスニングポートのリストを取得し、それらを他のTCP接続から削除することです。それがすべての発信接続になります。ss(ソケットステータス)コマンドは「ローカルアドレス:ポート」および「ピアアドレス:ポート」列を出力します。「ピアアドレス:ポート」列ではなく、「ローカルアドレス:ポート」列からリスニングポートを削除する必要があります。そうしないと、発信接続に失敗する場合があります。それを実現するため\s{2}+に、grepの「:$ port」文字列の後ろで「Local Address:Port」列の後ろにあるスペースと一致するように使用しています。その列の後ろに2つ以上の空白があります。「ピアアドレス:ポート」には1つのスペースがあり、次に改行(grrr ...には改行、IMO、\s+\s{2}+。)通常、のようにssのフィルタリング機能を使用しようとしますss -tn state established '(sport != :<port1> and sport !=:<port2>)' src <ip address>。しかし、その文字列の長さに制限があるように見えます。多くのリスニングポートがあるシステムでは爆弾が爆発しました。だから私はgrepで同じことをしようとしています。私は以下がうまくいくと信じています:

FILTER=$(ss -tn state listening | gawk 'NR > 1 {n=split($3,A,":"); B[NR-1]=A[n]} END {for (i=1; i<length(B); i++) printf ":%s\\s{2}+|", B[i]; printf ":%s\\s{2}+", B[i]}')

ss -tn state established dst :* | grep -P -v "$FILTER"

これは使用しているssのバージョンによって異なります。古いバージョン(ssユーティリティ、iproute2-ss111117など)の出力形式は異なるため、awkで$ 4の代わりに$ 3を使用する必要があります。またss -tlnss -tn state listening異なる出力が得られることに注意してください。これは、私にとっては少し直感に反します。YMMV。

ホストのIPを知る必要のない、わずかにエレガントなソリューションが見つかりましたが、ss -tn state established dst :*うまく機能します。上記のコマンドラインを変更しました。


これがどのように機能するかの説明を追加してください。(回答を編集します。明確な情報をコメントとして投稿しないでください。)部分的には理解できたと思います。もう少し作業が必要なようです。私は走ったss -tn state listeningFTPサーバを実行するホスト上で、自然のコマンドは、マシンがポート21で聞いていたので、それがいることを意味しないことが示されたegrep -v(210」を含むIPアドレスが「21」を含む任意のリモートホストを除外します「、「211」、「212」、...)?また、asort本当に必要なのですか、それともただのウィンドウドレッシングですか?
Gマン

私はほとんどすべてを修正しなければなりませんでした、修正されたスクリプトは上記です。
デール

最終的には、ssまたはnetstatにこの機能を含めるだけの方がずっといいでしょう。を実行して、ss --out発信接続のリストを取得します。
デール

いいですね、私はこの答えが好きです。サーバーのセキュリティの改善に戻ったら、試してみます。:D
trusktr

これはUDPにも使用できるように見えますが、もちろん異なるフラグと状態を使用する必要があります。
デール

4

tcpdump特定の基準に基づいてフィルタリングする機能を使用して、特定のインターフェースに出入りするすべてのIPトラフィックを表示できます。tcpdump通常、ほとんどの* nixシステムにデフォルトでインストールされます。そうでない場合は、通常、特定のディストリビューション用にそれを取得するポートがどこかにあります。



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.