UFW 在允许的端口上记录块

Mik*_*ike 6 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
Run Code Online (Sandbox Code Playgroud)

因此,从 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 
Run Code Online (Sandbox Code Playgroud)

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

我尝试跑步ufw reload,但没有成功。我也尝试过允许来自任何 IP 地址的 8080,同样的问题。

我什至已经使用 UFW 完全删除apt purge ufw并重新安装并重建了我的规则,但仍然遇到同样的问题。

有任何想法吗?

Mik*_*ike 4

根据上面的 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
Run Code Online (Sandbox Code Playgroud)

提醒自己这条规则是个好主意,因为当你跑步时它不会出现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'
Run Code Online (Sandbox Code Playgroud)

ufw status显示评论:

8443,27117/tcp  ALLOW  10.1.0.0/16  # UniFi ports. Also see manual rule for 8080 in /etc/ufw/before.rules
Run Code Online (Sandbox Code Playgroud)

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