Linux

如何使用 iptables 將埠 80 和 443 重定向到 8080 和 8443?

  • March 22, 2013

我正在查看名為 DSpace 的 Tomcat 6 webapp 的文件,特別是關於在標準埠上執行 Running DSpace(http:// 為 80,https:// 為 443)

我正在嘗試使用“方法 1”,它使用 iptables 將流量從埠 80 和 443 重定向到 8080 和 8443,以擺脫:8080url 中的。

這些是文件給出的命令:

/sbin/iptables -t nat -I PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-ports 8080
/sbin/iptables -t nat -A OUTPUT -p tcp -d _[server_ip_address|server_ip_address]_ --dport 80 -j  REDIRECT --to-port 8080
/sbin/iptables -t nat -I PREROUTING -p tcp --destination-port 443 -j REDIRECT --to-ports 8443

我認為第二行需要更改一些內容,特別是該部分-d _[server_ip_address|server_ip_address]_- 但我不確定是什麼。我已經閱讀了該man頁面,iptables但沒有任何運氣。

我嘗試更改-d _[server_ip_address|server_ip_address]_為:

-d _[127.0.0.1|127.0.0.1]_ 

並且:

-d _[54.224.121.116|54.224.121.116]_

並且:

-d _[ec2-54-224-112-116.compute-1.amazonaws.com|ec2-54-224-112-116.compute-1.amazonaws.com]_

我得到的錯誤Bad argument 'REDIRECT'包括

host/network '_127.0.0.1' not found

誰能幫我找出我做錯了什麼?

更新:我認為重定向將在沒有第二行的情況下工作,但我仍然不確定它的預期目的是什麼……

我認為您只是對該頁面上損壞的標點符號感到困惑。_和是一些標記的[殘餘,它們不是iptables語法的一部分。此外,|字元不能用於分隔 IP,您需要使用,(逗號)。

/sbin/iptables -t nat -A OUTPUT -p tcp -d 54.224.121.116,54.224.121.116 --dport 80 -j  REDIRECT --to-port 8080

fwiw 我實際上會考慮在正常 Apache 上使用 mod_proxy_ajp。聽起來您試圖讓人們不必在 URL 中的伺服器名稱末尾鍵入/查看 :8080 和 :8443 。mod_proxy_ajp 通常對於您嘗試做的事情更容易,如果您決定稍後提高賭注並進行一些負載平衡,那麼如果您已經在 mod_proxy_ajp 設置中,這樣做是微不足道的。這是我的一台生產伺服器上的設置:

<Proxy *>
   AddDefaultCharset off
   Order deny,allow
   Allow from all
</Proxy>

ProxyPass         /   ajp://fqdn.for.server:8009/
ProxyPassReverse  /   ajp://fqdn.for.server:8009/

您可以將 ProxyPass 放在 VirtualHost 配置中,之後它幾乎就像配置任何其他主機一樣(這意味著您可以在埠 443 上配置 SSL,在埠 80 上配置明文)。對整個交易進行更大的討論

Apache+mod_proxy 不是做到這一點的唯一方法,但它是我最有經驗的一種方法,而且它似乎比你嘗試做的方法要少(使用防火牆進行埠轉發)。

引用自:https://unix.stackexchange.com/questions/68714