私のマシンはサーバーなので、サーバーへの接続(たとえば、誰かが私のWebサイトにアクセスしたとき)を無視したいと思います。 onlyサーバーから他の場所への接続/要求が行われるのを見たい。
onlyこれらの発信接続はどのように表示されますか?
編集:私はこれらのタイプのものに新しいです。私がやろうとしていることは、私のWebアプリのデータ以外にサーバーから何かが送信されているかどうかを確認することだけです。たとえば、誰かが私のウェブサイトを訪問した場合、明らかに私のサーバーはクライアントのブラウザにデータを送信します。しかし、私のウェブアプリのフレームワークのどこかに、統計データを知らない他の場所に送信するコードもあるとします。サーバーがデータを送信している場所があれば、それを確認したいのですが。おそらくそうではないかもしれませんが、自分で記述していないphpまたはnodejsフレームワークを使用することにしたとしましょう。あるタイプのデータをどこかに送信する可能性はわずかです。もしそうなら、それは私が見てみたいものです。
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
オプションを追加して、出力が継続的に更新されるようにすることを検討してください。
すべての接続試行をログに記録するだけの場合は、おそらくLinux(またはシステムの同等のファイアウォールログ機能)のiptables
LOG
ターゲットが最も簡単です。
接続の継続時間や両方向で交換されるデータ量などの詳細情報が必要な場合は、conntrackd
(Linuxの場合)がおそらく最適なオプションです。
ただし、上記の2つはnetfilterを通過するトラフィックのみをログに記録します。これは通常すべてのトラフィックですが、ユーザー空間のIPスタックで生成されたトラフィック(仮想マシンまたはrawソケットを使用するものなど)またはブリッジされたトラフィックは考慮しません。
より一般的なソリューションについては、argus
、bro-ids
、sancp
またはntop
のようなものを調べて、それらが盗聴するトラフィックに基づいてあらゆる種類の情報をログに記録することができますインターフェイス上。
iftop
、ntop
、iptraf
、そしてもちろん非常に便利な組み込みnetstat -tupln
(サポートされているオプションはOS -依存)、しかし私のユースケースで最も実用的なのはnethogs
であることが判明しました-接続を集約します元のアプリによってであり、すべてのノイズが最も少ないです。
経由でインストール可能:
Sudo apt-get install nethogs
ルートとして実行:
Sudo nethogs
目的が、すべてのTCPすべてのアプリによって開始された接続を確認することである場合、次を使用できます。
Sudo tcpdump -i lo -A | grep Host:
あなたがやりたいことは、リスニングポートのリストを取得し、他のポートからそれらを削除することですTCP接続、それからすべての発信接続になります。ss(ソケットステータス)コマンド「Local Address:Port」列と「Peer Address:Port」列を出力します。「Peer Address:Port」列ではなく、「Local Address:Port」列からリスニングポートを削除する必要があります。そうしないと、送信接続が失われる可能性があります。 。それを実現するには、grepの ":$ port"文字列の後ろに_\s{2}+
_を使用して、 "Local Address:Port"列の後ろにあるスペースに一致させます。その列には2つ以上の空白がありますその後ろに、「Peer Address:Port」に1つのスペースと改行があります(grrr ...改行、IMOだけが必要です。そうすれば、_\s+
_ではなく_\s{2}+
_を使用できます。)通常、私はss -tn state established '(sport != :<port1> and sport !=:<port2>)' src <ip address>
のようにssのフィルタリング機能を使用しようとするかもしれませんが、その文字列の長さに制限があるようです。多くのリスニングポート。だから私は同じことを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 -tln
_と_ss -tn state listening
_は異なる出力を提供することにも注意してください。これは私には少し直観に反しています。 YMMV。
ホストのIPを知る必要がない、もう少しエレガントなソリューションを見つけました。_ss -tn state established dst :*
_はうまく機能し、上記のコマンドラインを変更しました。
tcpdump
を使用すると、特定の基準に基づいてフィルタリングする機能を使用して、特定のインターフェースとの間でやり取りされるすべてのIPトラフィックを確認できます。 tcpdump
は通常、デフォルトでほとんどの* nixシステムにインストールされますが、通常、特定のディストリビューション用にそれを取得するためのポートがどこかにありません。
netstat
は適切なオプションです。必要に応じてパラメーターを使用してください(そのmanページを参照)。次に例を示します。
netstat -antup
ここでは、すべての(a)リスニング数値(n)tcp(t)およびudp(u)プロセス(p)を監視できます。
ss
コマンドを試すこともできます。参照用:
Solarisまたはその派生物を実行している場合は、 conntrack を参照してください。