我们的许多 http 服务器都存在连接停滞问题。作为测试,我创建了一个脚本,使用 curl 连接到 Web 服务器并尝试下载一个大约 3mb 大小的 txt 文件。
时不时地,速度就会降到 0,并且连接就会挂起。
当我禁用 iptables 时问题解决并且一切正常运行。
iptables -vL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
28 2080 ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED
0 0 ACCEPT icmp -- any any anywhere anywhere
0 0 ACCEPT all -- lo any anywhere anywhere
0 0 ACCEPT tcp -- any any anywhere anywhere state NEW tcp dpt:ssh
0 0 ACCEPT tcp -- any any anywhere anywhere state NEW tcp dpt:http
17 1924 REJECT all -- any any anywhere anywhere reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 REJECT all -- any any anywhere anywhere reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT 15 packets, 1564 bytes)
pkts bytes target prot opt in out source destination
中间有几个路由器和防火墙。
知道这可能导致什么吗?
嗯。我用的是 Centos 6.3 Kernel 2.6.32-279.19.1.el6.x86_64 Iptables 版本是:iptables-1.4.7-5.1.el6_2.x86_64
留言
IPTables-Dropped: IN=eth1 OUT= MAC=00:50:56:a6:00:9e:00:16:9c:ff:20:00:08:00 SRC=xxx DST=xxx LEN=80 TOS=0x00 PREC=0x00 TTL=62 ID=55755 DF PROTO=TCP SPT=34787 DPT=80 WINDOW=1539 RES=0x00 ACK URGP=0
答案1
最有可能的是,你快用完了连接跟踪条目。提高net.nf_conntrack_max
。如果这是由于攻击造成的,你可能需要将其提高很多并降低一些设置,例如net.netfilter.nf_conntrack_tcp_timeout_syn_recv
。
您可以重写规则而不使用连接跟踪 - 您似乎不需要它。但这可能会降低您将来的灵活性。