RHEL 6 将端口 80 转发到端口 8080 时出现问题

RHEL 6 将端口 80 转发到端口 8080 时出现问题

我正在尝试在 RHEL 版本上设置 JBoss 应用服务器。Jboss 已绑定到 127.0.0.1:8080,我正在尝试设置 iptables 以将所有流量从端口 80 重定向到端口 8080。这是我的配置文件:

:预路由接受 [0:0]
:后路由接受 [0:0]
:输出接受 [0:0]

-A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 127.0.0.1:8080
-A PREROUTING -i eth0 -p tcp -m tcp --dport 443 -j DNAT --to-destination 127.0.0.1:8443
-A 输出 -p tcp --dport 80 -j DNAT --到目的地 127.0.0.1:8080
犯罪

*筛选
:输入接受 [0:0]
:转发接受 [0:0]
:输出接受 [0:0]
-A 输入 -m 状态 --状态 ESTABLISHED,RELATED -j 接受
-A 输入-p icmp -j 接受
-A 输入-i lo -j 接受
-A 输入 -m 状态 --状态新 -m tcp -p tcp --dport 22 -j 接受
-A 输入-p tcp --dport 80-j 接受
-A 输入-p tcp --dport 443 -j 接受
-A 转发 -i eth0 -m 状态 --状态 新 -m tcp -p tcp -d 127.0.0.1 --dport 8080 -j 接受
-A 输入 -j 拒绝 --拒绝 icmp 主机禁止
-A 转发 -j 拒绝 --拒绝与 icmp 主机禁止
犯罪

但无论如何,iptables -L -v -n 的输出显示所有流量都被拒绝。如果我关闭 iptables,它就可以工作,但我想使用它。谢谢。

这是输出:

链输入(策略接受 0 个数据包,0 字节)
 pkts 字节数 目标 协议 选择加入 退出 源 目标
  165 10948 接受全部 -- * * 0.0.0.0/0 0.0.0.0/0 状态相关,已建立
    0 0 接受 icmp -- * * 0.0.0.0/0 0.0.0.0/0
    0 0 接受全部 -- lo * 0.0.0.0/0 0.0.0.0/0
    0 0 接受 tcp -- * * 0.0.0.0/0 0.0.0.0/0 状态 新 tcp dpt:22
   12 576 接受 tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
    0 0 接受 tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
 3237 405K 全部拒绝 -- * * 0.0.0.0/0 0.0.0.0/0 拒绝-使用 icmp-host-prohibited

链转发(策略接受 0 个数据包,0 字节)
 pkts 字节数 目标 协议 选择加入 退出 源 目标
    0 0 接受 tcp -- eth0 * 0.0.0.0/0 127.0.0.1 状态新 tcp dpt:8080
    0 0 拒绝全部 -- * * 0.0.0.0/0 0.0.0.0/0 拒绝-带有 icmp-host-prohibited

链输出(策略接受 146 个数据包,19249 字节)
 pkts 字节数 目标 协议 选择加入 退出 源 目标

答案1

我想说这是错误的方法。无论如何,除了测试目的之外,我不希望 JBoss(或 tomcat)管理直接连接。它不是为直接管理外部连接而设计的。

选项1 将 apache web 服务器代理设置为 127.0.0.1:8080

你需要在 Apache 设置中的某个地方使用它

LoadModule proxy_module  {path-to-modules}/mod_proxy.so
AddModule  mod_proxy.c

或者使用 apache2

$ sudo a2enmod proxy
$ sudo apache2ctl restart

在虚拟主机中你可以有多个应用程序

ProxyPass         /myapp  http://localhost:8080/myapp
ProxyPassReverse  /myapp  http://localhost:8080/myapp

或者有一个独特的

ProxyPass         /  http://localhost:8080/
ProxyPassReverse  /  http://localhost:8080/

更改虚拟主机设置后,无需重新启动 apache

$ sudo apache2ctl graceful

将更新设置而不会断开正在进行的连接。

选项 2,使用 mod_ajp

$ sudo a2enmod proxy_ajp
$ sudo apache2ctl restart

将其添加到您的虚拟主机

ProxyPass /app ajp://backend.example.com:8009/app

假设 tomcat 实例配置为在端口 8009 上有 ajp 连接器。检查 tomcat 设置。

http://httpd.apache.org/docs/2.2/mod/mod_proxy_ajp.html

选项 3,使用 mod_jk http://tomcat.apache.org/connectors-doc/

您仍会遇到另一个问题,即配置 JBoss 以创建指向 :80 的链接,这将是 JBoss 设置问题... 不记得它设置在哪里了,我只记得我花了一段时间才找到。到目前为止,我更喜欢使用 ajp 连接器。

抱歉,我现在无权访问 JBoss 设置,也许有人可以告诉我们该设置在哪里。

答案2

如果您不想或不能使用反向代理在端口 80 上公开 JBoss,那么使用 JBoss 端口转发的可能配置是:

/sbin/iptables -t nat -A OUTPUT     --destination localhost   -p tcp --dport 80 -j REDIRECT --to-ports 8080
/sbin/iptables -t nat -A OUTPUT     --destination <network IP address> -p tcp --dport 80 -j REDIRECT --to-ports 8080
/sbin/iptables -t nat -A PREROUTING --destination <network IP address> -p tcp --dport 80 -j REDIRECT --to-ports 8080

/sbin/iptables -t nat -A OUTPUT     --destination localhost   -p tcp --dport 443 -j REDIRECT --to-ports 8443
/sbin/iptables -t nat -A OUTPUT     --destination <network IP address> -p tcp --dport 443 -j REDIRECT --to-ports 8443
/sbin/iptables -t nat -A PREROUTING --destination <network IP address> -p tcp --dport 443 -j REDIRECT --to-ports 8443

/sbin/iptables --flush PREROUTING -t nat
/sbin/iptables --flush OUTPUT -t nat

您也可以直接在端口 80 上执行 JBoss 监听。

看:在端口 80 或 443 上运行 JBoss或者在 jboss AS 7.1 中将监听端口设置为 80

相关内容