FreeRADIUS и авторизация пользователей
Добавлено: 17 окт 2016, 19:21
Введение:
С одной стороны есть контролер домена, где прописаны все пользователи, а с другой стороны есть Wi-Fi, к которому все страстно хотят получить доступ. заводить одного пользователя? Но это как только кто нить левый узнает пароль - прийдётся всех перестраивать... Гостевой доступ подразумевает хождение ко мне пользователей, а я не очень рад их видеть... Пришлось думать как свести наше общение до минимума.
Решение:
Было решено брать логины и пароли с контролера домена. Делать это будем через RADIUS. Использовать будем пакет FreeRADIUS v3 - так как там появились сертификаты.
Реализация:
Контролер домена у меня реализован на Samba 4.3, так как лицензий на винду нет. Ставить фрирадиус буду тоже на этой же машине. Поехали:
настройки оставил по умолчанию.
Когда всё установилось идём в /usr/local/etc/raddb и начинаем править кончики:
radiusd.conf
clients.conf
Сюда надо прописать все наши Wi-Fi точки доступа, которые будут обращаться за авторизацией...
Ну а теперь начинается самое интересное:
Правим файл sites-enabled/default
в секцию
authorize { добавляем
А вот pap в этой же секции надо закоментировать
в секцию authenticate { добавляем:
Далее в директории policy.d создаём файл ntlm_auth следующего содержания
Далее в директории mods-available находим и правим файл ntlm_auth
То есть прописываем путь до модуля и вписываем свой домен.
По аналогии правим файл mschap
Ну и на последок файл eap нужно поменять значение переменной
Теперь можно запустить ради и проверить его работу.
Верный ответ выглядит как-то так:
А неверный так:
С одной стороны есть контролер домена, где прописаны все пользователи, а с другой стороны есть Wi-Fi, к которому все страстно хотят получить доступ. заводить одного пользователя? Но это как только кто нить левый узнает пароль - прийдётся всех перестраивать... Гостевой доступ подразумевает хождение ко мне пользователей, а я не очень рад их видеть... Пришлось думать как свести наше общение до минимума.
Решение:
Было решено брать логины и пароли с контролера домена. Делать это будем через RADIUS. Использовать будем пакет FreeRADIUS v3 - так как там появились сертификаты.
Реализация:
Контролер домена у меня реализован на Samba 4.3, так как лицензий на винду нет. Ставить фрирадиус буду тоже на этой же машине. Поехали:
Код: Выделить всё
cd /usr/ports/net/freeradius3
make install clean
Когда всё установилось идём в /usr/local/etc/raddb и начинаем править кончики:
radiusd.conf
Код: Выделить всё
prefix = /usr/local
exec_prefix = ${prefix}
sysconfdir = ${prefix}/etc
localstatedir = /var
sbindir = ${exec_prefix}/sbin
logdir = /var/log
raddbdir = ${sysconfdir}/raddb
radacctdir = ${logdir}/radacct
name = radiusd
confdir = ${raddbdir}
modconfdir = ${confdir}/mods-config
certdir = ${confdir}/certs
cadir = ${confdir}/certs
run_dir = ${localstatedir}/run/${name}
db_dir = ${raddbdir}
libdir = /usr/local/lib/freeradius-3.0.11
pidfile = ${run_dir}/${name}.pid
correct_escapes = true
max_request_time = 30
cleanup_delay = 5
max_requests = 16384
hostname_lookups = no
log {
destination = files
colourise = yes
file = ${logdir}/radius.log
syslog_facility = daemon
stripped_names = no
auth = yes
auth_badpass = yes
auth_goodpass = yes
msg_denied = "You are already logged in - access denied"
}
checkrad = ${sbindir}/checkrad
security {
allow_core_dumps = no
max_attributes = 200
reject_delay = 1
status_server = yes
allow_vulnerable_openssl = yes
}
proxy_requests = yes
$INCLUDE proxy.conf
$INCLUDE clients.conf
thread pool {
start_servers = 5
max_servers = 32
min_spare_servers = 3
max_spare_servers = 10
max_requests_per_server = 0
auto_limit_acct = no
}
modules {
$INCLUDE mods-enabled/
}
instantiate {
}
policy {
$INCLUDE policy.d/
}
$INCLUDE sites-enabled/
Сюда надо прописать все наши Wi-Fi точки доступа, которые будут обращаться за авторизацией...
Код: Выделить всё
client localhost {
ipaddr = 127.0.0.1
proto = *
secret = testing123
require_message_authenticator = no
limit {
max_connections = 16
lifetime = 0
idle_timeout = 30
}
}
client 192.168.6.5 {
ipaddr = 192.168.6.5
secret = testing123
}
client 192.168.6.10 {
ipaddr = 192.168.6.10
secret = testing123
}
Правим файл sites-enabled/default
в секцию
authorize { добавляем
Код: Выделить всё
ntlm_auth
в секцию authenticate { добавляем:
Код: Выделить всё
Auth-Type ntlm_auth {
ntlm_auth
}
ntlm_auth
Код: Выделить всё
ntlm_auth.authorize {
if (!control:Auth-Type && User-Password) {
update control {
Auth-Type := ntlm_auth
}
}
}
Код: Выделить всё
exec ntlm_auth {
wait = yes
program = "/usr/local/bin/ntlm_auth --request-nt-key --domain=SCH2120 --username=%{mschap:User-Name} --password=%{User-Password}"
}
По аналогии правим файл mschap
Код: Выделить всё
mschap {
ntlm_auth = "/usr/local/bin/ntlm_auth --request-nt-key --username=%{%{Stripped-User-Name}:-%{%{User-Name}:-None}} --challenge=%{%{mschap:Challenge}:-00} --nt-response=%{%{mschap:NT-Response}:-00}"
pool {
start = ${thread[pool].start_servers}
min = ${thread[pool].min_spare_servers}
max = ${thread[pool].max_servers}
spare = ${thread[pool].max_spare_servers}
uses = 0
retry_delay = 30
lifetime = 86400
cleanup_interval = 300
idle_timeout = 600
}
passchange {
}
}
Код: Выделить всё
default_eap_type = ttls
Код: Выделить всё
radtest -t mschap perepechaev_ra P@$$W0rd localhost 1218 testing123
Код: Выделить всё
Sent Access-Request Id 93 from 0.0.0.0:17495 to 127.0.0.1:1812 length 140
User-Name = "perepechaev_ra"
MS-CHAP-Password = "P@$$W0rd"
NAS-IP-Address = 192.168.1.146
NAS-Port = 1218
Message-Authenticator = 0x00
Cleartext-Password = "P@$$W0rd"
MS-CHAP-Challenge = 0x48b1db16a481e8b6
MS-CHAP-Response = 0x0001000000000000000000000000000000000000000000000000bb9868212820a0b8a68c32b8985172b0dd506ddd76fc294e
Received Access-Accept Id 93 from 127.0.0.1:1812 to 0.0.0.0:0 length 84
MS-CHAP-MPPE-Keys = 0x0000000000000000d724e7a28053c81c7191c16c56af3fbd
MS-MPPE-Encryption-Policy = Encryption-Allowed
MS-MPPE-Encryption-Types = RC4-40or128-bit-Allowed
Код: Выделить всё
Sent Access-Request Id 90 from 0.0.0.0:29865 to 127.0.0.1:1812 length 140
User-Name = "perepechaev_ra"
MS-CHAP-Password = "123"
NAS-IP-Address = 192.168.1.146
NAS-Port = 1218
Message-Authenticator = 0x00
Cleartext-Password = "123"
MS-CHAP-Challenge = 0x6642bddc68e99b7c
MS-CHAP-Response = 0x0001000000000000000000000000000000000000000000000000ec7f34f8e5499a5fbae8022a9d6640aac0024088f2370113
Received Access-Reject Id 90 from 127.0.0.1:1812 to 0.0.0.0:0 length 61
MS-CHAP-Error = "\000E=691 R=1 C=21a7a893f33bfc48 V=2"
(0) -: Expected Access-Accept got Access-Reject