Http

使用 iptables 將埠從 80 重定向到 8080 不起作用

  • October 17, 2012

美好的一天,我在 CentOS 伺服器的 80 埠上執行了一個 Tomcat,IP 為 10.33.46.68。當我試圖在我的筆記本上打開“ http://10.33.46.68 ”時,我可以看到 Tomcat 歡迎頁面。然後我將 Tomcat 埠更改為 8080,並使用 iptables 將埠 80 上的 HTTP 流量重定向到埠 8080:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-ports 8080

現在,當我嘗試在筆記本上打開“ http://10.33.46.68 ”時,我遇到了超時。但是當我嘗試直接在伺服器上打開“ http://10.33.46.68 ”或“ http://10.33.46.68:8080 ”時,兩個 URL 都可以正常工作。請問我錯過了什麼?

筆記型電腦和伺服器之間有一個 Cisco 防火牆,它只允許在埠 80 上進行通信。這是我的 iptables 配置文件:

# Generated by iptables-save v1.4.7 on Wed Oct 17 14:51:20 2012
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [1027:228609]
-A INPUT -i lo -j ACCEPT 
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -m state --state INVALID -j DROP 
-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -j ACCEPT 
-A INPUT -j DROP 
COMMIT
# Completed on Wed Oct 17 14:51:20 2012
# Generated by iptables-save v1.4.7 on Wed Oct 17 14:51:20 2012
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [4:274]
:OUTPUT ACCEPT [2:154]
-A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080 
-A OUTPUT -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080 
COMMIT
# Completed on Wed Oct 17 14:51:20 2012

提前謝謝了。沃傑科技

表中的INPUTfilter不應該是 DROP。(好吧,至少不是完全不接受埠!)

至少接受埠 tcp/8080 以使其工作。

數據包首先遍歷 mangle-,然後是預路由,然後是過濾表。您的 mangle 表是空的,您在預路由中重定向,但是當數據包進入 INPUT/過濾器時,它會被丟棄。

一個簡單的iptables -t filter -A INPUT -p tcp --dport 8080 -j ACCEPT就足夠了。

編輯:在過濾器的輸入鏈中接受 localhost 也應該在那裡,只是為了不使事情複雜化。儘管您應該考慮實施更複雜的規則,例如:

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT # don't you want ssh?
iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
iptables -A INPUT -j REJECT --reject-with icmp-port-unreachable

類似的東西。

引用自:https://serverfault.com/questions/439464