Попытаюсь рассказать как я решил проблему установки и настройки 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 — указывает 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.Вторая строка:
AllowAllInet — название группы AD
myextgroup1 — название расширенной группы
mygroup1 — простая группа с которой будет работать squid
Создаем acl с социальынми сетями:
Ну и теперь запрещаем нашей группе выход в соц. сети:
Ну вот и все. Как сделать еще две группы? … написать эти же правила еще ДВА раза.
Ссылки достойные внимания по этому вопросу:
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