Yvision.kz
kk
1
02:26, 06 марта 2016

Установка Freeradius + MySQL + Daloradius

Blog post image

Всем знакома ситуация когда в компании становится много точек доступа Wi-Fi дабы увеличить покрытия беспроводной сетью офисного пространства. Все бы хорошо, если бы не одно НО - как сдедить за доступом, контролировать эти самые точки? Хорошо если у вас их пару штук, а что делать если их 10, а может быть даже 100. Точки Wi-Fi могут жить в разных кабинетах, коридорах и даже могут быть установлены на улице.

Нам необходимо контролировать доступ к сети, для этого нам поможет центральная база для авторизации клиентов. В этой базе у нас будут логины и пароли, причем пара логин/пароль будет именной, то есть выдаваться будет на каждого сотрудника.

В общем, данная записка повествует о настройке Radius Server'а для контроля доступа к Wi Fi сети. Итогом настройки будет база с учетками Wi-Fi. Точки доступа чтобы пустить к себе в сеть, должны сперва обратиться к Radius'у, чтобы авторизовать клиента по паре логин/пароль. Заметьте здесь нету общего пароля самой точки.

При таком режиме работы точек вместе с Radius'ом, первые используют клиентскую базу второго, вместо своего общего пароля. Сервер с Radius - является центральным контроллером, в чьи обязанности входит разрешать или запрещать доступ в сеть Wi-Fi.

По умолчанию добавление пользовательских учетных записей, а также новых точек доступа в Radius, производится с помощью правки двух текстовых файлов /etc/raddb/users.conf - для пользовательских данных таких как логин/пароль и /etc/raddb/clients.conf - для точек доступа Wi-Fi. В большинстве случаев эти файлы редактируют в ручную.

Для ленивых админов которых бесит редактирование двух текстовых файлов, возможен вариант управления с помощью веб интерфейса Dalo Radius. Через веб сайт Dalo Radius удобно в два-три клика администрировать сервером Radius, упрощая и без того не сложный процесс администрирования.

Преимущества такого бутерброда (Radius сервер + Wi-Fi точки):

1. Общая база с логинами и паролями для Wi-Fi (именные учетные записи). В следствии чего управление доступом к сети возможно с сервера на котором установлен Radius. То есть если требуется добавить пользователя, просто можно зайти на Radius сервер и добавить учетную запись для доступа к Wi Fi. Нет необходимости давать общий пароль каждой точки доступа.

2. Именные учетные записи. Вместо обычного выбора Wi-Fi сети и ввода одного пароля, понадобится индивидуальная пара логин/пароль.

3. Вытекает из первого - если требуется закрыть доступ к Wi Fi сети какому нибудь пользователю, заходим на Radius сервер и отключаем учетную запись, а можем даже удалить ее. Например это нужно когда сотрудник уволился или гость офиса уехал.

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

Минусы такой системы:

1. При падении Radius сервера, доступ к Wi Fi сети может моментально пропасть или всего скорей повторный вход будет не возможен.

2. Немного сложная настройка по сравнению с одиночными разрозненными точками доступа

3. Много разных Wi-Fi сетей с разными SSID, что требует от пользователя переподключения.

4. Нету бесшовного перехода с одной сети на другую (бесшовный Wi-Fi роуминг, стандарты 802.11k и 802.11r).

5. Некоторые Wi-Fi адаптеры ноутбуков имеют проблемы с авторизацией

6. Windows XP до SP2 не имела поддержки WPA Enterprise, из за чего имеются сложности с настройкой доступа к Wi-Fi, даже с поддержкой оного.

7. Нет возможности организовать гостевой доступ (изолированная сеть для гостей), только если не настраивать роутеры, свитчи через VLAN. Хотя в некоторых точках доступа есть фаервол или функционал гостевого режима, с помощью которых можно выделить гостевую сеть в отдельную.

