儘管規則明確允許,但無法從公共網路訪問 UFW 埠
我有兩個專用伺服器:“web”(YYY.YYY.YYY.YYY)和“monitor”(XXX.XXX.XXX.XXX)。兩者都在一個大眾主機(hetzner)的同一個網路中。
現在在“網路”上,我執行了 3 個普羅米修斯指標端點:裸機主機上的 docker-engine (9323) 和 neo4j (2004)、telegraf (9273) 作為 docker 容器。兩個 docker 容器都將其輸出埠正確映射到主機,因此在“web”上執行的以下呼叫有效:
lynx http://YYY.YYY.YYY.YYY:9323/metrics => OK lynx http://YYY.YYY.YYY.YYY:9273/metrics => OK lynx http://YYY.YYY.YYY.YYY:2004/metrics => OK
但是從“監視器”伺服器呼叫這些端點僅適用於熊金屬服務 docker-engine (9323)
lynx http://YYY.YYY.YYY.YYY:9323/metrics => OK lynx http://YYY.YYY.YYY.YYY:9273/metrics => timeout lynx http://YYY.YYY.YYY.YYY:2004/metrics => timeout
UFW 狀態詳細資訊提供以下內容
Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), deny (routed) New profiles: skip To Action From -- ------ ---- [...] 9323/tcp ALLOW IN XXX.XXX.XXX.XXX 9273/tcp ALLOW IN XXX.XXX.XXX.XXX 2004/tcp ALLOW IN XXX.XXX.XXX.XXX [...]
這些 IP 沒有其他規則,也沒有適用於子網、介面等的一般規則。所有其他規則都適用於離散埠,例如 22、80、443 等。
奇怪的是,它在幾個小時前就起作用了。與此同時,我在這裡對此進行了一些試驗https://medium.com/@pitapun_44686/what-is-the-best-practice-of-docker-ufw-under-ubuntu-69e11c826b31並將以下塊附加到/etc/ufw/after.rules 的最後
*filter :ufw-user-forward - [0:0] :DOCKER-USER - [0:0] -A DOCKER-USER -j RETURN -s 10.0.0.0/8 -A DOCKER-USER -j RETURN -s 172.16.0.0/12 -A DOCKER-USER -j RETURN -s 192.168.0.0/16 -A DOCKER-USER -j ufw-user-forward -A DOCKER-USER -j DROP -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 192.168.0.0/16 -A DOCKER-USER -j DROP -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 10.0.0.0/8 -A DOCKER-USER -j DROP -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 172.16.0.0/12 -A DOCKER-USER -j DROP -p udp -m udp --dport 0:32767 -d 192.168.0.0/16 -A DOCKER-USER -j DROP -p udp -m udp --dport 0:32767 -d 10.0.0.0/8 -A DOCKER-USER -j DROP -p udp -m udp --dport 0:32767 -d 172.16.0.0/12 -A DOCKER-USER -j RETURN COMMIT
現在我將其註釋掉並重新啟動了ufw。那些埠 9273 和 2004 仍然無法訪問,所以這不是原因。
我將 ufw 日誌級別配置為高,但我看不到任何連接 attepmtps 或從主機 XXX.XXX.XXX.XXX 丟棄的數據包。
嘗試 telnet 進入一個工作埠(telnet YYY.YYY.YYY.YYY 9323)我可以在 ufw 日誌中看到通信,但對於其他兩個埠則看不到。
[UFW AUDIT] SRC=XXX.XXX.XXX.XXX DST=YYY.YYY.YYY.YYY DPT=9323 => [UFW AUDIT] SRC=YYY.YYY.YYY.YYY DST=XXX.XXX.XXX.XXX SPT=9323
我使用 ansible “ufw” 模組配置了 ufw。
還有什麼其他原因?到底是怎麼回事?:-)
由於“可疑”活動(頻繁通信),主機網路是否會在這些伺服器之間施加某種過濾器?也發生了,我今天在 YYY.YYY.YYY.YYY 上從 XXX.XXX.XXX.XXX 到埠 80/443 執行了一些過多的 artillery.io 測試,但是這個假設並不能解釋為什麼只有這兩個埠不起作用了。
最終測試,在 YYY.YYY.YYY.YYY 上關閉 ufw 也沒有幫助。埠 9273 和 2004 不可訪問,9323 可訪問。
這是
iptables -L -v -n
https://pastebin.com/HWeJGXb9的輸出
由於 Docker 暴露了 9273 和 2004 埠,因此到這些埠的數據包先通過
FORWARD
鏈,然後再通過DOCKER-USER
鏈。您添加的規則DOCKER-USER
阻止了大部分到 docker 容器網路的外部流量。您需要允許轉發流量,ufw route allow
或者您可以直接將規則添加到DOCKER-USER
鏈中。