/ 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
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
を介して一時的に(次回の再起動まで)上げることができます
なぜそれらが異なるのかについての答えが欲しいです。ただし、リバースプロキシについて覚えておくべきことの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
コンテナ(docker)が使用されているときに、このケースに遭遇しました。
それがあなたのケースで役立つかどうかはわかりませんが、ホストOSのnetstat -nat
はホストのネットワークスタックを対象とした接続のみを表示しますが、conntrack -L
はホストとそのすべての情報を表示しますコンテナ。
netstat -nat
によって報告された接続に関係するコンテナ内からconntrack -L
を実行すると、そこにリストされている接続情報が表示されます。