Если вы имеете достаточный бюджет, обязательно покупайте себе специализированные устройства для раздачи Wi-Fi интернета, например можно приобрести что-то на подобие популярного UniFi. В крупных организациях или торговых домах ставят именно такое оборудования. Конечно оно стоит дорого, и не всегда малые или средние компании могут себе позволить такую роскошь.

Существует схожее оборудования с UniFi от других вендоров, так что не расстраивайтесь сразу увидев ценник от UniFi. На рынке доступны решения с ценником по меньше от известных компаний. И даже есть решение от разработчиков альтернативных прошивок, например Lede(она же доработанная OpenWRT).

В итоге сформировал список похожих решений:

  • Mikrotik RB20XXui (RB951G-2HnD) + AP RB951G-2HnD (Capsman)
  • Dlink (контроллер DWC-1000 + точки DWL-2600AP)
  • EDIMAX c CAP300 + CAP1750 (WAP1200)
  • Cisco WLC 2504 (WLC5508) + AP3602 и/или AP3702
  • Обычные Wi-Fi роутеры, например TPLINK, на прошивке Lede (OpenWRT)

Из этого списка очень сильно выделяется бюджетный последний вариант на базе прошивки Lede (OpenWRT), вот оно наше все! Возможно вы найдете и другие способы организации умного Wi-Fi у себя в офисе.

Blog post image

Рис. 1 - Топология сети. При попытке авторизации устройства смартфона или ноутбука на точки доступа, введенные пользователем данные логин/пароль сперва посылаются на Radius сервер. Далее Radius сервер сверяет введенные реквизиты пользователем с хранящимися в его базе данных MySQL. Если нашлось соответствие, дается зеленый свет, разрешается доступ в Wi Fi сеть или запрещается вход, если данных не нашлось.

Краткое содержание записки:

1. Что будем ставить

2. Устанавливаем Freeradius

3. Устанавливаем MariaDB и создаем базу

4. Привязываем Radius Server к базе MariaDB

5. Пример добавления одного клиентского NAS и пользователя в текстовые файлы

6. Запускаем FreeRadius сервер в отладочном режиме

7. Устанавливаем и настраиваем DaloRadius

8. Заводим пользователей для доступа к Wi FI сети в DaloRadius

9. Добавляем точки доступа Wi Fi в DaloRadius

10. Настраиваем точки доступа Wi Fi

11. Подключение конечных устройств - смартфоны и ноутбуки

12. Решение проблемы с просроченными сертификатами

13. Проблема с Radius

14. Заключение

15. Ссылки

1. Что будем ставить

Для учета доступа к WI-FI сети пользователей с ноутбуками и смартфонами нам потребуется установить:

1. Freeradius server - он будет заниматься авторизацией устройств. Также возможен подсчет времени пребывания в сети, количество скачанного трафика и т.д. В моем случае, дополнительных возможностей не потребовалось.

2. MySQL (MariaDB) - база данных с учетными данными пользователей и описанием имеющихся точек доступа Wi Fi (IP адрес точки, имя и т.д.). Обычно в ней хранятся логины и пароли пользователей Wi Fi сети, плюс в ней могут быть прописаны точки доступа. Freeradius сервер будет обращаться к базе чтобы пускать пользователей в сеть. По умолчанию Freeradius сервер хранит пользовательские учетные записи в текстовом файле /etc/raddb/users.

3. Daloradius - веб интерфейс для Freeradius server, c помощью него можно наглядно управлять контроллером, то есть Radius сервером.

2. Устанавливаем Freeradius

Устанавливаем Freeradius:

# yum install freeradius freeradius-mysql freeradius-utils freeradius-sqlite -y

Ставим его в автозагрузку:

# systemctl enable radiusd

3. Устанавливаем MariaDB и создаем базу

Устанавливаем MariaDB (MySQL):

# yum install mariadb mariadb-server -y

Ставим запуск демона СУБД MySQL в автозагрузку и сразу запускаем его:

# systemctl enable mariadb.service

# systemctl start mariadb.service

Создаем базу:

