Как настроить Freeradius для работы с Active Directory и MySQL одновременно


Установка и настройка сервера выполнена на базе FreeBSD 10. Но инструкция может быть применима к другим операционным системам UNIX.
Подготавливаем сервер
Прежде чем начать, настраиваем сеть для доступа к сети Интернет.
Заходим под суперпользователем:
su
Выставляем часовой пояс (у меня московское время) и сразу синхронизируем время:
cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime; ntpdate 0.freebsd.pool.ntp.org;
Создаем задание в cron для автоматической синхронизации времени каждую ночь:
echo '0 0 * * * /usr/sbin/ntpdate 0.freebsd.pool.ntp.org' >> /var/cron/tabs/crontab && crontab /var/cron/tabs/crontab
Обновляем систему:
pkg update && pkg upgrade
Готовим сервер для работы с Active Directory
Устанавливаем samba:
pkg install samba4
Создаем конфигурационный файл для настройки Kerberos:
ee /etc/krb5.conf
[libdefaults]
default_realm = DMOSK.LOCAL
clockskew = 300
v4_instance_resolve = false
v4_name_convert = {
host = {
rcmd = host
ftp = ftp
}
plain = {
something = something-else
}
}
[realms]
DMOSK.LOCAL = {
kdc = DMOSK.LOCAL # контроллер домена или домен
admin_server = DMOSK.LOCAL # контроллер домена или домен
}
[domain_realm]
.dmosk.local = DMOSK.LOCAL* Полужирным выделены данные, которые вы должны заменить своими
Проверяем получение билета от Active Directory:
kinit -p admin && klist
* admin — логин в AD
Должен получиться, примерно, такой ответ:
Credentials cache: FILE:/tmp/krb5cc_0
Principal: admin@DMOSK.LOCAL
Issued Expires Principal
Jul 14 09:55:28 2014 Jul 14 19:55:28 2014 krbtgt/DMOSK.LOCAL@DMOSK.LOCALЕсли ответ получен правильно, идем дальше
Создаем конфигурационный файл для samba:
ee /usr/local/etc/smb4.conf
[global]
workgroup = DMOSK
server string = Samba Server
security = ads
;hosts allow = 192.168.0. 127.
log file = /var/log/samba/log.%m
max log size = 500
password server = DMOSK.LOCAL # контроллер домена или домен
encrypt passwords = yes
realm = DMOSK.LOCAL
socket options = TCP_NODELAY
os level = 1
display charset = koi8-r
unix charset = koi8-r
dos charset = cp866
winbind use default domain = yes
winbind uid = 10000-15000
winbind gid = 10000-15000
winbind enum users = yes
winbind enum groups = yes
* Полужирным выделены данные, которые вы должны заменить своими.
Редактируем файл nsswitch.conf:
sed -ie 's/group: compat/group: files winbind/g' /etc/nsswitch.conf; sed -ie 's/passwd: compat/passwd: files winbind/g' /etc/nsswitch.conf
Разрешаем запуск демона samba:
echo 'samba_server_enable="YES"' >> /etc/rc.conf
Запускаем сервер samba:
service samba_server start
Добавляем наш сервер в домен:
net ads join -U admin
* admin — учетная запись в AD с правами на добавление компьютеров в домен.
Перезагружаем сервер:
shutdown -r now
После перезагрузки проверяем, что сервер видит учетные записи в Active Directory:
wbinfo -u
Устанавливаем и настраиваем Freeradius
pkg install freeradius
Проверяем, что аутентификация в AD через модуль ntlm_auth работает корректно:
ntlm_auth --request-nt-key --domain=DMOSK.LOCAL --username=kdo
* Полужирным выделен домен.
Вы должны получить ответ:
NT_STATUS_OK: Success (0x0)
Редактируем конфигурационный файл модуля ntlm-аутентификации freeradius:
ee /usr/local/etc/raddb/modules/ntlm_auth
exec ntlm_auth {
wait = yes
program = "/usr/local/bin/ntlm_auth --request-nt-key --domain=DMOSK.LOCAL --username=%{mschap:User-Name} --password=%{User-Password}"
}
* Полужирным выделены данные, которые вы должны заменить своими.
Добавляем инструкцию для использования модуля ntlm_auth в конфигурационный файл:
ee /usr/local/etc/raddb/sites-enabled/default
authenticate {
...
ntlm_auth
...
}
Редактируем список пользователей freeradius (создаем правило использования модуля ntlm_auth по умолчанию) — эту строчку лучше поместить в самый верх файла:
ee /usr/local/etc/raddb/users
DEFAULT Auth-Type = ntlm_auth
Редактируем основной конфигурационный файл freeradius:
ee /usr/local/etc/raddb/radiusd.conf
allow_vulnerable_openssl = yes
Проверяем конфигурационный файл:
radiusd -X
Разрешаем запуск демона radius:
echo 'radiusd_enable="YES"' >> /etc/rc.conf
Запускаем сервер radius:
service radiusd start
На этом настройка Freeradius + AD закончена.
Проверяем:
radtest test test123 localhost 1218 testing123
* test, test123 — логин, пароль пользователя в Active Directory. testing123 — пароль по умолчанию для подключения к серверу freeradius.
Freeradius + MySQL
Устанавливаем mysql-server:
pkg install mysql56-server
Разрешаем запуск демона mysql:
echo 'mysql_enable="YES"' >> /etc/rc.conf
Запускаем сервер mysql:
service mysql-server start
Устанавливаем пароль для пользователя root в mysql:
mysqladmin -u root password
Создаем базу данных и пользователя:
mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS radius;" -e "GRANT ALL ON radius.* TO radius@localhost IDENTIFIED BY 'radius'";
Загружаем данные, выполнив последовательно две команды:
mysql -u root -p radius < /usr/local/etc/raddb/sql/mysql/schema.sql
mysql -u root -p radius < /usr/local/etc/raddb/sql/mysql/nas.sql
Создаем тестового пользователя:
mysql -u radius -p -e "INSERT INTO radius.radcheck (username, attribute, value) VALUES ('testsql', 'Password', 'test123');"
Редактируем конфигурационный файл для работы freeradius с sql:
ee /usr/local/etc/raddb/sql.conf
password = "radius"
readclients = yes
Редактируем конфигурационный файл default (разрешаем использовать базу данных, как источник учетных записей):
ee /usr/local/etc/raddb/sites-enabled/default
authorize {
…
sql {
ok = return
}
…
}
session {
…
sql
…
}
post-auth {
…
sql
…
}
Редактируем основной конфигурационный файл freeradius (подключаем файл с настройками для sql) — просто снять комментарий:
ee /usr/local/etc/raddb/radiusd.conf
$INCLUDE sql.conf
Перезапускаем сервер radius:
service radius restart
Готово.
При данных настройках сервер сначала будет искать учетные записи в Active Directory, а если ничего не найдет — в базе MySQL.