我正在尝试在 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 监听。