pfsense + squid + LDAP + AD

Попытаюсь рассказать как я решил проблему установки и настройки pfsense на Hyper-V 2012, а так же организовать аутентификацию через LDAP для разграничения прав доступа к сайтам по группам из AD. Используем pfsense 2.1.4-RELEASE (amd64) built on Fri Jun 20 12:59:50 EDT 2014. Из трудностей которые возникли это то что pfsense после установки не хотел видеть виртуальные интерфейсы, которые использует Hyper-V Core 2012 по умолчанию. Решение данного вопроса — поставить «устаревшие виртуальные интерфейсы», но они не поддерживают VLAN, зато pfsens их видит. На этом неприятности с интерфейсами не заканчиваются. ОС pfsense видит сетевые интерфейсы (de0 и de1), но трафик через них не ходит. Это какой то баг не совместимости. Для решения — просто выключаем/включаем интерфейсы из консоли pfsenseifconfig de0 down|up. После этого интерфейсы начинают работать. Далее из пакетов ставим squid 2. Нам надо настроить авторизацию пользователей через LDAP: в принципе как это сделать написано на каждом заборе, но тут тоже есть свои нюансы.

Безымянный

Нюанс заключается вот в чем, для поиска пользователей в разных контейнерах требуется рекурсивный запрос. Для этого надо выставить ключ ‘-R’. Некоторые предлагают подправить конфиг pfsense. Я же придерживаюсь более консервативных взглядов «не лезть внутрь без надобности». По этому предлагаю вам выставить данный ключ после имени доменного пользователя как на скриншоте.
Немного о параметрах:
LDAP server user DN — тут нужен самый простой пользователь, он имеет право на чтение AD.
LDAP base domain — тут указывается домен «dc=domain,dc=local»
LDAP username DN attribute — этот параметр соответствует атрибуту в AD. Обычно там полностью ФИО пользователя. Смутно представляю для чего нужен этот параметр.
LDAP search filter — sAMAccountName тоже атрибут AD, в него передается параметр ‘%s’ в котором лежит логин пользователя.
Вконце концов чтобы отладить все свои параметры, потребуется отладка через shell. Должно получиться примерно вот что:

1
2
3
 /usr/pbi/squid-amd64/libexec/squid/squid_ldap_auth -v 3 -b "dc=terra,dc=local" -D test1@terra.local -R -w p@ssw0rd -f "sAMAccountName=%s" -u cn -P 192.168.100.201:389
test2 p@ssw0rd2
OK

Второй строчкой вводится логин и пароль пользователя, при правильных действиях должны получить значение ОК.
Ну вот вроде теперь пользователи могут авторизоваться на сервере squid и можно вести логирование трафика по доменному имени пользователя. Но есть следующая задача, ограничить некоторых пользователей в доступе к внешним ресурсам. Для этого нам понадобиться перейти на вкладку General. И в поле ввода Custom Options вводим параметры, первая строка:

external_acl_type myextgroup1 ttl=12 %LOGIN /usr/local/libexec/squid/squid_ldap_group -R -d -b "dc=terra,dc=local" -f "(&(objectclass=user)(sAMAccountName=%v)(memberOf=cn=%a,OU=Users,OU=MyBusiness,DC=terra,DC=local))" -D squid@terra.local -K -w p@ssw0rd 192.168.100.201

external_acl_type — указывает squid’у что будет использоваться внешний acl
myextgroup1 — название расширенной acl
objectclass=user — мы же ищем пользователя? (атрибут AD)
sAMAccountName=%v — В параметр %v передается логин из %LOGIN (атрибут AD)
memberOf=cn=%a — В параметр %a передается название группы
ttl=12 — новый пользователь в группе, по умолчанию может начинать работать через 3600 секунд (1 час), делаем что через 12 секунд
-K — «обрезает» часть имени @domain и позволяет корректно сравнивать имя пользователя и группу.
Еще один момент, пользователь squid@terra.local должен обладать большими правами, чем обычный пользователь, для чтения групп, паролей.
Задаем acl который будет передавать название группы в переменную %a.Вторая строка:

acl mygroup1 external myextgroup1 AllowAllInet

AllowAllInet — название группы AD
myextgroup1 — название расширенной группы
mygroup1 — простая группа с которой будет работать squid
Создаем acl с социальынми сетями:

acl socialnet dstdomain vk.com odnoklassniki.ru facebook.com facebook.ru

Ну и теперь запрещаем нашей группе выход в соц. сети:

http_access deny mygroup1 socialnet

Ну вот и все. Как сделать еще две группы? … написать эти же правила еще ДВА раза.

Ссылки достойные внимания по этому вопросу:
http://www.k-max.name/linux/squid-auth-kerberos-ldap-grupp-active-directory/
http://www.thin.kiev.ua/router-os/50-pfsense/537-pfsense-20squid-ldap-ad-.html

Вы можете задать вопрос по статье специалисту.

Компьютеру или ноутбуку не хватает мощности? Необходима комплексная модернизация или простая замена жесткого диска? 

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