思科自适应安全设备丢弃未设置SYN标志的数据包

我们有一个坐在我们的DMZ内的apache实例,它被configuration为将请求代理到我们networking内部的一个NATed tomcat实例。 它工作正常,但然后突然从Apache请求的Tomcat实例停止通过在Apache日志中的以下内容:

[错误](70007)指定的超时已过期:ajp_ilink_receive()无法接收标题

调查思科日志查看器显示以下内容:

错误消息: %ASA-6-106015:拒绝来自IP_地址/端口的TCP(无连接)到IP_地址/端口在接口interface_name上标记tcp_flags。 说明自适应安全设备放弃了自适应安全设备连接表中没有关联连接的TCP数据包。 自适应安全设备在数据包中查找SYN标志,这表示build立新连接的请求。 如果SYN标志未设置,并且没有现有的连接,则自适应安全设备会丢弃该数据包。

build议的操作除非自适应安全设备收到大量的这些无效的TCP数据包,否则不需要。 如果是这种情况,请将数据包跟踪到源,并确定这些数据包发送的原因。

所有机器都使用VMware进行虚拟化,默认情况下,机器一直使用Intel E1000模拟NIC。 我们的networkingpipe理员已经改变了这个VMXNET3驱动程序,试图纠正这个问题,我们只能等待,看看问题是否持续,因为这是一个间歇性的问题。

还有别的可能导致这个问题吗? 这不是我们遇到类似问题的第一个服务。

我们的apache主机运行Ubuntu 11.10,内核版本为3.0.0-17-server。 我们在运行内核2.6.18-308.16.1.el5的RHEL5(5.8)上也有这个问题,这台机器也有E1000网卡。

注意 :我不是networkingpipe理员,是负责这些系统的软件架构师和分析程序员。

问题被发现是一段时间后,ASAclosures持续连接,当它closures连接时,它也被configuration为在再次进行呼叫时不发送RST消息。

要理解为什么这会导致一个问题,我可以在这里说明。

  1. Apache创build成功的第一个连接。
  2. 延迟超过ASA复位时间后,ASAclosures连接。
  3. 发出请求,Apache尝试发送它认为是开放的连接,超时后超时 – 默认300秒
  4. Apache向客户端发送错误

如果有一些池连接仍然打开,这里的问题会被放大。 例如,如果Apache以5个池连接开始,并且在上面closures的连接之后,在客户端获得成功的请求之前,它仍然会出现另外4次这种行为。

有几种方法可以解决这个问题。

  1. 允许ASA向其信任的客户端发送RST消息。
  2. 设置mod_proxy:ProxyPass - keepalive的configurationmod_proxy:ProxyPass - keepaliveOn
  3. mod_proxy:ProxyPass - ttl的configuration设置为低于防火墙重置时间的值。

不要尝试configurationmod_proxy:ProxyPass - timeoutmod_proxy:ProxyPass - connectiontimeout太低,就像在tomcat实例中存在任何长时间运行的操作一样,例如任何Web服务或ReST端点,那么它们可能会开始失败比这个时间长。

我们的解决scheme是做前两个选项。