У меня есть сервер Apache за сервером HAProxy. Ранее сегодня сервер стал недоступен, и 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 ]
Конфигурация iptables (удалены правила 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 отправляет ICMP-пакеты на ваш сервер Web1, что вы и видите в журнале.
Странно то, что тип ... HAProxy отправляет вашему веб-серверу пакеты ICMP типа 3 / кода 3, которые являются ответом, в котором говорится, что порт недоступен. Это ответ от более раннего пакета, отправленного с вашего веб-сервера (порт 80) на сервер HAProxy (порт Dyn 43176). Похоже, что произошло то, что HAProxy завершил сеанс и закрыл динамический порт до того, как Apache решил, что разговор окончен.
Причина, по которой произошло это, я не знаю. Может быть, взглянуть на таймауты?