Мой нынешний 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
Таким образом, все входящие TCP-пакеты на порт 8080 из блока 10.1.0.0/16 должны быть разрешены, но в моем 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
подразумевая, что он блокирует входящие TCP-пакеты от 10.1.1.1, идущие на порт 8080.
Я пробовал бежать ufw reload
но безрезультатно. Я также попытался разрешить 8080 с любого IP-адреса, та же проблема.
Я даже полностью удалил 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, хотя и был закрыт. Чтобы обойти это, мы сначала удалим правило разрешения порта 8080 в ufw, используя sudo ufw delete <rule number of 8080 rule>
Затем мы говорим UFW принимать все 8080 пакетов независимо от того, действительны они или нет. Мы делаем это, редактируя /etc/ufw/before.rules для ipv4 и /etc/ufw/before6.rules для ipv6. Незадолго до раздела 'drop INVALID packets'.
# 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 и добавить туда соответствующее правило.