Http
使用 iptables 將埠從 80 重定向到 8080 不起作用
美好的一天,我在 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
提前謝謝了。沃傑科技
表中的
INPUT
鏈filter
不應該是 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
類似的東西。