# mysql -uroot -p

mysql> CREATE DATABASE radius;
mysql> GRANT ALL ON radius.* TO radius@localhost IDENTIFIED BY "radius_123";
mysql> flush privileges;
mysql> exit

Создаем структуру базы (таблицы), заливаем в только что созданную базу таблицы:

# mysql -uradius -p radius < /etc/raddb/mods-config/sql/main/mysql/schema.sql

Enter password: radius_123

4. Настраиваем FreeRadius Server для подключения к базе MariaDB

Привязываем Radius Server к базе MariaDB:

# vi /etc/raddb/sql.conf

# Connection info:
server = "127.0.0.1"
port = 3306
login = "radius"
password = "radius_123"
# Database table configuration for everything except Oracle
radius_db = "radius"

Далее открываем /etc/raddb/radiusd.conf:

# vi /etc/raddb/radiusd.conf

Добавляем в нем строку ее:

$INCLUDE sql.conf

Далее открываем /etc/raddb/sites-available/default

# vi /etc/raddb/sites-available/default

В нем ищем и раз комментируем строку которая содержит слово "sql" внутри секции authorize {} и также такую же строку со словом "sql" внутри секции accounting {}, а также раз комментируйте строку "sql" внутри секции session {}.

Получится примерно так:

authorize {
# See "Authorization Queries" in sql.conf
sql
}
accounting {
# See "Accounting queries" in sql.conf
sql
}
session {
# See "Simultaneous Use Checking Queries" in sql.conf
sql
}

Далее открываем /etc/raddb/sites-available/inner-tunnel

# vi /etc/raddb/sites-available/inner-tunnel

Здесь раз комментируем строки которые содержат слово "sql" внутри секции authorize {} и session {}.

Получится примерно так:

authorize {
# See "Authorization Queries" in sql.conf
sql
}
session {
# See "Simultaneous Use Checking Queries" in sql.conf
sql
}

Добавляем ссылку для модулей:

# ln -s /etc/raddb/mods-available/sql /etc/raddb/mods-enabled

Включаем драйвер MySQL:

# vi /etc/raddb/mods-available/sql

Добавляем в секцию sql{} строку driver = "rlm_sql_mysql", поле с driver = "rlm_sql_null" можно удалить или за комментировать.

Также вписываем пароль доступа к базе MySQL:

sql {
# The sub-module to use to execute queries. This should match
# the database you're attempting to connect to.
#
# * rlm_sql_mysql
# * rlm_sql_mssql
# * rlm_sql_oracle
# * rlm_sql_postgresql
# * rlm_sql_sqlite
# * rlm_sql_null (log queries to disk)
#
#driver = "rlm_sql_null"
driver = "rlm_sql_mysql"
server = "127.0.0.1"
port = 3306
login = "radius"
password = "radius_123"
# Database table configuration for everything except Oracle
radius_db = "radius"
# Clients will ONLY be read on server startup.
read_clients = yes
# Table to keep radius client info
client_table = "nas"
}

5. Пример добавления одного клиентского NAS и пользователя в текстовые файлы

Этот раздел можно пропустить, так как когда используется СУБД (MariaDB), ручные настройки конфликтуют с данными в базе. По сути если вы не хотите использовать Daloradius, можно просто редактировать текстовые файлы описанные в этом разделе. Получив при этом самодостаточную рабочею минимальную конфигурацию. Которой не нужен веб сервер и база данных. Все зависит от вкусов и удобств.

Здесь настроим Radius сервер, разрешим подключение к нему Wi Fi точек из локальной сети с адресом 10.0.10.0/24, а также добавим IP адрес одной точки доступа Wi-Fi для примера в файл /etc/raddb/clients.conf. Вообще, указывать целую под сеть считается устаревшим, в новых версиях Radius Server данный способ указания адреса сети будет удален. Рекомендованным способом считается добавление статического IP адреса каждой точки доступа с которой должен работать Radius сервер. Так что, лучше так не делайте - не указывайте адрес сети. А вообще, когда используется база данных MariaDB, в ручную файл "clients.conf" редактировать не требуется, также как и файл /etc/raddb/users. Но чтобы показать два способа управления Radius сервером, оставлены настройки ручного конфигурирования этих файлов.

