Skip to content

Document Header

Samba 4 server, Radius и PPTP с использованием MS-CHAP v2 c access_attr

Samba 4 server, Radius и PPTP с использованием MS-CHAP v2 c access_attr published on 1 комментарий к записи Samba 4 server, Radius и PPTP с использованием MS-CHAP v2 c access_attr

Хочу представить свою краткую версию настройки доступа к samba 4 server vpn dial in по протоколу pptp (MS-CHAP v2) через freeradius. Отличительной особенностью данной статьи является предложенный мной метод использования встроенных атрибутов ldap без использования ldap редакторов для ОС win vista/7/8/2008/2012. В этих ОС нет возможности графическими средствами установить значение allow/deny во вкладке свойств пользователя dial-in (входящий звонок).

Предполагается, что у вас установлена и настроена samba 4 желательно release 4.0.x в режиме active directory domain controller (если настройка не производилась, то здесь можно почитать как это сделать).
На том же сервере установлен и настроен pptpd, к которому уже осуществлялись успешные подключения по pptp с mschap mppe.
На том же сервере установлен freeradius server с поддержкой ldap, конфигурационные файлы которого находятся в /etc/raddb, у кого-то они могут быть в /etc/freeradius/
Конфигурационные файлы freeradius client находятся в /etc/freeradiusclient-ng/
Конфигурационные файлы не являются чистыми и имеют настройки по умолчанию. Если это не так рекомендую почитать эту статью.

Предположим, что ip нашего сервера 192.168.254.1
Domain: test.loc
В ad заведен обычный (без привелегий) пользователь ldap_user с паролем User_123

Заглянем в /etc/raddb/radiusd.conf изменим/добавим необходимые строки:

listen {
type = auth
ipaddr = 192.168.254.1
port = 0
interface = eth0
}
listen {
type = auth
ipaddr = 127.0.0.1
port = 0
interface = lo
}
listen {
type = acct
ipaddr = 192.168.254.1
port = 0
interface = eth0
}
listen {
type = acct
ipaddr = 127.0.0.1
port = 0
interface = lo

В /etc/raddb/clients.conf запоминаем, а лучше меняем на собственное:

secret = testing123

Это значение нами будет использовано позже.

В /etc/raddb/sites-enabled/ оставляем только default
Символические ссылки Inner-tunnel и control-socket я удалил.

В единственно оставшемся /etc/raddb/sites-enabled/default я раскомментировал:


auth_log (что является необязательным)

ldap

Auth-Type LDAP {
ldap
}


В /etc/raddb/modules/ldap я изменил следующее:

ldap {
server = "localhost" # имя нашего сервера
identify = "cn=ldap_user,cn=users,dc=test,dc=loc" # наш существующий пользователь при помощи которого мы будем осуществлять поиск в ldap
password = " User_123" # пароль пользователя
basedn = "dc=test,dc=loc" #наш домен
filter = "(sAMAccountName=%{%{Stripped-User-Name}:-%{User-Name}})" # фильтр для поиска

access_attr = "msNPAllowDialin" # ключевой атрибут фильтра в ldap, определяющий доступ к vpn для учетной записи (True/False). Здесь может быть указан иной атрибут по которому будет приниматься решение о предоставлении/отказе доступа. Пример смотрите в конце статьи.

chase_referrals = yes
rebind = yes

}

В /etc/raddb/modules/mschap я изменил следующее:

mschap {
use_mppe = yes
require_encryption = yes
require_strong = yes
with_ntdomain_hack = no
ntlm_auth = "/usr/local/samba/bin/ntlm_auth --request-nt-key --username=%{%{Stripped-User-Name}:-%{%{User-Name}:-None}} --challenge=%{%{mschap:Challenge}:-00} --nt-response=%{%{mschap:NT-Response}:-00}"
}

Примечание: в ранних версиях samba 4 (например Samba4 -4.0.0rc2) рекомендуется использовать ntlm_auth3 от samba3.

В наш настроенный /etc/ppp/pptpd-options добавляем:

plugin radius.so
plugin radattr.so

Теперь откроем /etc/freeradiusclient-ng/servers:

127.0.0.1    testing123 #secret, который мы задали в /etc/raddb/clients.conf

В файле /etc/radiusclient-ng/radiusclient.conf проверяем наличие пути dictionary
В моем случае:

dictionary    /usr/share/radiusclient-ng/dictionary

В файле /usr/share/radiusclient-ng/dictionary проверяем наличие строки:

$INCLUDE /usr/share/radiusclient-ng/dictionary.microsoft

Настройка закончена, после рестарта freeradius и pptpd все должно работать.

Для предоставления доступа к vpn-серверу используется вкладка dial-in (входящие звонки), которая будет корректно работать только для win xp с admin pack или win 2003.

dial-in properties

Для более свежих версий вкладка либо не будет отображаться вовсе, или выдавать ошибку. Чтобы решить данную проблему придется воспользоваться редактором ldap.

ldap editor
Одну из реализаций скачать можно здесь.
Однако есть способ при котором можно обойтись и без ldap редактора. Для этого нам нужно будет переопределить значение access_attr.

Покопавшись в атрибутах пользователя я нашел следующие неиспользуемые мной атрибуты во вкладке адрес. Если данные атрибуты вы аккуратно заполняете, то для своих целей можете использовать любые иные. Описание атрибутов вкладки «адрес» (привожу русские значения):

streetAddress = Улица
postOfficeBox = Почтовый ящик
l = город
ct = край, регион
postalCode = почтовый индекс

Итак, изменим значение атрибута access_attr. Для этого вернемся в /etc/raddb/modules/ldap и изменим строку:

access_attr = "msNPAllowDialin"
на, например, postOfficeBox
access_attr = "postOfficeBox"
добавим еще пару строк
access_attr_deny_value = ""
access_attr_used_for_allow = yes

Таким образом мы получим, что все пользователи по умолчанию (с чистой строкой) не будут иметь доступа к vpn. Однако, как только в этой строке (в свойствах пользователя во вкладке адрес) появится хоть какая-то запись, пользователь сможет подключаться к vpn.

1 комментарий

Добавить комментарий