Инструменты пользователя

Инструменты сайта


squid_ad

Интеграция Squid с Active Directory (NTLM)

Введение

Задача: аунтифицировать пользователей на проксе-сервере с помощью уже имеющихся учетных данных в каталоге AD, более того, клиентов с ОС Windows, которые уже авторизованы в домене избавить от необходимости вводить логин и пароль в браузере.

Имеем: домен под управлением Windows Server 2012, прокси-сервер Debian 7, Squid 3.1

Вообще для решения подобной задачи существует как минимум два метода: NTLM и kerberos. В первом случае понадобится дополнительная прослойка в виде winbind, во втором случае этого не потребуется. Также в инетернетах можно встретить негативные высказывания в отношении варианта с winbind, вроде бы не очень быстрый вариант при больших нагрузках. НО лично я использую winbind в связке с samba на высоконагруженных файловых серверах уже более пяти лет, например есть сервера с несколькими 10Гбит интерфейсами и сотнями одновременно подключенных клиентов, которые активно грузят сервер, никаких проблем со стороны winbind я никогда не имел. В варианте с winbind(NTLM) привлекает предельно простая настройка, когда как в варианте с kerberos с бубном предстоит поплясать не мало, поэтому я остановлюсь на NTLM.

Настройка

1. Подключаем прокси-сервер к домену Active Directory, как это сделать описано тут, после настройки и тестирования samba можно остановить, если не используется, понадобится только winbind.

2. Ставим на прокси-сервере необходимое ПО:

# apt-get install squid3

3. Тестируем различные варианты авторизации:

# wbinfo -a user%password
plaintext password authentication succeeded
challenge/response password authentication succeeded

# ntlm_auth --helper-protocol=squid-2.5-basic
user password
OK

# ntlm_auth --username=user --nt-response
password:
NT_STATUS_OK: Success (0x0)

Если все ОК, значит система может авторизоваться в домене.

4. Добавляем пользователя proxy в группу winbindd_priv для того чтобы у него был доступ в /run/samba/winbindd_privileged, иначе NTLM работать не будет, только basic:

# usermod -a -G winbindd_priv proxy

5. Правим конфиг прокси /etc/squid3/squid.conf (минимальный набор):

http_port 192.168.0.1:3128
cache_access_log /var/log/squid3/access.log

acl localhost src 127.0.0.1/32

acl god_mode src 10.0.0.0/16

acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http

# NTLM
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 5

acl AuthorizedUsers proxy_auth REQUIRED

http_access allow localhost
http_access deny !Safe_ports
http_access allow all AuthorizedUsers
http_access deny all

icp_access deny all
cache_mgr admin@domain.ru
visible_hostname PROXY

Перезапускаем прокси и пытаемся подключиться с клиента, если клиент в домене, то все должно работать без запроса пароля, если нет логин нужно вводить в таком формате: DOMAIN\user. Если нужно чтобы в интернет могли выходить пользователи только определенной группы, создаем такую группу на DC, выясняем ее GID(есть множество способов как это сделать, сам GID выглядит примерно так S-1-5-21-1421388833-3017584253-2885461630-8798) и немного редактируем конфиг прокси:

...
# NTLM
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp --require-membership-of=S-1-5-21-1421388833-3017584253-2885461630-8798
...

Также, если есть клиенты, которые не поддерживают NTLM аунтификацию, можно добавить basic(прокси будет пытаться использовать методы аунтификации в порядке указанном в фонфиге):

auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 5
auth_param basic realm Corp Web Proxy
auth_param basic credentialsttl 2 hours

Все.

Ссылки

squid_ad.txt · Последнее изменение: 2022/03/25 17:00 (внешнее изменение)