Открываем файл /etc/raddb/clients.conf

# vi /etc/raddb/clients.conf

Добавляем клиентские NAS (точки доступа) которые будет использовать RADIUS Server для авторизации клиентов, учета времени и доступа. Добавлять следует в файл clients.conf.

Добавим блок, заменяем 10.0.10.0/24 на свой IP адрес сети или индивидуальный NAS клиента который будет использовать Radius для авторизации, учета и доступа (AAA).

client 10.0.10.0/24 {
secret = test123
require_message_authenticator = no
nas_type = other
}

или для одиночной точки Wi-Fi:

client Buh_wifi {
ipaddr = 10.0.10.38
secret = password
require_message_authenticator = no
}

Теперь займемся добавлением пользователей путем редактирования файла /etc/raddb/users, рассмотрим пример записи для одного пользователя:

Arman Cleartext-Password := "1234"

Здесь как видим добавлена учетная запись с именем Arman с простым паролем 1234

Перезапускаем Radius Server:

# service radiusd restart

Итог раздела: мы разрешили с какого диапазона адресов могут обращаться точки доступа к Radius серверу, а также указали пароль с которым это возможно. Также добавили первого пользователя.

6. Запускаем FreeRadius сервер в отладочном режиме

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

Запускаем Radius Server в отладочном режиме чтобы увидеть ошибки или нормальность работы.

Сперва остановим уже запущенный демон FreeRadius:

# systemctl stop radiusd

А теперь запустим отладку:

# radiusd -X

Вы должны получить строчку:


Ready to process requests

Не помешает добавить запуск Freeradius сервера после запуска MariaDB:

# vi /etc/systemd/system/multi-user.target.wants/radiusd.service

[Unit]
Description=FreeRADIUS high performance RADIUS server.
After=syslog.target network.target
After=mariadb.service

7. Устанавливаем и настраиваем DaloRadius

Здесь настроим веб интерфейс для FreeRadius который использует СУБД MySQL (MariaDB), до этого мы в ручную заносили данные в файлы users.conf и clients.conf. Теперь в этом не будет необходимости, удалите прописанные точки доступа из файла clients.conf, чтобы небыло задвоения с данными в MySQL.

Подключим репозиторий Epel:

# rpm -Uvh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-8.noarch.rpm

Из Epel нам понадобится всего один пакет (php-pear-DB).

Устанавливаем зависимости для Dalo Radius:

# yum install php-mysql php php-pear php-pear-DB -y

Устанавливаем Dalo Radius:

# wget http://sourceforge.net/projects/daloradius/files/latest/download -O daloradius-0.9-9.tar.gz

# tar zxvf daloradius-0.9-9.tar.gz

# mysql -uradius -p radius < daloradius-0.9-9/contrib/db/fr2-mysql-daloradius-and-freeradius.sql

Enter password: radius_123

Далее открываем файл daloradius.conf.php

# vi daloradius-0.9-9/library/daloradius.conf.php

Меняем в нем реквизиты доступа к базе MySQL (MariaDB):

$configValues['DALORADIUS_VERSION'] = '0.9-9';
$configValues['FREERADIUS_VERSION'] = '2';
$configValues['CONFIG_DB_ENGINE'] = 'mysql';
$configValues['CONFIG_DB_HOST'] = 'localhost';
$configValues['CONFIG_DB_USER'] = 'radius';
$configValues['CONFIG_DB_PASS'] = 'radius_123';
$configValues['CONFIG_DB_NAME'] = 'radius';
Перемещаем каталог с DaloRadius во внутрь каталога веб сервера Apache:
# mv daloradius-0.9-9 /var/www/html/daloradius
# chown apache:apache -R /var/www/html/daloradius
Запускаем веб сервер Apache и ставим его в автозагрузку:
# systemctl start httpd
# systemctl enable httpd
Теперь можно зайти в DaloRadius введя в браузере http://ip-адрес-вашего-сервера/daloradius
Логин/пароль - administrator / radius

