Рейтинг:1

HAProxy не работает с SNI и ACL

флаг gb

Я пытаюсь заставить haproxy использовать ACL с SNI, но он не сотрудничает. Он представляет правильный сертификат, поэтому SNI должен работать. Однако я не могу заставить его выбирать серверную часть на основе имени хоста в SNI.

Что я проверяю конфигурацию, я получаю следующее

[ПРЕДУПРЕЖДЕНИЕ] (21486): прокси-сервер 'fe-dr-totalflood.com': образцы выборки L6 игнорируются на прокси-серверах HTTP (объявлено в ./haproxy.cfg.tmp:176).
[ПРЕДУПРЕЖДЕНИЕ] (21486): прокси-сервер 'fe-dr-totalflood.com': образцы выборки L6 игнорируются на прокси-серверах HTTP (объявлено в ./haproxy.cfg.tmp:177).
Предупреждения были найдены.
Файл конфигурации действителен

Я понятия не имею, что означают сообщения об ошибках, и я поставил примечание рядом с соответствующими строками в следующем фрагменте.

интерфейс fe-dr-totalflood.com
  режим http
  привязать 172.22.8.229:80
  привязать 172.22.8.229:443 ssl crt dr-www.totalflood.com.crt crt dr-xml.totalflood.com.crt

  ## http->https редирект
  схема перенаправления http-запроса https, если только { ssl_fc }

  ## списки контроля доступа
  акл https ssl_fc
  acl letsencrypt-acl path_beg /.well-known/acme-challenge/
  acl www-acl req_ssl_sni dr-www.totalflood.com
  acl xml-acl req_ssl_sni dr-xml.totalflood.com

  # если Let's Encrypt, пропустить остаток и перейти к серверной части
  use_backend be-letsencrypt, если letsencrypt-acl

  use_backend be-dr-www.totalflood.com, если www-acl <------ 176
  use_backend be-dr-xml.totalflood.com, если xml-acl <------ 177

  default_backend быть-нет-такой-сайт

#---------------------------------------------
серверная часть be-dr-www.totalflood.com
  режим http
  круговой баланс
  cookie SERVERID вставить непрямой nocache maxidle 30m

  ## установить имя хоста в шапке
  acl h_host_exists req.hdr(Host) -m найдено
  Хост http-запроса del-header, если h_host_exists
  http-запрос set-header Хост www.totalflood.com

  проверка сервера по умолчанию maxconn 100

  сервер scadmzp2wb01 scadmzp2wb01.lereta.net:80 cookie scadmzp2wb01

#---------------------------------------------
серверная часть be-dr-xml.totalflood.com
  режим http
  круговой баланс
  cookie SERVERID вставить непрямой nocache maxidle 30m

  ## установить имя хоста в шапке
  acl h_host_exists req.hdr(Host) -m найдено
  Хост http-запроса del-header, если h_host_exists
  http-запрос set-header Хост xml.totalflood.com

  проверка сервера по умолчанию maxconn 100

  сервер scadmzxml01 scadmzxml01.lereta.net:80 cookie scadmzxml01

#---------------------------------------------
бэкэнд be-letsencrypt
  сервер локальный 127.0.0.1:8888

#---------------------------------------------
бэкэнд быть-нет-такой-сайт
  сервер локальный 127.0.0.1:8888

Когда я пытаюсь получить доступ к любому сайту, я всегда попадаю в бэкенд по умолчанию, несмотря ни на что. Я проверил это, изменив бэкэнд по умолчанию, чтобы перейти в другие места. Если я добавьте к любому URL-адресу путь /.well-known/acme-challenge, haproxy, кажется, отправляет меня в нужное место.

Чего я не могу понять, так это почему не работают списки управления доступом, основанные на информации SNI.

Я использую версию 2.4.2 haproxy OracleLinux 8.

$ хапрокси -v
HAProxy версии 2.4.2-553dee3 2021/07/07 - https://haproxy.org/
Статус: ветка с долгосрочной поддержкой — исправления перестанут получать примерно во втором квартале 2026 года.
Известные ошибки: http://www.haproxy.org/bugs/bugs-2.4.2.html
Работает на: Linux 5.4.17-2136.304.4.1.el8uek.x86_64 #2 SMP Вт, 8 февраля 11:54:24 PST 2022 x86_64
Рейтинг:1
флаг gu

Цитата из документов:

Извлечение сэмплов из содержимого буфера немного отличается от предыдущего. выборка выборки выше, потому что выборочные данные являются эфемерными. Эти данные могут использоваться только тогда, когда они доступны, и будут потеряны при пересылке. По этой причине образцы, извлеченные из содержимого буфера во время запроса, не могут использоваться в ответе, например. Даже когда данные извлекаются, они может измениться.

Вот почему вы получаете предупреждение об игнорировании ACL уровня 6.

Вместо того, чтобы использовать req_ssl_sni, тебе лучше использовать ssl_fc_sni на уровне 5, который даст вам ту же информацию, но более надежно.

scarville avatar
флаг gb
Это сработало. Спасибо.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.