web-dev-qa-db-ja.com

netstatとip_conntrackの接続数は、桁違いに異なります。どうして?

/ proc/net/ip_conntrackに私が持っています:

established 3076
time_wait 4346
total 7468

そしてnetstatで私は持っています:

established 1051
time_wait 73
total 1165

何故ですか?他の接続はどこにありますか?彼らが何をしているのかを理解する方法は?

更新: ip_conntrackのいくつかの統計

assured 5230
unreplied 2133
total 7427
5
Poma

Conntrackモジュールは、最近の接続をX秒間記憶してから、最終的に期限切れになります。これは、私の理解では、iptablesがこの情報を利用できる他のいくつかのモジュールを持っているためです。たとえば、ある時間枠の間にXの新しい接続を行う場合にIPアドレスを禁止したい場合などです。

一方、netstatはリアルタイムの情報を表示し、古代の歴史には関心がありません。

Conntrackテーブルのエントリの最大数を増やしましたか?最近のカーネルでは、何が起こりますか

sysctl net.ipv4.netfilter.ip_conntrack_max

...またはいくつかの古いカーネルでは、

sysctl net.ipv4.ip_conntrack_max

あなたに戻りますか?この値は、/etc/sysctl.confを介して永続的に上げるか、sysctl -w net.ipv4.ip_conntrack_maxを介して一時的に(次回の再起動まで)上げることができます

3

なぜそれらが異なるのかについての答えが欲しいです。ただし、リバースプロキシについて覚えておくべきことの1つは、接続ごとにconntrackに関して二重の義務を支払うことです。これは、クライアントからリバースプロキシへの接続があり、リバースプロキシからWebサーバーへの接続があるためです。

このため、すでにステートフルファイアウォールが前面にある場合は、リバースプロキシ(またはその片側)で接続追跡をすべてまとめて削除することをお勧めします。

それをすべて落とすことは次のようなものです:

# iptables -L -t raw
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
NOTRACK    tcp  --  anywhere             anywhere            tcp dpt:www 
NOTRACK    tcp  --  anywhere             anywhere            tcp spt:www 

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
NOTRACK    tcp  --  anywhere             anywhere            tcp spt:www 
NOTRACK    tcp  --  anywhere             anywhere            tcp dpt:www

あなたの場合、ループバックを追跡したくないかもしれません-i lo

$ iptables -t raw -A PREROUTING -i lo -j NOTRACK
$ iptables -t raw -A OUTPUT -o lo -j NOTRACK
0
Kyle Brandt

コンテナ(docker)が使用されているときに、このケースに遭遇しました。

それがあなたのケースで役立つかどうかはわかりませんが、ホストOSのnetstat -natはホストのネットワークスタックを対象とした接続のみを表示しますが、conntrack -Lはホストとそのすべての情報を表示しますコンテナ。

netstat -natによって報告された接続に関係するコンテナ内からconntrack -Lを実行すると、そこにリストされている接続情報が表示されます。

0
matschaffer