Blog post image


8. Заводим пользователей для доступа к Wi FI сети
Заходим в Managment -> Users -> Add new user (Новый пользователь)

Blog post image


Примечание: Если у вас сервер только с Daloradius, можно заменить строчку DocumentRoot "/var/www/html/daloradius" в файле /etc/httpd/conf/httpd.conf, чтобы сразу грузилась страничка веб интерфейса.
Создаем пользователя(учетную запись):

Blog post image


Пользователь с именем "Arman" и паролем "1234" создан.
Если у вас нет веб интерфейса Dalo Radius, то добавление пользователей идет через файл /etc/raddb/users, пример записи одного пользователя:
Arman Cleartext-Password := "1234"
9. Добавляем точки доступа Wi Fi
Заходим в Managment -> NAS -> New NAS (Новый NAS)

Blog post image


Добавляем новый NAS (точку доступа Wi-FI):

Blog post image


Здесь указываем IP адрес точки доступа и секретный пароль, тип NAS - other.
Можно еще имя задать, например - Директорская.
Примечание: Выяснилось, что после добавления NAS необходим перезапуск Radius'a (systemctl restart radiusd). Иначе Radius не перечитывает таблицу NAS которая в MySQL. Разработчик Daloradius по этой проблеме советует делать перезапуск Radius после добавления NAS для каждой ОС. Он же рекомендует использовать готовую виртуальную машину Daloradius VM, где добавлена функция перезапуска службы Radius. Также есть решение от одного разработчика с форума, который добавил функционал перезапуска Radius своими силами в PHP код DaloRadius. Для обычного пользователя там много телодвижений, всякие там правки веб интерфейса, создание пользователя для перезапуска и т.д.
10. Настраиваем точки доступа Wi Fi
Идем в веб интерфейс точки доступа(роутера):

Blog post image


Примечание: Стоить отметить один момент - точки доступа должны поддерживать протокол WPA Enterprise.
Здесь указываем IP адрес Radius сервера и секретный пароль из файл /etc/raddb/clients.conf (test123)
или тот же пароль из веб интерфейса (который мы задали во время добавления точки доступа Wi-Fi).
11. Подключение конечных устройств - смартфоны и ноутбуки
Пример настройки андроид смартфона LG Fino:

Blog post image


Пишем логин который мы завели и пароль.

Blog post image


Пример подключения с ноутбука на котором установлена Windows 8.
11.2. Импорт пользователей
Процесс ввода списка пользователей упрощен, мы можем импортировать сразу кучу учетных записей.
Рассмотрим импорт пользователей в daloRADIUS, создайте файл формата:
user1,password1,
user2,password2,
user3,password3,

Blog post image


Нажав Import Users, можно загрузить в базу сразу пачку пользовательских учеток.
Очень удобная штука.
11.3. Включаем логирования авторизации
Чтобы видеть попытки подключения клиентов, необходимо открыть файл /etc/raddb/radiusd.conf
И в нем поправить строчку:
auth = yes
12. Решение проблемы с просроченными сертификатами
Если вы не можете соединится с точкой доступа, значить всего скорей сертификаты которые были созданы при установке Radius, стали просроченными. Обычно срок действия такого сертификата всего 2 месяца. В таких случаях в логах видно примерно следующее:
(6) ERROR: eap_peap : TLS Alert read:fatal:access denied
(6) WARNING: eap_peap : No data inside of the tunnel
(6) eap_peap : FAILED processing PEAP: Tunneled data is invalid
(6) ERROR: eap : Failed continuing EAP PEAP (25) session. EAP sub-module failed
(6) eap : Failed in EAP select
Чтобы заново пересоздать сертификаты, создайте простейший скрипт со следующим содержанием:
cd /etc/raddb/certs/
ls
rm -f *.pem *.der *.csr *.crt *.key *.p12 serial* index.txt*
nano ca.cnf
make ca.pem
make ca.der
make server.pem
make server.csr
make client.pem
chown root:radiusd ca.pem ca.der server.pem server.csr client.pem
service radiusd restart
По умолчанию сертификаты валидны 2 месяца.
Поменять срок годности можно путем редактирования строчки "default_days" в двух файлах:

  • server.cnf
  • ca.cnf

