我的当前情况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
并重新安装并重建了我的规则,但仍然遇到同样的问题。
有任何想法吗?
根据上面的 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 并在其中添加适当的规则。