UFW阻止端口80,当它不应该

我在UFW(默认拒绝)有这些规则:

80 ALLOW 10.0.0.0/8 443 ALLOW 10.0.0.0/8 80 DENY Anywhere 443 DENY Anywhere 

我从10.0.0.0/8上的机器连接到在端口80上监听的Apache。我们注意到在另一台机器上运行的nginx(这台apache机器前面的负载均衡器)偶尔会抛出“连接超时”错误。 我可以通过在一个bash脚本中运行一个for循环来重新创build超时,该脚本从该nginx机器命中端口80。 在1000次testing中,我可能会有3或4次超时。

在/ var / log / messages中,当超时发生时,我会看到这些信息:

Dec 1 01:01:01 webserver.mydomain.com kernel:[UFW BLOCK] IN = eth0 OUT = MAC = 00:11:22:33:44:55:66:77:88:99:aa:bb:cc :dd SRC = 10.0.0.5 DST = 10.0.0.2 LEN = 60 TOS = 0x00 PREC = 0x00 TTL = 64 ID = 16923 DF PROTO = TCP SPT = 60064 DPT = 80 WINDOW = 5792 RES = 0x00 SYN URGP = 0

为什么UFW会阻止这些? 如果我禁用UFW这些连接超时消失完全和一切按预期工作。 其他端口(如22)没有这个问题,我可以运行脚本,即使ufw激活,没有任何问题,无休止地锤击。

我花了大量的时间来解决这个问题。 UFW的参与是真正问题的症状,而不是原因。 我find了一个解决scheme,所以我不想离开这个问题没有答案。

我发现,由于一个原因,我还不能解释syncookies在负载均衡器后面的apache服务器上被禁用:

 # sysctl -a | grep syncookies net.ipv4.tcp_syncookies = 0 

我无法解释这个的原因是它在默认的Centos6 /etc/sysctl.conf文件中设置为1。 对于我来说,这是一个单独的问题。

您可以在这里阅读更多关于syn cookies的信息:

http://en.wikipedia.org/wiki/SYN_cookies

这些是相对繁忙的处理大量连接的服务器。 我最好的猜测是,启用UFW(并因此启用iptables)放慢了事情正好足够的同步队列填满和没有同步连接开始被拒绝。