- Мой блог (Дмитрий Харций) - https://wifi-hotspot.zp.ua/wp -

RADIUS, MySQL и парочка “веб-морд” ко всему этому …

Приспичило на днях мне RADIUS установить. На вопрос о том, «Зачем?», отвечу — именно с этого я начал, когда захотел создать себе хотспот [1]. Но пока что рассмотрим вопрос «Как я это делал, и с какими трудностями при установке боролся»…

1. Ставим FreeRADIUS.

Итак, начнем с «вводных». На «сервере» моем установлена Mandriva (на данном этапе — версии 2008.1), репозитории её давным-давно настроены, а RADIUS мне приспичило настроить именно с использованием базы данных MySQL. Кстати, Apache, PHP5 и MySQL у меня тоже уже давным-давно были и установлены и настроены. Чтож, начинаем ставить RADIUS. Ставить будем не из исходников, которые при желании можно скачать с сайта FreeRADIUS [2], а из репозитория. Запускаем консоль от имени администратора (root) и вводим следующую команду:

urpmi freeradius freeradius-mysql libfreeradius1

Дожидаемся окончания успешной установки. Этим самым мы устанавливаем три пакета: сам сервер FreeRADIUS, модуль поддержки MySQL для FreeRADIUS, а также «базовый» набор библиотек. Просматривая список пакетов, которые можно установить из официальных репозиториев Mandriva, в имени которых присутствует слово «RADIUS», я выбрал еще парочку кандидатов для установки. Все в той же консоли от имени root вводим следующую команду:

urpmi freeradius-web libfreeradius-devel

Что это было такое? Пакет «libfreeradius-devel» — это набор дополнительных библиотек для разработчиков. Не уверен, что мне он так уж сильно будет нужен, но как говорится возьмем «на всякий случай». А вот «freeradius-web» — это уже один из тех двух веб-интерфейсов для управления RADIUS-сервером, установку которых я и планирую описать тут. На самом деле программа называется Dialup Admin, при желании, почитать о ней можно тут [3], а скачать (если кому-то не нравится ставить из репозитория) — тут [4].

Итак, пять пакетов мы скачали и установили. Не стоит даже и надеяться, что все это уже работает! Пока что мы только готовим ту «глыбу», из которой потом высечем нашу «статую». И для этого нам понадобится еще кое что.

2. Ставим daloRADIUS.

Вопросов собственно, возникает два:

  1. Почему, не доделав одно, мы перескакиваем на другое?
  2. И что это вообще такое и зачем оно нам нужно?

Отвечу сначала на второй вопрос. daloRADIUS — это второй веб-интерфейс для управления все тем же RADIUS-сервером. Зачем второй, если один уже есть? Честно говоря, поначалу у меня Dialup Admin попросту не запустился, и я быстренько «нагуглил» другой. А потом, когда запустил их оба, то решил тут описать все это сразу. А уж кому что больше нравится — решайте сами. Кстати, daloRADIUS по сравнению с Dialup Admin — более новый и более функционально насыщенный. Ну и справедливости ради должен отметить — в конечном итоге, установив и попробовав оба эти веб-интерфейса, я не нашел их достаточно удобными инструментами для управления хотспотом [1]. Но об этом ниже в «Выводах»…

