Skip to content


Как добавить в haproxy HTTP-авторизацию

haproxy - high availability proxyHAProxy – это просто отличный load-balancer. Широко применяется для работы с HTTP-трафиком в высоконагруженных проектах. Очень гибко конфигурируется и очень шустро работает. С его помощью HTTP-трафик можно маршрутизировать и балансировать как угодно, реализуя даже самые причудливые фантазии.

Далее речь пойдёт о том, как ограничить доступ к сайту, который обслуживается haproxy. Может пригодится для всяких тестовых сред, где нежелательно, чтобы поисковые системы индексировали версию сайта, которая находится в разработке и не готова еще к production-применению. А также просто для сокрытия контента от всяких любопытных глаз.

  1. В секцию "global" добавляем список пользователей:

    global
      userlist L1
        user user1 insecure-password plain-text-pass1
        user user2 insecure-password plain-text-pass2
  2. В секцию "frontend" добавляем списки контроля доступа и правила фильтрации запросов:

    frontend main *:80
      acl auth_ok http_auth(L1)
      acl ipwhitelist src 10.10.1.1 10.10.2.1
      http-request allow if ipwhitelist
      http-request allow if auth_ok
      http-request auth unless ipwhitelist
      http-request deny
    

    Здесь во 2-ой строке определяем ACL (access control list) с именем auth_ok, который срабатывает в случае успешной авторизации кого-либо из пользователей из определенного ранее списка с именем L1. В 3-ей строке определяем ACL с именем ipwhitelist, куда заносим IP-адреса компьютеров, при запросах с которых запрос на авторизацию выдаваться не будет. В 4-ый строке собственно безусловно разрешаем доступ компьютреам из "белого списка". В 5-ой строке разрешаем доступ только успешно авторизованным пользователям (процессинг правил дойдёт до этого места только в случае, если не сработало предыдущее правило в строке 4, так как опции http-request обрабатываются до первого срабатывания, в squid-е тоже так, кстати). В 6-ой строке говорим выдавать запрос на авторизацию для тех клиентов, кто не входит в "белый список" и кто еще не прошёл HTTP-авторизацию. 7-ая строка требует возвращать HTTP-статус 403 (Forbidden) для тех, кто не прошёл авторизацию и не входит в "белый список".

На данный момент (версия 1.5) поддерживается только basic-авторизация.

Posted in *nix.

Tagged with .


One Response

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. Петровский says

    Спасибо, весьма пригодилось. Только у меня еще стояла задача по user-agent-у пришельцев фильтровать. Получилось вот так:

    acl auth_ok http_auth(L1)
    acl ipwhitelist src 10.20.20.20 127.0.0.1
    acl facebook_ua hdr_sub(user-agent) -i facebookexternalhit
    http-request allow if ipwhitelist
    http-request allow if facebook_ua
    http-request allow if auth_ok
    http-request auth unless ipwhitelist
    http-request deny

You must be logged in to post a comment.