IPTables 和端口重定向 Apache2

IPTables 和端口重定向 Apache2

我正在使用 Apache 将子域重定向到端口(mod_proxy、、 )并mod_proxy_http使用mod_proxy_ajpIP 表来限制除我和本地服务器之外的直接端口访问。

我的 IP 表如下所示:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
DROP       tcp  -- !c-24-7-110-109.hsd1.ca.comcast.net  anywhere             tcp dpt:tproxy
ACCEPT     tcp  --  localhost            anywhere             tcp dpt:tproxy
DROP       tcp  -- !c-24-7-110-109.hsd1.ca.comcast.net  anywhere             tcp dpt:http-alt
DROP       tcp  -- !c-24-7-110-109.hsd1.ca.comcast.net  anywhere             tcp dpt:webmin
ACCEPT     tcp  --  localhost            anywhere             tcp dpt:webmin

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

我将在这篇文章中使用的上下文是:

Sonatype Nexus:nexus.example.com => example.com:8081

詹金斯持续集成:jenkins.example.com => example.com:8080

Webmin的:webmin.example.com => example.com:10000

我现在的工作是除了我之外没有其他直接端口访问。我还希望本地系统能够访问端口,我相信我现在拥有的就是这样的。我将其用于mod_proxy_ajpJenkins CI 和 Webmin 以及mod_proxy_httpSonatype Nexus。

当我访问直接端口时,这些服务都能正常加载。当我要求其他人加载每个服务时,他们却无法加载,所以这很正常。

但是,现在,当尝试访问其中一个子域时,我会得到永无止境的负载(无限循环?)

但是,当我在子域上运行 tracert 时,它可以正常结束,所以我可以消除无限循环。

这是我的 Sonatype Nexus apache 虚拟主机配置:

<VirtualHost *:80>
        ServerName nexus.majornoob.com
        ServerAlias www.nexus.majornoob.com
        ProxyRequests Off
        ProxyPreserveHost On
        ProxyPass / http://localhost:8081/
        ProxyPassReverse / http://localhost:8081/
        ProxyPassReverseCookiePath / /
        ErrorLog /var/www/majornoob/error-nexus.log
        LogLevel warn
        CustomLog /var/www/majornoob/access-nexus.log combined
</VirtualHost>

这是我的詹金斯:

<VirtualHost *:80>
        ServerName jenkins.majornoob.com
        ServerAlias www.jenkins.majornoob.com
        ProxyRequests Off
        ProxyPreserveHost On
        ProxyPass / ajp://127.0.0.1:8080/
        ProxyPassReverse / ajp://127.0.0.1:8080/
        ProxyPassReverseCookiePath / /

        ErrorLog /var/www/majornoob/error-jenkins.log

        LogLevel warn

        CustomLog /var/www/majornoob/access-jenkins.log combined
</VirtualHost>

这两个虚拟主机的例子分别使用mod_proxy_ajpmod_proxy_http

有人能帮助我弄清楚为什么我会得到无限负载吗?

谢谢。

编辑:别在意无限循环。过了一段时间,我收到了 503 服务不可用错误。

答案1

iptables 规则按打印的顺序从上到下进行评估。您遇到的问题是代理连接来自 localhost,它符合以下规则:

DROP       tcp  -- !c-24-7-110-109.hsd1.ca.comcast.net  anywhere             tcp dpt:tproxy

localhost不是c-24-7-...,所以连接被丢弃。代理模块最终会超时;如果规则是 REJECT 而不是 DROP,您会更快收到错误(因为您会被明确拒绝,而不是连接尝试就此消失)。

解决方案非常简单:重新排序规则,将“接受来自本地主机”放在“拒绝来自其他任何地方”之前。(IP 路由按最具体的方式匹配,但由于 iptables 是多因素的,因此不一定定义)。

我通常建议制定第一条规则,允许所有本地主机通信(通过环回接口,以防有人通过以太网尝试一些奇怪的事情);尝试添加

iptables -I INPUT -i lo -s localhost -d localhost -j ACCEPT

-I其插入()在列表顶部。

相关内容