У меня довольно стандартная установка HAProxy / Web Cluster, которая работает отлично - пока я не включаю брандмауэр Shorewall на серверах веб-кластера.
Как только я это сделаю, в системном журнале сервера HAProxy появятся сообщения об ошибках, а веб-сайты, обслуживаемые через HAProxy, вернут 503.
В качестве примера возьмем сервер HAProxy и один из веб-серверов.
Конфигурация HAProxy выглядит так:
global
daemon
maxconn 8192
log 127.0.0.1 local5 info
defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
log global
option httplog
option dontlognull
option http-server-close
option tcplog clf
option httplog clf
stats enable
stats refresh 10s
stats uri /haprsts
listen http-in
bind *:80
mode http
option forwardfor
default_backend www_servers
backend www_servers
balance leastconn
cookie SERVERID insert indirect nocache
server server1 XXX.XXX.XXX.XXX:9009 maxconn 128 check cookie server1
server server2 YYY.YYY.YYY.YYY:9009 maxconn 128 check cookie server2
listen https-in
mode http
bind *:443 ssl crt /etc/haproxy/certs/cert.pem
option forwardfor
reqadd X-Forwarded-Proto:\ https
default_backend www_servers_ssl
backend www_servers_ssl
balance leastconn
cookie SERVERID insert indirect nocache
server server1 XXX.XXX.XXX.XXX:9009 maxconn 128 check inter 3000 fall 2 rise 2 cookie server1
server server2 YYY.YYY.YYY.YYY:9009 maxconn 128 check inter 3000 fall 2 rise 2 cookie server2
XXX.XXX.XXX.XXX и YYY.YYY.YYY.YYY - публичные IP-адреса.
Конфигурации Apache и vhosts на веб-сервере настроены на прослушивание порта 9009 в соответствии с конфигурацией HAProxy. До сих пор все работает нормально.
Теперь я включаю Shorewall Firewall на веб-сервере с файлом правил брандмауэра, который выглядит следующим образом:
# РАЗДЕЛ ВСЕ
# РАЗДЕЛ СОЗДАН
# РАЗДЕЛ, СВЯЗАННЫЙ С
РАЗДЕЛ НОВЫЙ
ПРИНЯТЬ сеть: ZZZ.ZZZ.ZZZ.ZZZ $ FW: XXX.XXX.XXX.XXX TCP 9009
ПРИНЯТЬ сеть: WWW.WWW.WWW.WWW $ FW: XXX.XXX.XXX.XXX TCP 9009
# Отбросьте Ping из "плохой" сетевой зоны .. и предотвратите переполнение вашего журнала ..
Ping (DROP) net $ FW
# Разрешить весь ICMP-трафик ОТ межсетевого экрана В сетевую зону
ПРИНЯТЬ $ FW net icmp
ZZZ.ZZZ.ZZZ.ZZZ - это первичный сервер HAProxy, а WWW.WWW.WWW.WWW - вторичный сервер HAProxy (и сейчас это не имеет отношения к этой проблеме).
И весь веб-трафик умирает, когда на веб-сервере включен брандмауэр.
Сервер HAProxy начинает отправлять такие файлы в системный журнал: Сообщение от syslogd @ localhost 30 сентября, 12:59:38 ... haproxy [14631]: backend www_servers не имеет доступного сервера!
И веб-сервер возвращает 503 ошибки.
В файле правил есть и другие правила, которые, например, разрешают SSH на определенном порту с определенного IP-адреса, и все эти правила работают, поэтому я предполагаю (хотя могу ошибаться) это имеет мало общего с правилами брандмауэра Shorewall. само собой.
Неужели HAProxy нуждается в дополнительных портах, открытых на веб-сервере (это то, что я подозреваю), и если да, то что это за недокументированные порты, или кто-нибудь знает, что здесь может быть не так?
Любая помощь приветствуется.
Ура, / j.
Вероятно, это проверки работоспособности, которые вызывают бан, поскольку они не отправляют имя хоста. Вместо этого вы можете попробовать использовать httpchk или ssl-hello-chk, что может решить проблему и позволить повторно включить fail2ban.