пользовательская серверная маршрутизация на основе haproxy - PullRequest
0 голосов
/ 02 ноября 2019

Я новичок в haproxy, но он мне уже очень нравится. Прямо сейчас у меня есть особый вариант использования, для которого я пока не смог найти хороший способ.

ВОПРОС: Можно ли маршрутизировать на бэкэнд-сервер на основе аутентифицированного пользователя?

Что-то вроде ...

userlist EXAMPLEORG
 user bob password bob123
 user alice password alice987

frontend https
 bind *:443
 mode tcp
 ...
 use_backend a-servers if { CURRENT_USER bob }
 use_backend b-servers if { CURRENT_USER alice }

Но какой будет правильный синтаксис FETCH для (псевдокода) CURRENT_USER?

Фон (= это мои ограничениядля работы с): - Есть несколько прокси-серверов верхнего уровня (squid) - Есть несколько пользователей (~ 50) - Каждому пользователю назначен прокси (т. е. «Джо Доу» должен использовать «upstream-squid-5») -Но назначение может измениться в любое время и - локальная конфигурация прокси (Windows через групповую политику, IOS через профиль) не может быть изменена (достаточно быстро)

(эти пункты выше у меня в руках, и мы неих не нужно обсуждать;))

Первая попытка была предпринята с помощью файла автоматической настройки прокси (PAC), который можно было изменить на сервере и автоматически опрашивать клиенты. (таким образом, только файл pac должен был бы быть развернут один раз на пользователя) НО: на некоторых устройствах это заняло слишком много времени, поэтому это было отклонено как ненадежное

Мои исследования привели меня к СЧАСТЛИВОМ. Моя идея состоит в том, чтобы использовать встроенную функциональность карты для маршрутизации к правому бэкэнду. Но я не могу найти подходящий источник получения, чтобы различать источники запросов. Я знаю, что можно настроить userlist / auth.

Как я уже сказал, я новичок в этом и не смог найти ничего для пользовательской маршрутизации.

Любая помощь или указание в нужном направленииРуководство будет высоко оценено.

Кроме того, если вы знаете гораздо лучшее решение проблемы, я был бы очень признателен.

Спасибо!

1 Ответ

0 голосов
/ 03 ноября 2019

Я думаю, что проще поместить пользователя с одним и тем же бэкэндом в группу, а затем написать для него ACL.

Я создал 3 примера группы пользователей, необязательно, а затем назначьте пользователя группе. Легко, правда? Во внешнем интерфейсе мы должны сначала проверить всех пользователей, являются ли они действительными (авторизованными) пользователями. Затем мы создаем каждый ACL для каждой группы пользователей, а затем направляем их на правильный бэкэнд.

Это не проверено, но я уверен, что оно будет работать и будет работать с функцией отображения HAProxy.

userlist user
  group ube_1
  group ube_2
  group ube_3

  user bob password ... groups ube_1
  user alice password ... groups ube_2

frontend
  ...
  acl is_authed_user http_auth_group(user)
  http-request auth realm httpauth unless is_authed_user

  acl is_be_1 http_auth_group(user) ube_1
  acl is_be_2 http_auth_group(user) ube_2

  use-backend be_1 if is_be_1
  use-backend be_2 if is_be_2
...