tm

   В этой статье расскажу об установке и настройке Squid на контроллере домена на базе Windows 2008 R2. Помимо всего прочего реализована авторизация пользователей живущих в Active Directory и проверка нахождения их в определённой группе. Каждой группе назначены свои разрешения и доступные ресурсы.

   Чего стоило реализовать эту схему - лучше промолчать. Не смотря на то, что документации и готовых примеров в интернете пруд пруди, пришлось собирать мозаику из кучи источников что бы схема стала работоспособной. Изначально, хотелось реализовать авторизацию и проверку в группах через Kerberos, но на это у меня просто терпения не хватило. Затык наступил на создании .keytab файла.

   Ладно, начнём.

   Немного простонародной теории. По-умолчанию, после установки Squid, не важно на какой платформе, прохождение всего трафика разрешено. Плюс ко всему возможность авторизации в AD и запроса информации от туда, осуществляется так называемыми хелперами. Т. е. само приложение или демон Squid запускает другие приложения или скрипты для выполнения тех или иных действий. Речь о действиях, в нашем случае, идёт в AD. Для того чтобы запрашивать информацию в AD, необходимо это делать от имени пользователя, находящегося в AD. Поэтому плавно переходим к пратике с иллюстрациями.

 

 

 

   В первую очередь необходимо завести в Active Directory служебного пользователя, от имени которого хелперы будут выполнять действия в AD. Важной особенностью учётной записи является бессрочный пароль и невозможность смены пароля пользователем.

 

 

   Далее переходим к установке Squid. Дистрибутив Squid я брал на сайте, как мне казалось, разработчиков. Однако, в последствии выяснилось, что эти ребята только скомпилировали дистрибутив и не более того. Так что обращаться к ним за помощью бесполезно. Инсталлятор только для x64 систем. Версия Squid 3.5.20. По самой установке вопросов возникнуть не должно - запускаем инсталлятор от имени администратор и, как говорится, жмём Далее.

   Самое скучное позади. Поверь, мой друг, выполнив настройку по этому руководству, ты вряд ли ощутишь тоже самое, что и я. Когда все ссылки уже фиолетовые в поисковике, а ничего не получается. Куча литературы об одних и тех же вещах, но у всех по-разному реализовано. Хватит соплей, идём смотреть конфигу Squid. По-умолчанию она находится в C:\Squid\etc\squid\. Файл в котором находится основная конфигурация squid.conf. Его мы и откроем любым редактором. К счастью, начальная конфига без полного описания возможностей, поэтому в исключительный вид её привести будет не сложно. Я приведу пример уже готовой конфигурации с описанием. Конфигурация разделена на блоки для более лучшего понимания. Итак:

 

C:\Squid\etc\squid\squid.conf

#В этом блоке описан запуск хелпера отвечающего за проверку наличия пользователя в домене. Параметр -D указавает от какого пользователя мы запрашиваем информацию в AD, параметр -W - путь к файлу с паролем этого пользователя. Параметр -h - CD к которому подключается хелпер. -v - версия LDAP. Остальное не помню.
auth_param basic program C:/Squid/lib/squid/basic_ldap_auth.exe -R -v 3 -b "dc=pcs,dc=local" -D Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. -W C:/Squid/etc/squid/pwd -f sAMAccountName=%s -h pcs.local
auth_param basic realm Enter your System LOGIN
auth_param basic children 5
auth_param basic credentialsttl 2 hours

 #В этом блоке запускается хелпер который проверяет нахождение в домене (-b), в группе (-f) пользователя. Расположение самой группы Сама группа находится в организационных еденицах (ou=). Остальные параметры идентичны хелперу basic_ldap_auth.exe.
external_acl_type ldap_group ttl=900 children-max=10 %LOGIN C:/Squid/lib/squid/ext_ldap_group_acl.exe -R -b "dc=pcs,dc=local" -f "(&(cn=%v)(memberOf=cn=%a,ou=Proxy,ou=System Accounts,ou=IT,ou=Office,ou=PCS,dc=pcs,dc=local))" -D "Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра." -w "Qwerty148635" -h pcs.local

#Дальше мы создаём ACL, для каждой группы в AD к которой мы будем применять правила выхода в интернет. Т. е. ACL inetf соответствует внешняя ACL ldap_group, которая содержит в себе ERR или OK для группы в AD.
acl inetf external ldap_group internetfull
acl inets external ldap_group internetshort

#Стандартный набор правил.
acl SSL_ports port 443
acl Safe_ports port 80
acl Safe_ports port 21
acl Safe_ports port 443
acl Safe_ports port 70
acl Safe_ports port 210
acl Safe_ports port 1025-65535
acl Safe_ports port 280
acl Safe_ports port 488
acl Safe_ports port 591
acl Safe_ports port 777
acl CONNECT method CONNECT

#Эта ACL с сетью из которых разрешеать или заперещать обращения.
ACL acl net src 192.168.0.0/16

#ACL со списком доменов
acl blacklist dstdomain "C:/squid/etc/squid/blacklist"

#ACL с типами файлов:
acl w_media urlpath_regex -i \.gif$ \.jpg$ \.png$ \.ico$ \.jpeg$ \.mp3$ \.mp4$ \.avi$ \.mkv$ \.bmp$

Далее следует список разрешающих и заперещающих правил. Последовательность имеет значение!


http_access deny net blacklist #Заперещает для всех сетей доступ к сайтам в файле C:/squid/etc/squid/blacklist
http_access deny inets w_media #Запрет для ACL inets контента, указанного в ACL w_media. По сути, эта ACL запрещает загрузку пользователям AD, находящимся в группе internetshort, указанных расширений файлов. Т. е. на web странице не будут отображаться картинки, значки, видео, аудио определённых форматов.

#Дальше идут пара общих разрешающих правил для доступа в интернет пользователям находящихся в группах AD (internetshort, internetfull)
http_access allow inets
http_access allow inetf

http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

http_access deny all #И, наконец, общее запрещающее правило для всех остальных.


http_port 3128
coredump_dir C:/squid/var/cache/
refresh_pattern ^ftp:        1440    20%    10080
refresh_pattern ^gopher:    1440    0%    1440
refresh_pattern -i (/cgi-bin/|\?) 0    0%    0
refresh_pattern .        0    20%    4320
dns_nameservers 192.168.83.5 10.100.0.10
max_filedescriptors 3200

   Всё это заработало, но с запросом логина и пароля. Запомнить его в браузере есть возможность, даже в старых. Однако, практический у всех, за исключением IE11, выходит запрос на подтверждение запомненного пароля. Т. е. пароль уже введён, осталось только нажать OK.

Самое большое разочарование после недельного мозгового штурма было после осознания того, что Squid ничего не петрит в кирилице!!! Сами хелперы без проблем видят учётки на кирилице, а Squid передать хелперам ничего не может. Каков точно механизм я не знаю, но сам факт. Может быть я ошибась? Поправьте меня.

Всем мира!

 

Комментарии  
0 # HelpKeyF1 24.07.2019 20:00
жаль, я со сквидом и pfsense мудился ... искал мануалы, пробовал настроить по десятку раз, и оно не работает, в общем тоже не сложилось, пришел к выводу, что лучше заморочиться на Traffic Inspector, как планировал ранее, да и все
Сообщить модератору
-2 # HelpKeyF1 22.07.2019 20:32
мануал слабый, нет подробностей
Сообщить модератору
+1 # Admin 23.07.2019 23:16
Да, как-то не сложилось у меня со сквидом под виндой. Позже удалю пост.
Сообщить модератору

Комментарии отключены