無法在 ufw 上不允許 8443 的情況下將埠 443 轉發到 8443
我通過 iptables 和 ufw 配置了埠轉發。但是有些東西我不明白,我只是不能讓 iptables 將埠 443 轉發到 8443 ,而不允許UFW 上的埠 8443。
我希望埠 443 轉發到埠 8443,但我也希望埠 8443 從我的網路外部被禁止。
在簡歷中,如果我完全允許 UFW 上的 443 和 8443 埠,我只能將埠 443 轉發到 8443。
這是我在 before.rules 中的唯一規則:
-A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8443
這是我的 iptables 路由配置(非常簡單):
pkts bytes target prot opt in out source destination 0 0 REDIRECT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 redir ports 8443
這是我的 UFW 狀態有效:
To Action From -- ------ ---- 22 ALLOW Anywhere 443 ALLOW Anywhere 8443 ALLOW Anywhere // THIS IS WHAT BOTHERS ME 22 ALLOW Anywhere (v6) 443 ALLOW Anywhere (v6) 8443 ALLOW Anywhere (v6) // THIS IS WHAT BOTHERS ME
這就是我想要我的防火牆保護但不起作用的方式:
To Action From -- ------ ---- 22 ALLOW Anywhere 443 ALLOW Anywhere 22 ALLOW Anywhere (v6) 443 ALLOW Anywhere (v6)
有任何想法嗎?提前致謝。
這裡的解決方案對我來說應該是轉發埠的預設方式,我真的不明白為什麼大多數人使用 iptables。
(1):如果您已經使用 iptables/ufw 或任何其他工具配置了埠轉發,請刪除規則。就我而言,來自 /etc/ufw/before.rules
(2):禁止您為了轉發而必須公開的埠。在我的情況下是 8443。
(3):我必須在 Ubuntu 12.04 中安裝 xinetd
#apt-get install xinetd
(4):創建將轉發埠的新服務:
vi /etc/xinetd.d/tomcat-https 有這個內容:
service tomcat-https { disable = no flags = REUSE wait = no user = root socket_type = stream protocol = tcp port = 443 redirect = localhost 8443 log_on_success -= PID HOST DURATION EXIT #per_source = UNLIMITED #instances = UNLIMITED }
(5):將服務添加到/etc/services
vi /etc/services
這一行:
https 443/tcp # http protocol over TLS/SSL
應該是這樣的:
https 443/tcp tomcat-https # http protocol over TLS/SSL
最後我不得不完全重啟。您可以嘗試重新啟動 ufw、networking 和 xinetd。
除了使用 PREROUTING 來重定向數據包,您可以使用
rinetd
. 這個程序監聽給定的埠,當有人連接到它時,rinetd 連接到給定的目標埠,基本上代理了兩者之間的流量。通過 rinetd 偵聽埠 443 並將連接轉發到埠 8443,您可以允許來自 localhost 的 8443 上的連接並阻止所有其他連接。