А теперь о том, зачем нам понадобилось устанавливать daloRADIUS до того, как завершено конфигурирование «связки» FreeRADIUS и MySQL. Дело в том, что установка FreeRADIUS с модулем поддержки MySQL еще не означает автоматического создания требуемой базы данных. Как я и говорил, это только «глыба», над которой нам еще предстоит поработать ручками! Но возвращаясь к базе — после установки 5 пакетов, описанных в первой части, у нас на компьютере только того и появляется, что всего-лишь … скрипт для создания в MySQL той самой требующейся для работы FreeRADIUS базы данных. В принципе, ничто не мешает сразу же взять этот скрипт и создать необходимую базу. И так и стоит поступить, только если Вы не планируете … установить daloRADIUS. Дело в том, что с ним также поставляется скрипт создания базы данных MySQL для FreeRADIUS. Но, в отличие от скрипта, поставляемого с самим FreeRADIUS-сервером, скрипт, идущий в комплекте с daloRADIUS, создает более объемную базу, добавляя в нее кроме базовых еще дополнительные таблицы и поля, требующиеся для его собственной работы. А с другой стороны, если изначально создать базу при помощи скрипта «от FreeRADIUS», то впоследствии, при выполнении скрипта «от daloRADIUS», первую базу придется снести. Так зачем дважды делать одно и то же? Уговорил?

Так как в репозиториях Mandriva данной программы нет, идем на сайт daloRADIUS [5]или же на страницу проекта на SourceForge.net [6]. В любом случае — качаем архив с программой. Собственно, сама установка сводится к нескольким простым действиям:

Переходим в ту папку, куда сохранили скачанный архив с программой и выполняем команду:

tar -zxvf имя_архива.tar.gz

Примечания по копированию. Во первых, результатом распаковки реального архива будет папка с именем наподобие такого — daloradius-0.9-8. Лично я для удобства папку эту сразу же переименовал в просто daloradius. А во вторых, папка, в которой находятся документы веб-сервера Apache в моем случае (так настроено), называется /var/www/html, и именно это и показано в приведенной ниже команде. А теперь вернемся к тому факту, что мы только что (командой приведенной выше) распаковали архив с программой. Находясь там же, выполняем следующую команду:

cp daloradius/ /var/www/html -R

В моем случае, это пользователь apache из группы apache. Чтобы сменить владельца, выполняем команду:

chown apache:apache /var/www/html/daloradius -R

Для этого выполняем команду:

chmod 644 /var/www/html/daloradius/library/daloradius.conf.php

На этом предварительную установку daloRADIUS можно считать законченой.

3. Подготавливаем MySQL (создаем базы).

Ну вот и добрались мы до «высечения» нашей «статуи»!.. Собственно, до настройки взаимодействия FreeRADIUS с базой данных MySQL нужно эту самую базу создать. Как я писал уже выше, на данном этапе у нас есть только скрипты для ее создания. И из двух возможных «претендентов» лично я выбрал скрипт, поставлявшийся в комплекте с daloRADIUS. Вот его и будем сейчас «юзать». В приведенном ниже примере я использую имя базы «radius_db«, имя пользователя для данной базы — «radius_user» и пароль «radius_passwd» для доступа данного пользователя к данной базе. Вам же я рекомендую выбрать свои значения и подставлять их в соответствующие команды. Предполагается, что мы по-прежнему находимся в консоли от имени root-а. Запускаем команду:

mysql -uroot -p

Если попросит, вводим пароль root-а для MySQL. (Если же не попросит, то совет на будущее — установить этот самый пароль в целях повышения безопасности). После успешного ввода пароля мы попадаем в консоль MySQL. На всякий случай напомню, что все команды в ней должны заканчиваться точкой с запятой (;). Создаем базу даных:

CREATE DATABASE radius_db;

Переходим в только что созданную базу данных:

use radius_db;

Запускаем тот самый скрипт, который и создаст в этой базе данных всё необходимое:

source /var/www/html/daloradius/contrib/db/fr2-mysql-daloradius-and-freeradius.sql;

Следуе учесть, что во первых, вся эта команда должна быть введена одной строкой, а во вторых — в ней указан путь к скрипту создания базы с учетом моего расположения файлов daloRADIUS. При необходимости скорректируйте путь.

После того, как база создана (мы получили ответ наподобие «Query OK, ХХХ rows affected…»), создаем пользователя и назначаем ему права на данную базу данных:

GRANT ALL PRIVILEGES ON radius_db.* TO 'radius_user'@'localhost' IDENTIFIED BY 'radius_passwd';