Проще всего это можно сделать через утилиту sed или в ручную через редактор vi/nano/mcedit:
# cd /etc/raddb/certs
# cp server.cnf server.cnf.old && cp ca.cnf ca.cnf.old
# sed -i 's/default_days.*=.*/default_days = 1826/' ca.cnf
# sed -i 's/default_days.*=.*/default_days = 1826/' server.cnf
Здесь в примере срок годности сертификатов равен 5 (1826 дня) годам.
Проверить можно с помощью команды:
# openssl x509 -in ca.pem -noout -dates
notBefore=Dec 30 07:55:40 2016 GMT
notAfter=Dec 30 07:55:40 2021 GMT
13. Зависание Radius
Иногда Radius Server может не пускать юзеров, поэтому можно в рамках профилактики, перезапускать этот сервис. Создайте файл, например /opt/restartradiusd.sh
# vi /opt/restartradiusd.sh
Вставьте туда текст:
systemctl restart radiusd
Дайте права на запуск:
# chmod +x /opt/restartradiusd.sh
Запустите планировщик cron:
# crontab -e
И добавьте туда строчку:
0 21 * * * root /opt/restartradiusd.sh
Теперь каждый день в 21:00 будет перезапускатся Radius сервер.
Замечен также глюк в работе некоторых сетевых карт ноутбуков, лечение - перезагрузка ноутбука.
14. Заключение
Настроен Radius сервер для авторизации доступа к Wi Fi сети офиса. Создана центральная база на подобие каталога Active Directory, в которой хранятся учетки пользователей сети Wi Fi. Теперь нет нужды давать общий пароль точки доступа, когда есть центральная база с именными учетными данными. Для администрирования Radius сервера установлен удобный веб интерфейс, в котором за 5 секунд можно открыть доступ к Интернету.
Рассмотрены два варианта управления Radius сервером: через веб интерфейс с базой и конфигурационные файлы.

15. Ссылки:

HotSpot lissyara

Простой HotSpot на FreeBSD

Chilihotspot

Install FreeRadius with Web Based Management Daloradius on CentOS/RHEL, Debian, Ubuntu

How to install Radius Manager 4 in Ubuntu Server 13.04 (with troubleshooting)

Install FreeRadius V3 CentOS 7

http://linux.xvx.cz/2010/03/debian-wi-fi-hotspot-using-coovachilli.html

http://blog.saitov.me/2015/08/install-freeradius-v3-on-centos-7.html

http://andrey.org/802-1x-wi-fi-ethernet-radius/

WPA2-Enterprise, или правильный подход к безопасности Wi-Fi сети

Centralized Logins Using LDAP and RADIUS

Настройка LEAP-аутентификации для авторизации WiFi-пользователей с использованием Radius-сервера (radius cisco auth wifi leap linux debian)

http://www.lissyara.su/articles/freebsd/security/wpa2_radius+eap-tls_eap-peap/

http://www.letmefix-it.com/2016/07/20/radius-server-setup-for-wireless-clients-dynamic-vlan/

https://blog.khophi.co/radius-server-inside-daloradius-nginx-dd-wrt-captive-portal-linksys-chillispot/

100% Works Ubuntu 12.04 LTS + Freeradius + Coova-Chill + daloRADIUS

https://habrahabr.ru/post/312948/

https://habrahabr.ru/post/327166/

1
16706
3