如何统计Linux上打开的网络连接数
作为系统管理员需要密切监控的系统资源之一是网络连接。为了在服务器上保持足够的网络性能,您需要留意网络连接中的任何异常行为(例如,异常大量的连接请求),并对其采取措施(例如,过滤 DDoS 或端口扫描攻击)。
在本教程中,我将描述如何监控活动网络连接,以及如何计算 Linux 上打开的网络连接数量。
当涉及到监控网络连接时,conntrack-tools
非常有用。 conntrack-tools
是一套用户空间实用程序,允许您查看和管理 Linux 内核跟踪的网络连接状态。要使用conntrack-tools
,需要Linux内核2.6.18
或更高版本。
加载必要的内核模块
要使用 conntrack-tools
监控打开的 IPv4 网络连接,首先请确保系统上加载了名为 nf_conntrack_ipv4
的内核模块。
$ sudo modprobe nf_conntrack_ipv4

如果你想监控IPv6连接,你也可以加载nf_conntrack_ipv6
模块。
$ sudo modprobe nf_conntrack_ipv6
根据您使用的发行版,这些模块可能已经预加载。
在 Linux 上安装 conntrack-tools
验证 nf_conntrack_ipv4
模块已加载后,继续安装 conntrack-tools
以及所有必备软件包,如下所示。
对于 Ubuntu、Debian 或 Linux Mint:
$ sudo apt-get install conntrack conntrackd libnetfilter-conntrack3
CentOS、Fedora 或 RHEL:
$ sudo yum install conntrack-tools libnetfilter_conntrack
使用 conntrack
实用程序监视开放网络连接
conntrack-tools
软件包附带了一个名为 conntrack
的命令行工具。 conntrack
实用程序允许您从命令行搜索、列出、检查网络连接状态。
要打印使用 conntrack
跟踪的所有网络连接,请运行以下命令。
$ sudo conntrack -L

输出将显示不同类型的基于 IPv4 的连接,包括 TCP、UDP 和 ICMP 流量。对于基于 TCP 的网络连接,输出不仅包括当前活动的连接(处于 ESTABLISHED
状态),还包括正在打开的连接(处于 SYN_SENT
或 SYN_RECV
状态)或即将关闭的连接(处于 TIME_WAIT
、CLOSE_WAIT
或 FIN_WAIT
状态)。
要计算当前网络连接的总数,只需运行:
$ sudo conntrack -C
51
如果您想将新创建的网络连接作为实时事件进行监控,请使用以下命令。
$ sudo conntrack -E -e NEW
此命令将仅打印状态为 NEW
的连接。因此,每次建立新的网络连接时,该事件都会实时显示在屏幕上。

您可以在 conntrack
工具的输出中应用各种过滤。
例如,要仅显示打开的 TCP 连接,请运行以下命令。
$ sudo conntrack -L -p tcp --state ESTABLISHED

显示目标端口 500
的 UDP 网络连接:
$ sudo conntrack -L -p udp --dport 500
如果您想实时监控新的 SSH 连接,请运行以下命令。
$ sudo conntrack -E -e NEW -p tcp --dport 22
使用 conntrackd
守护进程监控开放网络连接
另一个用于网络连接监控的工具是conntrackd,它是用于连接跟踪系统的用户空间守护进程。虽然 conntrackd
最初设计用于在高可用性部署中同步多个(例如,活动/备用)防火墙实例之间的内核连接跟踪状态,但它可用于收集和查看网络连接事件(例如,NEW
、UPDATE
、DESTROY
)的统计信息以用于监控目的。
在使用 conntrackd
之前,请确保 /etc/conntrackd/conntrackd.conf
中的 conntrackd
配置在网络接口和 IPv4 地址(如果已指定)方面正确,如下所示。
$ sudo vi /etc/conntrackd/conntrackd.conf
Sync
Multicast {
. . . . .
IPv4_interface 192.168.1.253
Interface eth0
. . . . .
}
如果没有指定,则使用默认配置即可,无需任何修改。
要将 conntrackd 作为守护进程运行:
$ sudo conntrackd -d
一旦conntrackd
守护进程在后台运行,您可以转储该守护进程收集的统计信息,如下所示。
$ sudo conntrackd -s
cache internal:
current active connections: 2
connections created: 4 failed: 0
connections updated: 13 failed: 0
connections destroyed: 2 failed: 0
cache external:
current active connections: 0
connections created: 0 failed: 0
connections updated: 0 failed: 0
connections destroyed: 0 failed: 0
traffic processed:
0 Bytes 0 Pckts
multicast traffic (active device=eth0):
9624 Bytes sent 0 Bytes recv
1138 Pckts sent 0 Pckts recv
0 Error send 0 Error recv
message tracking:
0 Malformed msgs 0 Lost msgs