В данном случае следует обратить внимание на слово «localhost», означающее, что и база данных MySQL и сервер FreeRADIUS установлены на одном компьютере. В противном случае имя компьютера в приведенной команде нужно будет изменить.

Теперь наша база готова, но … только для случая использования веб-интерфейса daloRADIUS. Если же планируется использовать Dialup Admin, то нам необходимо добавить в базу еще несколько таблиц. Необходимое примечание — после установки пакета freeradius-web файлы программы Dialup Admin на моем «сервере» расположились в папке /var/www/freeradius-web, а документация к ней — в папке /usr/share/doc/freeradius-web/sql. В папке с документацией, в подпапке /sql/mysql находятся четыре скрипта для создания недостающих для работы Dialup Admin дополнительных таблиц. Если Вы еще не вышли из консоли MySQL, то просто вводим приведенные ниже четыре команды. Если же вышли, то сначала возвращаемся в консоль MySQL командой «mysql -uroot -p» и выбираем базу командой «use radius_db;«. А уже потом создаем 4 новые таблицы — «badusers»

source /usr/share/doc/freeradius-web/sql/mysql/badusers.sql;

«userinfo»:

source /usr/share/doc/freeradius-web/sql/mysql/userinfo.sql;

«mtotacct:»

source /usr/share/doc/freeradius-web/sql/mysql/mtotacct.sql;

«totacct»:

source /usr/share/doc/freeradius-web/sql/mysql/totacct.sql;

После того, как успешно созданы и эти 4 таблицы, можно выйти из консоли MySQL командой «exit«. Но, в моем случае попытка создания данных 4 таблиц привела лишь к сообщениям об ошибках. «Удачным» примером может служить скрипт для создания таблицы badusers (badusers.sql). При попытке его запуска MySQL выдал два сообщения об ошибках — «ERROR 1067 (42000): Invalid default value for ‘id’» и «ERROR 1072 (42000): Key column ‘Date’ doesn’t exist in table«. Пришлось редактировать вручную.

Вот так скрипт выглядел изначально:

#
# Table structure for table 'badusers'
#
CREATE TABLE badusers (
  id int(10) DEFAULT '0' NOT NULL auto_increment,
  UserName varchar(30),
  IncidentDate	datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
  Reason varchar(200),
  Admin varchar(30) DEFAULT '-',
  PRIMARY KEY (id),
  KEY UserName (UserName),
  KEY Date (Date)
);

А вот так — после правки:

#
# Table structure for table 'badusers'
#
CREATE TABLE badusers (
  id int(10) DEFAULT NULL NOT NULL auto_increment,
  UserName varchar(30),
  IncidentDate	datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
  Reason varchar(200),
  Admin varchar(30) DEFAULT '-',
  PRIMARY KEY (id),
  KEY UserName (UserName),
  KEY IncidentDate (IncidentDate)
);

Для наглядности различия выделены красным. Как мы видим, для исправления первой ошибки (1067) я просто заменил числовой ноль (0) на значение «NULL». После этого сообщение о неверном «умолчательном» значении дл колонки «id» ушло. Второе сообщение об ошибке (1072) говорит нам, что мы пытаемся сделать ключевым невуществующий в таблице (!!!) столбец «Date». И это действительно так! Взглянувши на структуру таблицы, мы видим, что там из дат есть только столбец «IncidentDate». Вот именно его я и сделал ключевым…  Подобная правка может потребоваться и для трех остальных скриптов. После правки повторно запускаем создание 4 дополнительных таблиц. Получив ответ вида «Query OK, ХХХ rows affected…» на все четыре команды по созданию доп. таблиц, выходим из консоли MySQL командой «exit«.

4. Настраиваем FreeRADIUS на использование базы MySQL.

В самом начале мы установили FreeRADIUS. Помните? И все это время он тихонько работал! Не верите? Введите команду:

ps -e|grep radiusd

