在/ 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有其他几个模块可以利用这个信息:例如,如果你想禁止一些IP地址,如果它在一段时间内使X新的连接。
另一方面, 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
希望我有一个答案,为什么他们不同。 然而,要记住一个反向代理服务器的一件事情就是,您将为每个连接支付双重责任。 这是因为您有从客户端到反向代理的连接,然后从反向代理到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)被使用时,我们偶然发现了这种情况。
不知道它是否有助于你的情况,但它看起来像主机操作系统上的netstat -nat将只显示连接主机的networking堆栈,而conntrack -L将显示主机及其所有容器的信息。
如果从conntrack -L报告的连接所涉及的容器中运行netstat -nat ,则应该看到列出的连接信息。