如何使用 iptables 将端口 80 和 443 重定向到 8080 和 8443?

如何使用 iptables 将端口 80 和 443 重定向到 8080 和 8443?

我正在查看名为 DSpace 的 Tomcat 6 Web 应用程序的文档,特别是关于运行在标准端口上运行 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

谁能帮我发现我做错了什么?

更新:我认为重定向无需第二行即可工作,但我仍然不确定其预期目的是什么......

答案1

我认为您只是对该页面上损坏的标点符号感到困惑。和_[某些标记的残余,它们不是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

答案2

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 不是执行此操作的唯一方法,但它是我最有经验的方法,并且看起来它比您尝试执行的方法(使用防火墙进行端口转发)要少一些工作。

答案3

据我了解,第二条规则指定了如果您尝试从服务器向外到达您的服务器(因此-d)重定向808080.这是必需的,因为本地生成的包不由PREROUTING(来自http://www.docum.org/docum.org/kptd/和“更新”)

注意:我通常使用海岸墙作为防火墙,所以不要认为我的答案是无懈可击的或彩虹风味的。

相关内容