在旧版本的 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.