Ключевые слова:linux, radius, ppp, getty, mysql, dialup, dial-in, (найти похожие документы)
From: Алекс Б.Юдкин <yudkin_alex@mail.ru.>
Newsgroups: email
Date: Mon, 4 Apr 2004 18:21:07 +0000 (UTC)
Subject: Dialup сервера с пользователями в MySQL и аутентификацией через Radius
Ну вот, решился написать мануал по настройке связки FreeRADIUS + MySQL +
PPP + Mgetty в ALT Linux.
И так. Для начала надо все это дело поставить:
[root@mustdie root]# apt-get install mgetty
[root@mustdie root]# apt-get install apache
[root@mustdie root]# apt-get install php
[root@mustdie root]# apt-get install MySQL
[root@mustdie root]# apt-get install phpMyAdmin
[root@mustdie root]# apt-get install freeradius
[root@mustdie root]# apt-get install freeradius-mysql
PPP с поддержкой радиуса установится в зависимостях freeradius.
А про общюю настройку apache, phpMyAdmin и MySQL я не буду говорить :-ь
На том-же opennet.ru куча доков по ним.
Далее конфигурируем софт по отдельности.
Mgetty
В каталоге /etc/mgetty+sendfax видим три файла: dialin.config,
login.config, mgetty.config. Первый (dialin.config) не трогаем, там все
должно быть закоментированно. В файле login.config прописываем так, это
позволит mgetty запускать демона pppd, в случае получения кода ppp
(типа ~^?}#@!}! ), с параметрами, взятами из файла /etc/ppp/options.dialin :
/AutoPPP/ - a_ppp /usr/sbin/pppd file /etc/ppp/options.dialin
Теперь надо создать юзера a_ppp, от имени которого будет запускаться
ppp-демон:
[root@mustdie /]# adduser -d /dev/null -s /dev/null a_ppp
В файле mgetty.config прописываем порты и скорости модемов, в моем
случае - порта и модема :) :
modem-type data # говорим что хотим только дату, не факсы и не голос.
data-only y
debug 4 # установка уровня отладки
speed 38400 # установка скорости (порта?)
port ttyS1 # номер порта, к которому подключем модем
Прописываем mgetty в /etc/inittab :
d5:3:respawn:/sbin/mgetty -n 2 ttyS1
где d5 - id процесса, 3 - любое число, respawn - говорит чтобы INIT
перезапускала процесс после падения (выхода) последнего.
Коммандуем:
[root@mustdie etc]# kill -1 1
И смотрим лампочки на модеме, если таковые имеются. Если загарается TR,
в моем, как я говорил, случае, то все должно быть ОК, если нет, то
смотрим логи и орфографичиские ошибки в конфигах.
PPPD
Идем в каталог /etc/ppp создаем файлик options.dialin:
asyncmap 0
auth
crtscts
-detach
lock
login
modem
-chap
+pap
mtu 576
mru 576
noipx
plugin radius.so #подключаем радиус
plugin radattr.so #подключаем радиус
10.0.0.1: #установка локального ip, в моем случае это
# 10.0.0.1 - ip сервера, а #после двоеточия идет
# ip подключившекося к нам, его [ip адрес]
# выдает радиус, но об этом позже.
netmask 255.0.0.0
ms-dns 10.0.0.1 #адрес DNS сервера
domain mustdie.org #домен
Сохраняем, радуемся, выпиваем кружечку пива, радуемся, садимся за комп
дальше писать конфиги.
FreeRADIUS
Конфиги радиуса ищем в /etc/raddb. Не пугаемся обилия файлов, нам нужны
только несколько штук из всех.
Самый главный из них, конечно, radiusd.conf:
prefix = /usr
exec_prefix = ${prefix}
sysconfdir = /etc
localstatedir = /var
sbindir = ${exec_prefix}/sbin
logdir = ${localstatedir}/log/radius
raddbdir = ${sysconfdir}/raddb
radacctdir = ${logdir}/radacct
# Месторасположение конфигурационных и лог файлов.
confdir = ${raddbdir}
run_dir = ${localstatedir}/run/radiusd
# Каталог с подгружаемыми модулями.
libdir = ${exec_prefix}/lib
# Месторасположение pid-файла. Содержащего идентификатор процесса.
pidfile = ${run_dir}/radiusd.pid
# Имя пользователя и группа от которых запускается FreeRADIUS
user = radius
group = radius
# Максимальное время (в секундах) используемое для обработки запроса.
max_request_time = 30
# Удалить запросы которые обрабатываются более чем max_request_time
delete_blocked_requests = no
# Время ожидания (в секундах) перед очисткой reply запроса отправленного NAS.
cleanup_delay = 5
# Максимальное количество запросов хранимых сервером. Это число должно быть равно
# количеству клиентов помноженному на 256.
# К примеру для четырех клиентов оно будет 1024.
max_requests = 5120
# Закрепить за ip адресом. По умолчанию RADIUS сервер при старте принимает
# запросы со всех ip адресов.
bind_address = *
# Закрепить за FreeRADIUS конкретный port. Если указан ноль,
# то значение берется из /etc/services
port = 0
# Запретить/разрешить ip адреса в dns имена.
# Включение этой опции может сильно снизить производительность.
hostname_lookups = no
# Создавать/несоздавать отладочные файлы при падении сервера.
allow_core_dumps = no
# Разрешить использование регулярных выражений.
regular_expressions = yes
extended_expressions = yes
# Записывать полный User-Name аттрибут если найден в запросе.
log_stripped_names = no
# Записывать в лог попытки авторизации.
log_auth = yes
# Записывать в логи пароли при авторизации.
# log_auth_badpass - не корректные пароли
# log_auth_goodpass - корректные пароли
log_auth_badpass = yes
log_auth_goodpass = no
# Включить/выключить коллизию пользователей.
usercollide = no
# конвертировать логин и/или пароль до или после авторизации.
lower_user = no
lower_pass = no
# удалить пробелы в логине и/или пароле.
nospace_user = no
nospace_pass = no
# настройки безопасности от возможных DoS аттак.
security {
# Максимальное допустимое количество аттрибутов в RADIUS пакете.
max_attributes = 200
# Задержка (в секундах) перед отправкой Access-Reject пакета.
reject_delay = 1
# Не отвечать на запросы Status-Server
status_server = no
}
# Конфигрурация клиентов RADIUS сервера.
# Описывается в отдельном файле.
$INCLUDE ${confdir}/clients.conf
# Отключить snmp поддержку.
snmp=no
# Настрока пула процессов.
thread pool {
# количество первоначально запущенных процессов.
start_servers = 5
# Максимально возможное количество процессов.
max_servers = 32
# Динамическая регулировка количества процессов.
min_spare_servers = 3
max_spare_servers = 10
# Количество принимаемых запросов процессом. МОжет помочь при утечках памяти в
# RADIUS сервере. Если выставить 300, процессы будут периодически перегружаться
# для уборки мусора.
max_requests_per_server = 0
}
# Секция конфигурации динамических модулей.
modules {
# Модуль PAP авторизации.
# Необходим для обработки запросов с PAP авторизацией.
# encryption_scheme указывает в каком виде хранятся пароли.
# clear - подразумевает в открытом виде.
pap {
encryption_scheme = clear
}
# Модуль CHAP авторизации.
# Необходим для обработки запросов с CHAP авторизацией.
# authtype подразумевает обработку запросов только с аттрибутом Auth-Type=CHAP
chap {
authtype = CHAP
}
# Модуль преобработки запросов.
# Т.е. перед авторизацией пакета.
preprocess {
# huntgroups - хинт группы см. файл huntgoups.
# hints - хинты.
huntgroups = ${confdir}/huntgroups
hints = ${confdir}/hints
# Обработка Cisco VSA.
with_cisco_vsa_hack = no
}
# Модуль Microsoft CHAP авторизации.
# Поддерживает так же еще и Microsoft CHAP v2
# authtype подразумевает обработку запросов только с аттрибутом Auth-Type=MS-CHAP
# use_mppe = no указывает на отсутствие компресии VPN туннеля.
mschap {
authtype = MS-CHAP
use_mppe = no
}
# Модуль записей Livingston RADIUS типа.
# usersfile содержит авторизационные записи пользователей.
# Рекомендуется использовать только для тестов и выставления значений по умолчанию.
# acctusersfile содержит пользователей подлежащих учету (аккаунтингу).
# compat - совместимость. При использовании файлов только FreeRADIUS можно отключить.
files {
usersfile = ${confdir}/users
compat = no
}
# Запись детального лога аккаунтинговых пакетов.
detail {
detailfile = ${radacctdir}/%{Client-IP-Address}/detail-%Y%m%d
detailperm = 0600
}
# Запись детального лога пакетов авторизации.
detail auth_log {
detailfile = ${radacctdir}/%{Client-IP-Address}/auth-detail-%Y%m%d
detailperm = 0600
}
# Запись детального лога reply пакетов.
detail reply_log {
detailfile = ${radacctdir}/%{Client-IP-Address}/reply-detail-%Y%m%d
detailperm = 0600
}
# Создать уникальный ключ для аккаунтинг сессии.
# Многие NAS повторно используют Acct-Session-ID.
# key перечисление аттрибутов для генерации Acct-Session-ID
acct_unique {
key = "User-Name, Acct-Session-Id, NAS-IP-Address, Client-IP-Address, NAS-Port-Id"
}
# Конфигурация авторизации и аккаунтинга посредством СУБД
# содержится в отдельном файле cakesql.conf
$INCLUDE ${confdir}/sql.conf
}
# Авторизация
# сначала идет пакет передается в preprocess
# где может быть модифицирован.
# Далее chap mschap обрабатывают chap и mschap авторизацию.
authorize {
preprocess
chap
mschap
# Не ведем логи пакетов авторизации.
# auth_log
files
mysql
}
# Аунтификация
# Секция содержит модули доступные, для аунтификации.
authenticate {
Auth-Type PAP {
pap
}
Auth-Type CHAP {
chap
}
Auth-Type MS-CHAP {
mschap
}
}
# Преобразование аккаунтинговых пакетов.
preacct {
preprocess
}
# Секция ведения аккаунтинга.
accounting {
# Создание Acct-Session-Id если ваш NAS генрит их вполне корректно можете убрать.
acct_unique
# Не создаем detail лог.
detail
# Помещать аккаунтинговые пакеты в СУБД
mysql
}
# Секция ведения логов reply-пакетов.
post-auth {
# Не ведем детальный лог репли пакетов.
reply_log
}
Файл sql.conf ,там много всего но нам нужны первые строчки типа см. ниже,
задаем только хост, логин, пароль к базе данных
sql mysql {
# Database type
# Current supported are: rlm_sql_mysql, rlm_sql_postgresql,
# rlm_sql_iodbc, rlm_sql_oracle, rlm_sql_unixodbc, rlm_sql_freetds
driver = "rlm_sql_mysql"
# Connect info
server = "localhost"
login = "root"
password = "your-root-password-for-mysql"
# Database table configuration
radius_db = "radius"
Файл naslist:
localhost local other
Остальное оставляем как есть.
MySQL
Про начальную настройку MySQL-в-общем говорить не буду, мануалов и без этого хватает.
А вот про настройку для радиуса - пожайлусто.
В пакете с радиусом идет дамп базы для него:
/usr/share/doc/freeradius-mysql-1.0.2/db_mysql.sql
Но сначала надо создать базу, для этого запускаем phpMyAdmin, создаем
базу radius и, заходим туда, находим вкладку SQL - заходим, видим
бооольшое текстовое поле, а под ним кнопочка Choose, жмем ее и тыкаем
его носом в файлик с дампом (см. выше) и жмем "Пошел". Если
все прошло успешно, получим отчет и слова об успешном окончании.
Далее настраиваем dialup_admin из пакета радиуса, он лежит здесь:
/usr/share/doc/freeradius-1.0.2/
Там все хорошо описанно, см. файл README. Так что повтаряться не буду.
Совет: на все файлы диалап-админа надо поставить chmod 777, иначе ничего
не будет работать.
Теперь создаем пользователей из dialup-admin'а.
Запуск всего этого :-), ну в общем всего этого.
[root@mustdie /]# service httpd restart
В отдельной консоле запускаем MySQL-Server:
[root@mustdie /]# mysqld -u root
Снова возвращаемся в прежнюю консоль и продолжаем:
[root@mustdie /]# service radiusd restart
Если все прошло без ошибок и все работает, то можно проверить
работоспособность радиуса, для этого:
[root@mustdie /]# radlogin
($Id: radlogin.c,v 1.1 2002/01/22 16:03:04 dfs Exp $)
-----------------------------------------------------
Linux 2.4.22-std-up-alt17 (mustdie.org) (port 2)
-----------------------------------------------------
login: bbs
Password:
RADIUS: Hello bbs. 2005-04-01 01:43:44 2005-04-01-01.43.44.000000
This is the dummy login.radius script. If you want that this script
does something useful you'll have to replace it.
The following RADIUS environment variables are set:
RADIUS_FRAMED_IP_ADDRESS=10.0.0.3
RADIUS_FRAMED_IP_NETMASK=255.0.0.0
RADIUS_FRAMED_PROTOCOL=PPP
RADIUS_FRAMED_ROUTE='10.0.0.0/24 1'
RADIUS_REPLY_MESSAGE='Hello bbs. 2005-04-01 01:43:44 2005-04-01-01.43.44.000000'
RADIUS_SERVICE_TYPE=Framed-User
RADIUS_SESSION_TIMEOUT=1800
RADIUS_USER_NAME=bbs
Bye, bye.
Я использовал юзера bbs, вы можете пробовать бругие, предварительно
создав их через диалап-админ. Вы должны увидеть что-то подобное, только
со своими параметрами. Если такое случилось - то ура! Идем в магазин,
покупаем ящик пива, идем домой, завем друга, хвастаемся ему успехами в
изучении Linux и распиваем вместе этот ящик пива. Отсыпаемся :-). С
утра снова за работу.
С наилучшими пожеланиями в познании проффессии сисадмина Алекс Б.Юдкин
Все возражения и предложения на yudkin_alex@mail.ru.
Если уж хранить всё в mysql, то почему не хранить там же и nas-ы, в таблице nas? Правда, похоже dialup_admin смотрит только в файл, а не в базу при поиске nas.
Кстати, совет поставить 777 на dialup_admin-а весьма опрометчив, по-моему. Всё работает и без этого, главное правильно раздать права веб-серверу.
А ещё вопрос к знающим людям, вместе с dialup admin поставляется скрипт log_badlogins, который слушает radius.log и пишет логи неудачных попыток соединения в таблицу radacct или куда-нибудь ещё. Почему этого не делает сам радиус-сервер? Ведь удачные он пишет не только в логи, но и в базу.
>где d5 - id процесса, 3 - любое число, respawn - говорит чтобы INIT
>перезапускала процесс после падения (выхода) последнего.
3 - это не любое число, а уровень работы системы (runlevel)
в данном случае mgetty будет запускаться, когда система работает на 3 уровне. здесь желательно поставить не просто 3, а 2345
>Коммандуем:
> [root@mustdie etc]# kill -1 1
чтобы перечитать inittab нужно выполнить команду telinit q
# Максимальное количество запросов хранимых сервером. Это число должно быть равно
# количеству клиентов помноженному на 256.
# К примеру для четырех клиентов оно будет 1024.
max_requests = 5120
что за клиент имеется в виду, авторизуемый пользователь или nas-сервер