Нюанс в том, что пока что наш FreeRADIUS не использует базу MySQL. Чтож, будем «принуждать». Для этого необходимо выполнить несколько действий. Во первых, нужно отредактировать файл /etc/raddb/sql.conf. В нем нужно найти указанные строки (они не будут идти подряд, как в примере ниже) и присвоить им следующие значения:

	database = "mysql"
	server = "localhost"
	login = "radius_user"
	password = "radius_passwd"
	radius_db = "radius_db"
	usergroup_table = "radusergroup"
	readclients = yes

Это были параметры, используемые FreeRADIUS при подключении к базе MySQL. Важно, чтобы имя базы, пользователя и пароль, вписанные нами в файл /etc/raddb/sql.conf, совпадали с теми, которые мы ранее использовали при создании базы в MySQL. Следующим шагом мы редактируем файл /etc/raddb/radiusd.conf. В нем нам нужно найти и раскомментировать (убрать символ #) строку:

	$INCLUDE sql.conf

Этим самым мы «глобально» разрешаем FreeRADIUS использовать в своей работе sql-базу данных (параметры которой мы только что описали в файле /etc/raddb/sql.conf). И напоследок нужно отредактировать файл /etc/raddb/sites-available/default. Файл сам по себе не маленький, но придется постараться. В нем нужно найти секцию authorize{} и в ней раскомментировать строку, содержащую директиву «sql». Это позволяет FreeRADIUS искать записи о пользователях в sql-базе данных при их авторизации. Также, нужно найти секцию accounting{} и в ней также раскомментировать строку «sql». Это вынуждвет FreeRADIUS свои записи о подсчете трафика также хранить в sql-базе данных.

Все. Настройка взаимодействия FreeRADIUS с базой данных MySQL завершена. Чтобы внесенные нами изменения вступили в силу, сервер FreeRADIUS нужно перезапустить. Мы же все еще в консоли с правами root-а? Тогда просто вводим команду:

/etc/init.d/radiusd restart

Если все хорошо, то сначала мы прочтем «ОК» по поводу остановки сервера freeradius, а потом — «ОК» по поводу его запуска. С этого момента «связка» FreeRADIUS с базой данных MySQL работает, и нам пора это проверить…

5. Проверка «связки» FreeRADIUS + MySQL

Чтобы убедиться, что наш сервер работает и «общается» с базой данных, выполним следующее. Сначала войдем в консоль MySQL:

mysql -uroot -p

Выберем базу данных :

use radius_db;

Вставим в нее новую запись (в таблицу «radcheck» про пользователя «sqltest» и его пароль «testpwd»):

INSERT INTO radcheck (UserName, Attribute, Value) VALUES ('sqltest', 'Password', 'testpwd');

(По сути, мы только что «по быстрому» завели в нашем RADIUS-сервере тестового пользователя). На всякий случай проверим, что запись таки была добавлена:

select * from radcheck where UserName='sqltest';

В ответ должна появится псевдографическая таблица, показанная ниже, с записью, удовлетворяющей нашему запросу:

+----+----------+-----------+----+---------+
| id | username | attribute | op | value   |
+----+----------+-----------+----+---------+
|  1 | sqltest  | Password  | == | testpwd |
+----+----------+-----------+----+---------+
1 row in set (0.00 sec)

Если все хорошо, выходим из консоли MySQL:

exit

А теперь пошлем запрос нашему RADIUS-серверу:

radtest sqltest testpwd localhost 1812 testing123

В данном случае служебная программа radtest (предназначенная для проверки сервера RADIUS) посылает запрос на порт 1812 локального (localhost) RADIUS-сервера с просьбой подтвердить авторизацию пользователя с именем “sqltest” и паролем “testpwd“. Ответ сервера выглядит примерно так:

Sending Access-Request of id 136 to 127.0.0.1 port 1812
        User-Name = "sqltest"
        User-Password = "testpwd"
        NAS-IP-Address = 127.0.0.1
        NAS-Port = 1812
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=136, length=20

И нам в нем важна выделенная красным цветом строка “Access-Accept”, которая подтверждает, что клиент “sqltest” принят сервером RADIUS, а значит наша “связка” FreeRADIUS + MySQL работает нормально! Следовательно, пора прикручивать веб-интерфейсы…

6. Настраиваем Dialup Admin

Настройка программы проста и сводится к редактированию всего лишь одного файла конфигурации — /etc/freeradius-web/admin.conf. В нем нужно найти указанные строки (они не обязательно будут идти подряд, как в примере ниже) и присвоить им следующие значения:

sql_type: mysql
sql_server: localhost
sql_port: 3306
sql_username: radius_user
sql_password: radius_passwd
sql_database: radius_db
sql_usergroup_table: radusergroup
sql_debug: false

Важно, чтобы имя базы, имя пользователя и пароль, вписанные нами в файл /etc/freeradius-web/admin.conf, совпадали с теми, которые мы ранее использовали при создании базы в MySQL. Все. Даже перезапускать ничего не нужно. Просто запускаем браузер (любой) и набираем в поле адреса:

http://localhost/freeradius-web/ [7]

7. Настраиваем daloRADIUS.

Подразумевается, что Вы уже установили программу и настроили ее владельца и права доступа, как описано выше в пункте 2 «Ставим daloRADIUS». Для настройки программы необходимо отредактировать всего лишь один файл конфигурации — /var/www/html/daloradius/library/daloradius.conf.php. В нем нужно найти указанные строки (они не обязательно будут идти подряд, как в примере ниже) и присвоить им следующие значения:

$configValues['CONFIG_DB_ENGINE'] = 'mysql';
$configValues['CONFIG_DB_HOST'] = 'localhost';
$configValues['CONFIG_DB_USER'] = 'radius_user';
$configValues['CONFIG_DB_PASS'] = 'radius_passwd';
$configValues['CONFIG_DB_NAME'] = 'radius_db';
$configValues['CONFIG_DB_TBL_RADUSERGROUP'] = 'radusergroup';
$configValues['CONFIG_PATH_DALO_VARIABLE_DATA'] = '/var/www/html/daloradius/var';
$configValues['CONFIG_LANG'] = 'ru';

Важно, чтобы имя базы, имя пользователя и пароль, вписанные нами в файл /var/www/html/daloradius/library/daloradius.conf.php, совпадали с теми, которые мы ранее использовали при создании базы в MySQL. Программа готова к запуску. Просто запускаем браузер (любой) и набираем в поле адреса:

http://localhost/daloradius/ [7]

Ну вот и все… Ах, ну да —

Выводы

Установив и настроив оба этих интерфейса, я попробовал с их помощью поуправлять своим хотспотом. Но увы, ни один из них не показался мне достаточно функциональным и удобным решением моих нужд. И я был вынужден продолжить поиск веб-интерфейса к хотспоту. В итоге, мой личный выбор пал на программу Easyhotspot [8]. Вот ее возможности меня на тот момент полностью устраивали. В итоге, сначала я перевел ее на русский язык, потом начал процесс постепенной модернизации…

В итоге — предлагаю всем желающим приобрести русифицированный и модернизированный вариант программы Easyhotspot [8] плюс подробнейшее руководство по установке хотспота [9]. Подробности здесь [8].

Почитать еще:

  1. http://daloradius.wiki.sourceforge.net/ [10]
  2. http://wiki.freeradius.org/ [11] и в том числе http://wiki.freeradius.org/SQL_HOWTO [12]
  3. http://www.howtoforge.com/authentication-authorization-and-accounting-with-freeradius-and-mysql-backend-and-webbased-management-with-daloradius [13]

Почитать все мои заметки о хотспотах:

  1. https://wifi-hotspot.zp.ua/wp/category/xotspot/ [14]