为什么iptables突然阻止HAProxy

我有一个HAProxy服务器后面的Apache服务器。 今天早些时候,服务器变得不可用,HAProxy在前端抛出了503错误。 调查后,它看起来像iptables开始阻止来自HAProxy的请求,并重新启动Apache解决了这个问题。 我需要帮助弄清楚为什么iptables会随机地开始拒绝这些请求,所以我可以防止它在将来发生。

HAProxy = 10.xxx.xxx.26
Web1 = 10.xxx.xxx.229

iptables日志条目:

May 16 22:12:27 web1 kernel: [339449.200414] iptables denied: IN=eth1 OUT= MAC=40:40:e9:0d:29:96:40:40:25:5e:3d:74:08:00 SRC=10.xxx.xxx.26 DST=10.xxx.xxx.229 LEN=80 TOS=0x00 PREC=0xC0 TTL=64 ID=9773 PROTO=ICMP TYPE=3 CODE=3 [SRC=10.xxx.xxx.229 DST=10.xxx.xxx.26 LEN=52 TOS=0x00 PREC=0x00 TTL=64 ID=15095 DF PROTO=TCP SPT=80 DPT=43176 WINDOW=55 RES=0x00 ACK FIN URGP=0 ] 

iptablesconfiguration(删除nagios / ssh规则的可读性):

 Web1:/var/log# cat /etc/iptables.test.rules *filter :INPUT ACCEPT [5620:459239] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [4375:4238642] -A INPUT -i lo -j ACCEPT -A INPUT -d 127.0.0.0/8 -i ! lo -j REJECT --reject-with icmp-port-unreachable -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -i eth1 -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -i eth1 -p tcp -m tcp --dport 443 -j ACCEPT -A INPUT -i lo -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -i lo -p tcp -m tcp --dport 443 -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7 -A INPUT -j REJECT --reject-with icmp-port-unreachable -A FORWARD -j REJECT --reject-with icmp-port-unreachable -A OUTPUT -j ACCEPT COMMIT 

这条线是你日志条目的罪魁祸首:

 -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7 

但真正多汁的东西是在输出。 HAProxy正在向您的Web1服务器发送ICMP数据包,这是您在日志中看到的内容。

奇怪的是types… HAProxy发送您的Web服务器ICMPtypes3 /代码3数据包,这是一个响应,指出一个端口不可访问。 这是从Web服务器(端口80)到HAProxy服务器(Dyn端口43176)的早期数据包的响应。 似乎发生的事情是,HAProxy结束了一个会议,并closures了dynamic端口之前,Apache认为谈话结束。

上面发生的原因,我不知道。 看看超时也许吧?