为什么 /proc/sys/net/netfilter/nf_conntrack_count 出现在 Ubuntu 22 中?

为什么 /proc/sys/net/netfilter/nf_conntrack_count 出现在 Ubuntu 22 中?

在旧版本的 Ubuntu 中,我使用 /proc/sys/net/netfilter/nf_conntrack_count 来查看有多少个连接处于活动状态。我这样做是因为我注意到,如果流量很大,连接过多,它们就会被丢弃。这也会干扰本地网络上的流量。在 Ubuntu 22 中,此值始终为 0。它是否已移至其他地方,还是我需要配置某些内容以便再次监控它?

答案1

为了定义文件位置,您需要nf_conntrack加载模块,但默认情况下不会加载模块。

doug@s19:~$ lsmod | grep conn
doug@s19:~$ cat /proc/sys/net/netfilter/nf_conntrack_count
cat: /proc/sys/net/netfilter/nf_conntrack_count: No such file or directory

可以强制加载模块:

doug@s19:~$ sudo modprobe nf_conntrack
[sudo] password for doug:
doug@s19:~$ lsmod | grep conn
nf_conntrack          196608  0
nf_defrag_ipv6         24576  1 nf_conntrack
nf_defrag_ipv4         12288  1 nf_conntrack
libcrc32c              12288  4 nf_conntrack,btrfs,nf_tables,raid456
doug@s19:~$ cat /proc/sys/net/netfilter/nf_conntrack_count
0

但是没有任何东西使用它,所以正如您所发现的,计数始终为 0。但是,如果加载具有一些连接跟踪规则的 iptables(或 nftables)规则集,则使用计数:

doug@s19:~/iptables/misc$ lsmod | grep conn
xt_conntrack           12288  6
nf_conntrack          196608  1 xt_conntrack
nf_defrag_ipv6         24576  1 nf_conntrack
nf_defrag_ipv4         12288  1 nf_conntrack
x_tables               65536  5 xt_conntrack,nft_compat,xt_LOG,xt_tcpudp,ip_tables
libcrc32c              12288  4 nf_conntrack,btrfs,nf_tables,raid456
doug@s19:~/iptables/misc$ cat /proc/sys/net/netfilter/nf_conntrack_count
2
doug@s19:~/iptables/misc$

以下是我用于上述非 0 计数的简单 iptables 规则集示例。我的测试服务器仅是本地的,因此连接数较低。在我的面向外部的服务器上,我通常有 100 个处于各种状态的连接。

doug@s19:~/iptables/misc$ cat test_firewall_min
#!/bin/sh
#
# test_firewall_min 2021.10.04 Ver:0.01
#       update interface name for s19.
#
# test_firewall 2018.08.13 Ver:0.01
#       Minimum version of most basic iptables firewall.
#
# test_firewall 2018.08.09 Ver:0.01
#       Most basic iptables firewall.
#       Currently for this question:
#       https://askubuntu.com/questions/1059781/ufw-allows-22-for-ipv4-and-ipv6-but-ssh-disconnects-when-enabling
#

#sleep 50

# The location of the iptables program
#
IPTABLES=/sbin/iptables

#Set some stuff
#
EXTIF="br0"
UNIVERSE="0.0.0.0/0"

#Clearing any previous configuration
#
#echo "  Clearing any existing rules and setting default policies.."
$IPTABLES -P INPUT DROP
$IPTABLES -F INPUT

# loopback interfaces are valid.
#
$IPTABLES -A INPUT -i lo -s $UNIVERSE -d $UNIVERSE -j ACCEPT

$IPTABLES -A INPUT -i $EXTIF -p tcp -m conntrack --ctstate INVALID -j LOG --log-prefix "IINVALID:" --log-level info
$IPTABLES -A INPUT -i $EXTIF -p tcp -m conntrack --ctstate INVALID -j DROP
$IPTABLES -A INPUT -p tcp ! --syn -m conntrack --ctstate NEW -j LOG --log-prefix "NEW TCP no SYN:" --log-level info
$IPTABLES -A INPUT -p tcp ! --syn -m conntrack --ctstate NEW -j DROP
$IPTABLES -A INPUT -i $EXTIF -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -i $EXTIF -p tcp -m conntrack --ctstate NEW --dport 22 -j ACCEPT

echo "test_firewall_min $FWVER done..." >> /dev/kmsg

通过 ssh 登录几次之后,我得到了这个:

doug@s19:~/iptables/misc$ sudo conntrack -L
tcp      6 299 ESTABLISHED src=192.168.111.136 dst=192.168.111.122 sport=22 dport=56246 src=192.168.111.122 dst=192.168.111.136 sport=56246 dport=22 [ASSURED] mark=0 use=1
tcp      6 431975 ESTABLISHED src=192.168.111.122 dst=192.168.111.136 sport=50470 dport=22 src=192.168.111.136 dst=192.168.111.122 sport=22 dport=50470 [ASSURED] mark=0 use=1
tcp      6 431942 ESTABLISHED src=192.168.111.122 dst=192.168.111.136 sport=50456 dport=22 src=192.168.111.136 dst=192.168.111.122 sport=22 dport=50456 [ASSURED] mark=0 use=1
conntrack v1.4.5 (conntrack-tools): 3 flow entries have been shown.

相关内容