UFW 不应该阻塞端口 80

gtu*_*uhl 3 ufw

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

80                         ALLOW       10.0.0.0/8
443                        ALLOW       10.0.0.0/8
80                         DENY        Anywhere
443                        DENY        Anywhere
Run Code Online (Sandbox Code Playgroud)

我正在从 10.0.0.0/8 上的一台机器连接到侦听端口 80 的 Apache。我们注意到在另一台机器上运行的 nginx(这台 apache 机器前面的负载平衡器)偶尔会抛出“连接超时”错误。我可以通过简单地在 bash 脚本中运行 for 循环来重新创建超时,该脚本从那台 nginx 机器访问端口 80。在 1000 次测试中,我可能会遇到 3 或 4 次超时。

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

12 月 1 日 01:01:01 webserver.mydomain.com 内核:[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 激活也没有任何问题。

gtu*_*uhl 5

我花了大量时间试图解决这个问题。UFW 的参与是真正问题的征兆,而不是原因。我找到了一个解决方案,所以我不想让这个问题悬而未决。

我发现出于某种原因,我还无法解释在负载均衡器后面的 apache 服务器上禁用了 Syncookies:

# sysctl -a | grep syncookies
net.ipv4.tcp_syncookies = 0
Run Code Online (Sandbox Code Playgroud)

我无法解释的原因是它在默认的 Centos6 /etc/sysctl.conf 文件中设置为 1。这是我要弄清楚的一个单独问题。

您可以在此处阅读有关 Syn cookie 的更多信息:

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

这些是处理大量连接的相对繁忙的服务器。我最好的猜测是,启用 UFW(并因此启用 iptables)会减慢速度,足以让 Syn 队列填满,并且连接上的 syncookies 开始被拒绝。