iptables允许SYN/ACK分组通过,而之前没有接收到SYN分组.这种行为正常吗



在我的场景中,SYN数据包通过带外通道发送到LAN1中的web服务器。web服务器通过配置了iptables防火墙的默认网关进行响应。根据我的理解,防火墙应该阻止Web服务器的SYN/ACK数据包,因为它以前没有看到SYN数据包,但我观察到iptables将数据包转发回LAN2中的客户端。这是SPI防火墙的预期行为吗?我想不是,对吧?

我的iptables规则如下:它被配置为只允许建立连接。

# Completed on Fri Jul 31 15:31:58 2020
# Generated by iptables-save v1.6.1 on Fri Jul 31 15:31:58 2020
*filter
:INPUT DROP [10:4983]`enter code here`
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A FORWARD -s 10.0.0.0/24 -j ACCEPT
-A FORWARD -p icmp -m conntrack --ctstate ESTABLISHED -j ACCEPT
-A FORWARD -p tcp -m tcp -m conntrack --ctstate ESTABLISHED -j ACCEPT
-A FORWARD -p udp -m udp -m conntrack --ctstate ESTABLISH`enter code here`ED -j ACCEPT
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o eth0 -j MASQUERADE
1. SYN (out of band channel)
+------------------------------------------------+
|                                                |
|                                                |
v                 +-----------+                  |
+------+-----+           |           |          +-------+----+
|            | 2. SYN/ACK| iptabeles | SYN/ACK? |            |
| Webserver  +---------->+ Firewall  +--------->+   Client   |
|            |           |           |          |            |
+------------+           +-----------+          +------------+
10.0.0.0/24                                    192.168.10.0/24

我感谢任何帮助!

这是一个很好的问题,它表明您对iptables和TCP有一些了解。但问题是,iptables和netfilter在不同的规则下工作,并且对于拒绝外部连接的请求,它与NAT表绑定。在上面显示的规则中,没有任何NAT表规则,因此它可以毫无障碍地进入客户端。

默认情况下,iptables(又名netfilter(是一个无状态数据包过滤器。这就是为什么如果要启用有状态功能,则会使用--conn--state参数,并且它们必须放在ACL中。另一件需要注意的事情是,默认情况下,iptables不会实现隐式拒绝规则。您必须在每个链的底部添加一个。

在您的情况下,第一个规则-A FORWARD -s 10.0.0.0/24 -j ACCEPT将把从源10.0.0.0/24到任何目的地的所有内容都转发。在这种情况下,后续规则并不重要。

为了让它发挥作用,你应该重新安排第一条规则,并将其放在ACL的最后一条。换句话说,规则在ACL中的位置非常重要。将特定规则放在首位,并以";"一网打尽";规则在最后。在本例中,-A FORWARD -s 10.0.0.0/24 -j ACCEPT是一个包罗万象的规则,必须放在ACL的底部。

最新更新