UFW 在允许的端口上记录阻止

UFW 在允许的端口上记录阻止

我的当前情况ufw status如下。UFW 设置为默认拒绝。

[ 1] SSH                        ALLOW IN    10.1.0.0/16               
[ 2] DNS                        ALLOW IN    10.1.0.0/16               
[ 3] DNS                        ALLOW IN    192.168.0.0/16            
[ 4] 1900,3478,10001/udp        ALLOW IN    10.1.0.0/16                # UniFi UDP ports
[ 5] 6789,8080,8443,8843,8880,27117/tcp ALLOW IN    10.1.0.0/16                # UniFi TCP ports
[ 6] 5353/udp                   ALLOW IN    10.1.0.0/16                # Multicast DNS aka Bonjour

因此,从 10.1.0.0/16 块传入到端口 8080 的 TCP 数据包都应该被允许,但在我的 ufw.log 中,我看到以下内容不断重复:

Mar 10 18:28:48 pi-hole kernel: [97820.380848] [UFW BLOCK] IN=eth0 OUT= MAC=b8:27:eb:ef:23:6a:b4:fb:e4:28:d2:48:08:00:45:00:00:34:52:72:40:00:40:06:d1:51 SRC=10.1.1.1 DST=10.1.1.254 LEN=52 TOS=0x00 PREC=0x00 TTL=64 ID=21106 DF PROTO=TCP SPT=36656 DPT=8080 WINDOW=245 RES=0x00 ACK FIN URGP=0 
Mar 10 18:29:10 pi-hole kernel: [97841.880829] [UFW BLOCK] IN=eth0 OUT= MAC=b8:27:eb:ef:23:6a:b4:fb:e4:28:d2:48:08:00:45:00:00:34:55:42:40:00:40:06:ce:81 SRC=10.1.1.1 DST=10.1.1.254 LEN=52 TOS=0x00 PREC=0x00 TTL=64 ID=21826 DF PROTO=TCP SPT=36657 DPT=8080 WINDOW=245 RES=0x00 ACK FIN URGP=0 
Mar 10 18:29:31 pi-hole kernel: [97863.530929] [UFW BLOCK] IN=eth0 OUT= MAC=b8:27:eb:ef:23:6a:b4:fb:e4:28:d2:48:08:00:45:00:00:34:87:7d:40:00:40:06:9c:46 SRC=10.1.1.1 DST=10.1.1.254 LEN=52 TOS=0x00 PREC=0x00 TTL=64 ID=34685 DF PROTO=TCP SPT=36658 DPT=8080 WINDOW=245 RES=0x00 ACK FIN URGP=0 

这意味着它正在阻止来自 10.1.1.1 到端口 8080 的传入 TCP 数据包。

我尝试运行,ufw reload但无济于事。我也尝试过允许任何 IP 地址使用 8080,但问题依然存在。

我甚至完全删除了 UFW apt purge ufw,然后重新安装并重建了我的规则,但仍然出现同样的问题。

有任何想法吗?

答案1

按照https://askubuntu.com/questions/803276/ufw-block-syslog-tcp-ip-is-blocked-and-this-is-allowed-in-ufw-gps-tracking-t 以上,问题在于不同的供应商以不同的方式关闭连接。这导致 UFW 在端口 8080 上接收一些数据包,而这些数据包来自源认为仍处于打开状态的连接,但 UFW 却认为这些数据包已经关闭。为了解决这个问题,我们首先使用以下命令删除 ufw 中的允许端口 8080 规则sudo ufw delete <rule number of 8080 rule>

然后我们告诉 UFW 接受所有 8080 数据包,无论它们是否有效。我们通过编辑 ipv4 的 /etc/ufw/before.rules 和 ipv6 的 /etc/ufw/before6.rules 来实现这一点。在“丢弃无效数据包”部分之前的某个时间。

# quickly process packets for which we already have a connection
-A ufw-before-input -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-output -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-forward -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

#Accept everything from tcp 8080 
#Stops ufw.log filling with 8080 notices despite port 8080 being 'allowed'
-A ufw-before-input -p tcp --dport 8080 -j ACCEPT


# drop INVALID packets (logs these in loglevel medium and higher)
-A ufw-before-input -m conntrack --ctstate INVALID -j ufw-logging-deny
-A ufw-before-input -m conntrack --ctstate INVALID -j DROP

提醒自己这条规则是个好主意,因为运行 时它不会出现ufw status。我有一条规则为同一服务(unifi 控制器)打开一些其他端口,因此我使用添加了一条注释

ufw allow from x.x.x.x to any proto tcp port 8443,27117 comment 'UniFi ports. Also see manual rule for 8080 in /etc/ufw/before.rules'

ufw status显示评论:

8443,27117/tcp  ALLOW  10.1.0.0/16  # UniFi ports. Also see manual rule for 8080 in /etc/ufw/before.rules

我的实例中没有使用 ipv6,所以我无法测试它,但您可以编辑 before6.rules 并在那里添加适当的规则。

相关内容