pfsense + captive portal + LDAP -RADIUS -squid

Apr 21, 2016 22:48

Для прикрутки ldap авторизации везде советуют использовать RADIUS-сервера. Мне неудобно. Оказалось я не один. Вопрос поднимался. Правда недостаточно продробно расписано. Хотя направление правильное дано.

https://forum.pfsense.org/index.php?topic=103046.0
https://redmine.pfsense.org/issues/5112

Код дан, но предшествующий, первый шаг в редмайне не совсем чётко описан.
1) Настроить LDAP-сервер в менеджере пользователей.
Обнаружил косяк вида: если имя первого контейнера OU на русском языке, то работать не будет. Хотя вложенные на русском же нормально определяются. Под это дело сделал переименование всех контейнеров первого уровная на английский. Давно собирался.

2) На страницу конфига captive portal добавить радиобаттон (чтобы не ломать имеющееся).
Вот здесь и недосказанность, как раз.
Надо отредактировать /usr/local/www/services_captiveportal.php
В районе 680й строки в методах аутентификации к существующим пунктам

No Authentication
Local User Manager / Vouchers
RADIUS Authentication

добавить вариант LDAP-серверов, например. Скопировать блок Local User Manager / Vouchers.
Во вставленном блоке поменять значения с:

value="local" на value="LDAP_local"
$pconfig['auth_method']=="local" на $pconfig['auth_method']=="LDAP_local"
gettext("Local") на gettext("LDAP")
a href="system_usermanager.php" на a href="system_authservers.php"
gettext("User manager") на gettext("LDAP servers")

чтобы не путаться и передавать полученные значения туда, куда надо.
Код на чек-бокс мне не нужен был. Но его значение при необходимости добавления, по идее, также надо сменить.

3) Отредактировать /usr/local/captiveportal/index.php
Создал полную копию блока else в районе 220 строки:
$_POST['accept'] && $cpcfg['auth_method'] == "local"
Отличие - в проверяемом методе аутентификаии - local на LDAP_local поменял: $_POST['accept'] && $cpcfg['auth_method'] == "LDAP_local"
В коммент //check against local user manager добавил про ldap.
Из редмайна блок добавить можно после коммента:

$authcfg = auth_get_authserver("YOUR LDAP BACKEND NAME");
$_attributes = array();
$loginok = authenticate_user($_POST['auth_user'], $_POST['auth_pass'], $authcfg, $_attributes);

C "YOUR LDAP BACKEND NAME" у меня случился косяк. Ни по ip, ни по fqdn не работали. Captive portal всегда ошибку выдавал на неверные введённые логин/пароль.
Оказалось, что здесь надо вводить юзерфрэндли нэйм из user manager - из поля Descriptive name. У меня так висел просто "LDAPSRV". После его ввода всё заработало.

firewall, ad, pfsense

Previous post Next post
Up