通过 iptables 过滤的 Apache2 网页

通过 iptables 过滤的 Apache2 网页

情况:我有一个配置为路由器和防火墙(iptables)的 Ubuntu 18.04 盒子,有两个分支,还有一个运行 Apache2(出于兼容性原因)的 Ubuntu 14.04。

问题:下面两行令我头疼的规则:

-A FORWARD -s 10.1.5.0/24 -d 10.1.2.10/32 -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.1.2.10/32 -d 10.1.5.0/24 -m multiport --sports 80,443 -m conntrack --ctstate ESTABLISHED -j ACCEPT

当 iptables 规则被刷新时,我可以正常访问 Web 服务器,但是,只需应用如下所示的简单规则:

-A FORWARD -s 10.1.5.0/24 -d 10.1.2.10/32 -j ACCEPT
-A FORWARD -s 10.1.2.10/32 -d 10.1.5.0/24 -j ACCEPT

导致我的 Web 服务器停止响应。Tcpdump 表明已联系 Web 服务器,并且可能已完成 TCP 握手,但 Web 服务器未回复网页。

10.1.2.10 是我的 Web 服务器,而 10.1.5.0/24 是一个包含“用户”机器的子网。

问题:我的 iptables 有问题吗?或者可能是 Apache 配置错误?

更新:以下规则使 Web 服务器正确响应(我仍然不明白为什么)。如果我尝试应用任何其他过滤器(例如按端口、目标或进行限制)ctstate,Web 服务器就会停止转发。tcpdump输出表明存在与之前相同的问题 - TCP 握手可能已完成,但没有转发任何网页。

-A FORWARD -s 10.1.2.10/32 -p tcp -j ACCEPT
-A FORWARD -s 10.1.5.0/24 -d 10.1.2.10/32 -j ACCEPT

答案1

您的简单规则中有拼写错误。应该这样:

-A FORWARD -s 10.1.5.0/24 -d 10.1.2.10/32 -j ACCEPT
-A FORWARD -d 10.1.2.10/32 -s 10.1.5.0/24 -j ACCEPT

他们应该读:

-A FORWARD -s 10.1.5.0/24 -d 10.1.2.10/32 -j ACCEPT
-A FORWARD -s 10.1.2.10/32 -d 10.1.5.0/24 -j ACCEPT

您的第一次尝试产生了两个相同的规则,其中第二条规则永远不会被满足。

相关内容