В организации, основой информационной системы которой является сеть, построенная на серверах Windows c Active Directory, для решения типовой задачи по обеспечению выхода в интернет, можно использовать вариант, многократно опробованный на Linux - это прокси-сервер Squid. Для запуска в Windows используется его сборка SquidNt. Для кого-то немаловажным будет то, что Squid распространяется под лицензией GNU General Public License, то есть бесплатно. Возможности настройки Squid достаточно широки и позволяют обеспечить доступ практически ко всем http-ресурсам сети интернет, с фильтрацией (блокированием баннеров), ограничением доступа, ограничения трафика пользователя или компьютера и т.д. Процесс установки самой программы несложен, поэтому пропущу его и сразу перейду к основной теме заметки.
Задача: обеспечить выход в интернет через прокси-сервер 2 группам пользователей Active Directory. Первая группа имеет неограниченный доступ. Вторая группа имеет доступ только к сайтам из списка для ограниченного доступа. На всех компьютерах установлена операционная система Windows, основным браузером является Internet Explorer. Дополнительно иногда используются Firefox и Opera. Доступ должен предоставляться только с тех компьютеров, которые добавлены список разрешённых для доступа в интернет.
Для решения будут использоваться возможности Squid по использованию различных схем авторизации пользователей. Поскольку основным браузером является Internet Explorer, то вполне естественно использовать его возможности и возможности Squid по NTLM-авторизации. При этом пользователь, у которого настроен доступ в интернет даже не будет задумываться о том, что нужно ввести пароль, так как в этом случае авторизация проходит скрыто от него. Однако не все браузеры (Opera) и программы поддерживают NTLM, поэтому для них дополнительно придётся использовать Basic-авторизацию, при этом пользователь будет видеть приглашение для ввода логина и пароля.
В Active Directory создаются 2 группы пользователей: "Пользователи Интернет" и "Пользователи Интернет Ограниченного списка сайтов". Важным является пред-Windows 2000 имя группы, так как именно оно используется в схеме авторизации NTLM. Оно должно быть алфавитно-цифровым на латинице, для нашей конфигурации соответственно: InternetUsers и InternetUsersRestrict.
Далее приведу кусочек файла squid.conf:
# Установка аутентификации с использованием программы NTLM-авторизации. auth_param ntlm program c:/squid/libexec/mswin_ntlm_auth.exe -v auth_param ntlm children 25 # Установка аутентификации с использованием программы простой авторизации. auth_param basic program c:/squid/libexec/mswin_auth.exe auth_param basic children 5 # Установка приглашения для ввода логина и пароля для Basic-авторизации auth_param basic realm Access to Internet # Установка дополнительных параметров авторизации auth_param basic credentialsttl 2 hours authenticate_cache_garbage_interval 1 hour authenticate_ttl 1 hour authenticate_ip_ttl 0 seconds # Установка проверки членства пользователя в группе external_acl_type NT_global_group children=25 negative_ttl=0 %LOGIN c:/squid/libexec/mswin_check_lm_group.exe -G -d -c # Установка правил (списков контроля доступа) для групп пользователей acl ProxyUsers external NT_global_group InternetUsers acl ProxyUsersRestrict external NT_global_group InternetUsersRestrict acl password proxy_auth REQUIRED # Установка стандартных правил для портов acl all src 0.0.0.0/0.0.0.0 acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl to_localhost dst 127.0.0.0/8 acl Safe_ports port 21 # ftp acl Safe_ports port 70 # gopher acl Safe_ports port 80 # http acl Safe_ports port 210 # wais acl Safe_ports port 280 # http-mgmt acl Safe_ports port 443 # https acl Safe_ports port 488 # gss-http acl Safe_ports port 563 # snews acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl Safe_ports port 1863 # msn acl Safe_ports port 2042 # mail.ru agent acl Safe_ports port 5222 # jabber acl Safe_ports port 5223 # jabber SSL acl Safe_ports port 1025-65535 # unregistered ports acl SSL_ports port 443 563 1863 2083 5222 8443 # Устанавливаем правило для метода connect acl CONNECT method CONNECT # IP-адреса компьютеров, с которых доступ осуществляется без авторизации (текстовый файл "C:/squid/etc/acls/allow.noauth.ip.acl" с IP-адресами) acl Advanced_Computers src "C:/squid/etc/acls/allow.noauth.ip.acl" # IP-адреса компьютеров, для которых требуется авторизация пользователей (текстовый файл "C:/squid/etc/acls/allow.clients.ip.acl" с IP-адресами) acl Clients_Ip src "C:/squid/etc/acls/allow.clients.ip.acl" # Правило, которое описывает адреса ограниченного списка сайтов (текстовый файл "C:/squid/etc/acls/allow.restrictedaccess.sites.acl" с регулярными выражениями) acl Common_Resources url_regex "C:/squid/etc/acls/allow.restrictedaccess.sites.acl" # Правило, которое описывает, что с ограниченного списка сайтов можно переходить по ссылкам (лучше не использовать) acl ref_commonresources referer_regex -i regexp "C:/squid/etc/acls/allow.restrictedaccess.sites.acl" # Секция, где определяется доступ # Запрет на использование не разрешённых явно портов http_access deny !Safe_ports # Запрет на использование метода CONNECT для портов не указанных в списке SSL_ports http_access deny CONNECT !SSL_ports # Без запроса пароля предоставляется доступ компьютерам по правилу Advanced_Computers http_access allow Advanced_Computers # Запросить пароль. Если пользователь попадает в список контроля доступа ProxyUsersRestrict и сайт - в Common_Resources, то дать доступ. http_access allow password ProxyUsersRestrict Common_Resources Clients_Ip # Запросить пароль. Если пользователь попадает в список контроля доступа ProxyUsersRestrict и произошёл переход по ссылке с сайта ref_commonresources, то дать доступ http_access allow password ProxyUsersRestrict ref_commonresources Clients_Ip # Запросить пароль. Если пользователь попадает в список контроля доступа ProxyUsers, то дать доступ. http_access allow password ProxyUsers Clients_Ip # Запретить все явно не разрешённые запросы http_access deny all
Файл "C:/squid/etc/acls/allow.restrictedaccess.sites.acl" содержит список разрешённых сайтов, по регулярному выражению в каждой строке сайта:
^http\:\/\/(.*\.)*gov\.ru.* ^http\:\/\/(.*\.)*www\.ru.*
Файлы "C:/squid/etc/acls/allow.clients.ip.acl" и "C:/squid/etc/acls/allow.noauth.ip.acl" содержат IP-адреса, например:
10.100.10.111/32 10.100.0.0/24
Дополнительно для удобства у меня сделан командный файл, который содержит команду с помощью которой можно проверить членство в группе
@echo - @echo Использовать строку запроса типа: @echo +----------------------------------------------------+ @echo : domain\user InternetUsers : @echo : Результат: OK-прошёл ERR - не прошёл проверку : @echo +----------------------------------------------------+ @rem @c:\squid\libexec\win32_check_group.exe -G -c -d @c:\squid\libexec\mswin_check_ad_group.exe -G -c -d
Также сделан файл для внесения изменений в работающую конфигурацию после редактирования файла squid.conf.
@time /t @C:\squid\sbin\squid.exe -k reconfigure -n squidnt @time /t
Дополнительно о программах, используемых при организации аутентификации и авторизации.
mswin_ntlm_auth.exe - натуральный Windows-аутентификатор NTLM/NTLMv2 для Squid с поддержкой NTLM NEGOTIATE.
Использование:
mswin_ntlm_auth [-d] [-v] [-A|D LocalUserGroup] [-h]
Пользователи, которым разрешён доступ к прокси-серверу должны иметь права "Доступ к компьютеру из сети" (Определяется в групповой политике безопасности). Кроме основных функций аутентификатор может проверять членство в локальной группе, указанной в строке его запуска, то есть авторизовывать пользователей. Локальная группа должна быть создана на компьютере, на котором установлен SquidNt.
mswin_check_lm_group.exe - это обработчик схемы внешнего определения списков контроля доступа для Squid.
Использование:
mswin_check_lm_group [-D domain][-G][-c][-d][-h]
Этот обработчик должен использоваться со схемой аутентификации (Basic, NTLM или Negotiate) работающей с пользователями Windows Active Directory.
Обработчик читает из стандартного ввода доменное имя пользователя, по нему получает список групп из Active Directory и сравнивает их с указанной в описании правила.
Группы с пробелами в имени должны быть заключены в кавычки, например, "Domain Users", и помещены в отдельный файл, который вызывается из правила, например:
acl ProxyUsers external NT_global_group "c:/squid/etc/DomainUsers"
А файл "c:/squid/etc/DomainUsers" имеет только одну строку:
"Domain Users"
Стандартное сравнение имён групп чуствительно к регистру букв, поэтому нужно либо соблюдать регистр, либо указать ключ -c, который, однако, не работает с именами групп, написанных на языке, отличном от английского.
Используемые аутентификаторы NTLM и Basic должны запускаться без ключей -A и -D.
Ссылки по теме:
не знаю было тут или нет, ибо до конца не дочитал!
думаю полезно будет всем...
разобрался почему сквид не авторизует (или криво и не правильно что равно) через группу в АД. целую неделю мучился и догнал как сделать!
обнаружил, что когда запускаю через командную строку (соответственно под своими правами на сервере) работает правильно, а по сервисом когда запускаю - нет (потому что у сервиса права Локальной CИСТЕМЫ)
! Squid 2.7.STABLE8 подымался НЕ на КОНТРОЛЛЕРе ДОМЕНА !
и я решил проблему так:
в оснастке АД "Пользователи и Компьютеры"
создал учетку для сквида SQUIDService
и добавил ее в группу BUILTIN\Администраторы
и на самом сервере добавил в группу Администраторы
после создания кэша (squid -z) и регистрации как сервиса (squid -i)
настроил запуск сервиса от имени DOMAIN\SQUIDService
(которая получается Локальный Админ и Админ на Контроллерах Домена)
вот мой конфиг:
auth_param ntlm program c:/SQUID/libexec/mswin_ntlm_auth.exe -v -d
auth_param ntlm children 30
#
external_acl_type NT_global_group children=30 %LOGIN c:/SQUID/libexec/mswin_check_lm_group.exe -G -d
acl IoP external NT_global_group InternetOverProxy
acl Worktime time MTWHFA 08:00-19:00
acl all src all
#
http_access deny !Worktime
http_access allow IoP
http_access deny all
#
cache_mem 3 GB
maximum_object_size_in_memory 1 GB
cache_replacement_policy lru
memory_replacement_policy lru
minimum_object_size 0 KB
maximum_object_size 100 GB
cache_swap_low 0
cache_swap_high 100
#
cache_access_log c:/squid/var/logs/access.log squid
cache_log c:/squid/var/logs/cache.log
cache_store_log c:/squid/var/logs/store.log
pid_filename c:/squid/var/logs/pid.log
unlinkd_program c:/squid/libexec/unlinkd.exe
#
cache_mgr it@mubis.local
visible_hostname MUBIS
httpd_suppress_version_string on
http_port 192.168.0.4:3128
icp_port 0
htcp_port 0
coredump_dir c:/squid/var/cache
error_directory c:/squid/share/errors/Russian-1251
Да, по умолчанию, служба работает от LocalSystem. Для того, чтобы она читала параметры учётных записей в домене, в том числе и членство в группах, нужно чтобы она запускалась от имени пользователя, обладающего правами доступа к ним. Два варианта - либо создаётся пользователь с необходимыми правами, настраивается запуск от его имени, либо права даются существующей в домене учётной записи компьютера, на котором установлен SquidNT.
Здравствуйте. Пол инета облазил, пока нашел эту статью. Кругом описание ntlm-авторизации squid'а только для Линукса описывается, а мне нужно для squidnt, потому как у меня не получается выполнить действия инструкции типа "Поднимаем suid, LAMP, SAMS прикручиваем то, это и юзаем свою бесплатную проксю". Я просто недогоняю, как из консоли "поднять" что-то и вообще я виндузятник! У меня получилось настроить сквид на win2k, прописал проксю в браузерах клиентских машин и вуаля, все вроде бы заработало, но вот как рулить инетом через группы AD я так и не могу разобраться. Надеюсь на помощь автора.
Сделал все по инструкции, и теперь у меня прокся вообще не хочет работать.
Николай, высылайте конфиг Squidа на aradm@aradm.ru, посмотрю в чём дело.
у вас браузеры запрашивают авторизацию?
я ваши настройки попробовал - просят.... (( как обойти это?
Поднял на Контроллере Домена. На нем все работает, а на других ПК, которые в домене, запрашивает пароль. Служба запускается от пользователя, состоящего в группе Администраторы Домена. На других ПК проверяю тоже под этим пользователем.
Need Help!