zabika.ru   1 2

Ход работы

  1. Установить необходимые пакеты


В состав необходимых пакетов входят:

  • postgresql

  • freeradius

  • а также все пакеты установленные и настроенные в ходе первой лабораторной работы

Данные пакеты уже могут быть установлены в системе, в таком случае данный этап работы является не обязательным. В противном случае и в случае необходимости обновит уже установленные версии пакетов их необходимо загрузить из сети и установить. Существует несколько способов установки пакетов в систему: при помощи менеджера пакетов используемого дистрибутива Linuz (apt, yum и т.д.) (загрузка и установка будут происходить автоматически); загрузка и установка уже собранного пакета для используемого дистрибутива Linux (deb, rpm и т.д.); загрузка исходного кода пакета с последующей его сборкой и установкой.

Рассмотрим наиболее универсальный вариант – установка пакетов из исходных кодов.

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

    1. Загрузите пакеты

Пакеты необходимые для лабораторной работы можно загрузить с адреса ftp://kid/pub/LECTURES/5KURS/ProectKSM-labs/lab2-radius/, а именно postgresql-8.1.4.tar.bz2 и freeradius-1.1.3.tar.bz2 .

    1. Разархивируйте пакеты

Разархивирование можно сделать командами:
$ tar -jvxf postgresql-8.1.4.tar.bz2

$ tar -jvxf freeradius-1.1.3.tar.bz2
В результате разархивации должны быть созданы одноимённые с именами пакетов папки без префикса tar.bz2.

    1. Установите пакет postgresql

Войдите в корневую папку пакета postgresql-8.1.4. Для конфигурирования, компилирования и установки выполните следующие команды:

$ ./configure

$ gmake

$ su

# gmake install

# adduser postgres

# mkdir /usr/local/pgsql/data

# chown postgres /usr/local/pgsql/data

# su - postgres

$ /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data

$ /usr/local/pgsql/bin/postmaster \

-D /usr/local/pgsql/data >logfile 2>&1 &

$ /usr/local/pgsql/bin/createdb test

$ /usr/local/pgsql/bin/psql test
Более детальную инструкцию по установке postgresql из исходных кодов можно получить в файле postgresql-8.1.4/INSTALL.

Однако данный пакет обычно поставляется в стабильной сборке в самом дистрибутиве. Для функциональности требуемой FreeRADIUS-ом возможно примененеи и более старых версий postgresql.


    1. Установите пакет freeradius

Войдите в корневую папку пакета freeradius-1.1.3. Соберите пакет freeradius, это можно сделать следующими командами:
$ ./configure

$ make

$ su

# make install
Более детальную инструкцию по установке freeradius из исходных кодов можно получить в файле freeradius-1.1.3/INSTALL.

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


  1. Создание БД для модуля rlm_sql/rlm_sql_postresql сервера FreeRADIUS

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

Создание пользователя БД PostgreSQL и самой БД можно сделать двумя способами: SQL операторами CREATE USER и CREATE DATABASE; командами createuser и createdb. Как один так и другой способ могут быть инициированы только пользователем БД имеющем права на создание пользователей и создание БД. По умолчанию таким пользователем является postres. Таким образом данные действия можно сделать следущим образом:
# su postgres

$ creatuser -E -P freeradiususer


Введите пароль для нового пользователя:fru

Введите снова:fru

Разрешить новому пользователю создавать

базы данных? (y/n) n

Разрешить новому пользователю создавать

пользователей? (y/n) n

$ createdb -O freeradiususer freeradiusdb
Так как в схеме БД используемой модулем rlm_sql/rlm_sql_postgresql применяются хранимые процедуры то в созданной БД необходимо объявить язык plpgsql, это можно сделать следующей командой (также это действие возможно и с помощью SQL оператора CREATE LANGUAGE):
$ createlang plpgsql freeradiusdb
По умолчанию проинициализированный репозитарий БД настрое так что аутентификация всех пользователей и БД производиться методом ident sameuser (соответствие пользователей PostgreSQL, владельца БД и пользователя ОС системы). Поэтому в конфигурационный файл методов аутентификации клиентов PosgtreSQL (по умолчанию /var/lib/pgsql/data/pg_hba.conf), необходимо добавить следующую строчку (она должна предшествовать общим объявлениям):
host freeradiusdb freeradiususer 127.0.0.1/32 password
И перезапустить сервер БД PostgreSQL.

Завершающим этапом создание БД в сервере БД PostgreSQL для модуля rlm_sql/rlm_sql_postresql сервера FreeRADIUS, является создание таблиц, хранимых процедур, триггеров и т.д. Модуль rlm_sql позволяет самостоятельно придумать и создать схему БД, заполнить соответствующие поля запросов в конфигурационном файле модуля, и использовать модуль. Однако данный модуль также предоставляет стандартные схемы БД и конфигурационные файлы для наиболее общераспространённых серверов БД, таких как oraclesql, posgtresql, mysql. Схемы БД обычно расположены в документации к пакету FreeRADIUS, директори usr/share/doc/freeradius-1.x.x/, файлы db_oracle.sql, db_postgresql.sql, db_mysql.sql. Конфигурационные файлы в директории /etc/raddb/, файлы oraclesql.conf, postgresql.conf, и т.д.

Инициализацию созданной БД стандартной схемой БД для модуля rlm_sql/rlm_sql_postgresql можно сделать следующей командой:

$ psql -h 127.0.0.1

-f /usr/share/doc/freeradius-1.x.x/db_postgresql.sql

freeradiusdb freeradiususer


  1. Добавление пользователей в созданную БД

Стандартная схема БД для модуля rlm_sql/rlm_sql_postgresql отображает структуру конфигурационного файла сервера FreeRADIUS "users". Таким образом для того что бы понять какие данные необходимо добавить в БД, можно изучить man 5 users, и примеры приводимые в файле users.

Для добавления простейшего типа пользователя, где имя пользователя сопоставляется с его паролем, без проверки типа RADIUS пакета и без добавления дополнительных атрибутов ответного пакета, можно выполнить следующий SQL оператор:
$ psql -h 127.0.0.1 freeradiusdb freeradiususer

freeradiusdb=> INSERT INTO radcheck

freeradiusdb-> (UserName,Attribute,op,Value)

freeradiusdb-> VALUES

freeradiusdb-> ('testuser',

freeradiusdb-> 'User-Password','==','testpasswd');


  1. Конфигурирование сервера FreeRADIUS

При установки пакета FreeRADIUS также устанавливаются его конфигурационные файлы по умолчанию (обычно это директория /etc/raddb/), если в устанавливаемой директории конфигурационные файлы уже присутствуют (при обновлении пакета) они не перетираются, при этом выводиться предупреждение о файлах которые не были установлены.

Основным конфигурационным файлом сервера FreeRADIUS является /etc/raddb/radiusd.conf, указать другой путь к данному конфигурационному файлу можно через параметры запуска radiusd. Описание структуры и параметров данного конфигурационного и модулей сервера FreeRADIUS можно прочитать в соответствующих man страницах (man 5 radiusd.conf и т.д.).

Так как основной конфигурационный файл имеет довольно большие размеры в силу хорошего описания всех его элементов, то приведём его без комментарий, обозначит только те места где в него вносились изменения.

Пример конфигурационного файла radiusd.conf:

##

## radiusd.conf -- Конфигурационный файл сервера FreeRADIUS

##

## http://www.freeradius.org/

## $Id: radiusd.conf.in,v 1.188.2.4 2005/06/11 22:20:40 nbk Exp $

##
# Расположение остальных конфигурационных файлов и

# лог файлов объявляется в этом файле

#

# Также основное конфигурирование модулей может быть

# осуществлено посредством этого файла, через экспортирования

# их в API модулей которые их требуют.

#

# Конфигурационные переменные объявляются здесь в виде ${foo}

# Они являются локальные для этого файла, и не изменяются в течении

# работы сервера.

#

# Переменные пре-запроса имеют вид %{Attribute-Name}, и

# берутся из значения атрибута входящего запроса

# Смотрите 'doc/variables.txt' для более детальной информации.
prefix = /usr

exec_prefix = /usr

sysconfdir = /etc

localstatedir = /var

sbindir = /usr/sbin

logdir = ${localstatedir}/log/radius

raddbdir = ${sysconfdir}/raddb

radacctdir = ${logdir}/radacct
confdir = ${raddbdir}

run_dir = ${localstatedir}/run/radiusd
log_file = ${logdir}/radius.log
libdir = /usr/lib
pidfile = ${run_dir}/radiusd.pid
user = radiusd

group = radiusd
max_request_time = 30
delete_blocked_requests = no
cleanup_delay = 5
max_requests = 1024
bind_address = *
port = 0
hostname_lookups = no
allow_core_dumps = no

regular_expressions = yes


extended_expressions = yes
log_stripped_names = no
log_auth = no
log_auth_badpass = no

log_auth_goodpass = no
usercollide = no
lower_user = no

lower_pass = no
nospace_user = no

nospace_pass = no
checkrad = ${sbindir}/checkrad
# НАСТРОЙКИ БЕЗОПАСТНОСТИ

security {

max_attributes = 200
reject_delay = 1
status_server = no

}
# НАСТРОЙКИ ПРОКСИ

proxy_requests = yes

$INCLUDE ${confdir}/proxy.conf
# НАСТРОЙКИ КЛИЕНТОВ

$INCLUDE ${confdir}/clients.conf
# НАСТРОЙКИ SNMP

snmp = no

$INCLUDE ${confdir}/snmp.conf
# НАСТРОЙКИ ПУЛА ПОТОКОВ

thread pool {

start_servers = 5

max_servers = 32

min_spare_servers = 3

max_spare_servers = 10

max_requests_per_server = 0

}
# НАСТРОЙКИ МОДУЛЕЙ

modules {

pap {

encryption_scheme = crypt

}

chap {

authtype = CHAP

}

pam {

pam_auth = radiusd

}

unix {

cache = no

cache_reload = 600

shadow = /etc/shadow

radwtmp = ${logdir}/radwtmp

}

$INCLUDE ${confdir}/eap.conf

mschap {

authtype = MS-CHAP



# зависит от настройки PPTP сервера POPTOP

# по умаолчанию

### use_mppe = no

use_mppe = yes

}


realm IPASS {

format = prefix

delimiter = "/"

ignore_default = no

ignore_null = no

}

realm suffix {

format = suffix

delimiter = "@"

ignore_default = no

ignore_null = no

}

realm realmpercent {

format = suffix

delimiter = "%"

ignore_default = no

ignore_null = no

}

realm ntdomain {

format = prefix

delimiter = "\\"

ignore_default = no

ignore_null = no

}

checkval {

item-name = Calling-Station-Id

check-name = Calling-Station-Id

data-type = string

}

preprocess {

huntgroups = ${confdir}/huntgroups

hints = ${confdir}/hints

with_ascend_hack = no

ascend_channels_per_line = 23

with_ntdomain_hack = no

with_specialix_jetstream_hack = no

with_cisco_vsa_hack = no

}

files {

usersfile = ${confdir}/users

acctusersfile = ${confdir}/acct_users

preproxy_usersfile = ${confdir}/preproxy_users

compat = no

}

detail {

detailfile = ${radacctdir}/%{Client-IP-Address}/detail-%Y%m%d

detailperm = 0600

}

acct_unique {

key = "User-Name, Acct-Session-Id, NAS-IP-Address, Client-IP-Address, NAS-Port"

}

# Вставить внешний файл настроек SQL модуля.


# Данные настройки вынесены в отдельный файл так как он может быть больших

# рамеров.

# по умолчанию

### $INCLUDE ${confdir}/sql.conf

$INCLUDE ${confdir}/postgresql.conf

radutmp {

filename = ${logdir}/radutmp

username = %{User-Name}

case_sensitive = yes

check_with_nas = yes

perm = 0600

callerid = "yes"

}

radutmp sradutmp {

filename = ${logdir}/sradutmp

perm = 0644

callerid = "no"

}

attr_filter {

attrsfile = ${confdir}/attrs

}

counter daily {

filename = ${raddbdir}/db.daily

key = User-Name

count-attribute = Acct-Session-Time

reset = daily

counter-name = Daily-Session-Time

check-name = Max-Daily-Session

allowed-servicetype = Framed-User

cache-size = 5000

}

always fail {

rcode = fail

}

always reject {

rcode = reject

}

always ok {

rcode = ok

simulcount = 0

mpp = no

}

expr {

}

digest {

}

exec {

wait = yes

input_pairs = request

}

exec echo {

wait = yes

program = "/bin/echo %{User-Name}"

input_pairs = request

output_pairs = reply

}

ippool main_pool {

range-start = 192.168.1.1

range-stop = 192.168.3.254

netmask = 255.255.255.0

cache-size = 800

session-db = ${raddbdir}/db.ippool

ip-index = ${raddbdir}/db.ipindex

override = no

maximum-timeout = 0

}

}

# Порядок загрузки модулей

instantiate {

exec

expr

}

# Авторизация.

authorize {

preprocess

chap

mschap

suffix

eap

# Читать файл 'users'

# по умолчанию

### files

# Обращаться к SQL БД. Схема БД

# аналогична структуре файла "users".

# по умалчанию закоментировано

#### sql

sql

}

# Аутетификация.

authenticate {

Auth-Type PAP {

pap

}

Auth-Type CHAP {

chap

}

Auth-Type MS-CHAP {

mschap

}

unix

eap

}
# Пре-учёт.

preacct {

preprocess

acct_unique

suffix

files

}
# Учёт.

#

accounting {

detail

unix

radutmp

# Логировать трафик в SQL БД.

# по умолчанию закоментировано

#### sql

sql

}

session {

radutmp


# sql

}
# Пост-аутентификация

post-auth {

}
pre-proxy {

}
post-proxy {

eap

}
В конфигурационном файле настроек БД, необходимо ввести данные относительно созданной БД, пользователя сервера БД, его пароля и адреса сервера БД.

Пример конфигурационного файла postgresql.conf:

#

# Id: postgresql.conf,v 1.8.2.11 2003/07/15 11:15:43 pnixon Exp $

#

# Конфигурация для модуля SQL, использующего сервер БД Postgresql.

#

# Схема БД доступка в:

#

# src/radiusd/src/modules/rlm_sql/drivers/rlm_sql_postgresql/db_postgresql.sql

#
sql {

driver = "rlm_sql_postgresql"
# Информация подключения

server = "localhost"

login = "freeradiususer"

password = "fru"

radius_db = "freeradiusdb"



acct_table1 = "radacct"

acct_table2 = "radacct"

postauth_table = "radpostauth"

authcheck_table = "radcheck"

authreply_table = "radreply"

groupcheck_table = "radgroupcheck"

groupreply_table = "radgroupreply"

usergroup_table = "usergroup"



deletestalesessions = yes
sqltrace = yes

sqltracefile = ${logdir}/sqltrace.sql
num_sql_socks = 5
#######################################################################

# Запросы к БД

#######################################################################

...

# опущены, так как были взяты по умолчанию и никакие изменения в них не вносилось

}
"Общие секреты" (ключи) сервера FreeRADIUS и NAS серверов с которыми он взаимодействует находятся в конфигурационном файле clients.conf. Как и все конфигурационные файлы FreeRADIUS, данный файл хорошо прокомментирован. Для выполнения лабораторной работы достаточно его настроек по умаолчанию.

Пример конфигурационного файла clients.conf:

#

# clients.conf – конфигурационные директивы клиентов

#

#######################################################################
#######################################################################

#

# Объявление RADIUS клиентов (обычно это NAS сервера).

#

client 127.0.0.1 {

#

# Общий секрет использоется для "шифрования" и подписи пактов между

# NAS и FreeRADIUS.

#

# Общим секретом может быть любая стока длиной до 32х символов

#

secret = testing123
#

# Короткое имя используется как псевдоним для полного классификатора

# доменного имени или IP адреса.

#

shortname = localhost
#

# оставшиеся три поля являются опциональными, и мог быть использованы в

# скрипте checkrad.pl для разных пользовательских проверок

#
# nastype = other # localhost isn't usually a NAS...

# login = !root

# password = someadminpas

}




  1. Тестирование работы сервера FreeRADIUS

После установки сервера FreeRADIUS можно произвести тестирование его работы. Для тестирования и отладки работы сервера удобным является отладочный режим, при этом все сообщения сервера будут выводиться на консоль на которой сервер был запущен. Запуск сервера в отладочном режиме производиться следующей командой:

$ radiusd -X
В ходе запуска сервера будет выводится сообщения о статусе загрузки сервера и его модулей. После загрузки на консоль будет выведено сообщение "Ready to process requests." ("Готов к обработке запросов"). Отсутствие сообщения говорит о том что сервер не запустился, для выяснения причины сбоя необходимо рассмотреть выводимые сервером сообщения.

Тестирования сервера возможно с помощью скрипта radtest, который имеет следующую последовательность параметров запуска:
$ radtest user passwd radius-server[:port] nas-port-number secret [ppphint] [nasname]
Значение secret устанавливается через конфигурационный файл clients.conf, в котором соотноситься адрес клиента который генерирует RADIUS запросы и секретного ключа, при помощи которого производится шифрование пакета.

Вызов данного скрипта для тестирования созданных в пункте 3 пользователей будет иметь следующий вид:
$ radtest testuser testpasswd 127.0.0.1 0 testing123
В консоли где был запущен сервер должны быть выведены сообщения, что был получен запрос и на основе чего был сгенерирован ответ на данный запрос. Программа radtest должна получить удовлетворительный ответ на запрос в течении нескольких секунд:
Sending Access-Request of id 85 to 127.0.0.1:1812

User-Name = "testuser"

User-Password = "testpasswd"

NAS-IP-Address = localhost

NAS-Port = 0

rad_recv: Access-Accept packet from host 127.0.0.1:1812,

id=85, length=20


  1. Конфигурирование PPTP сервера POPTOP

Конфигурирование PPTP сервера POPTOP было произведено в первой лабораторной работе. Для добавления возможности данному серверу производить аутентификацию пользователей не через файл а через БД, необходимо внести незначительные изменения в созданные в ходе первой лабораторной работы файлы и создать конфигурационные файлы RADIUS клиента – плугина radius.o.

К изменениям которые необходимо внести в созданные в первой лабораторной работе файлы является добавление строки:


plugin radius.so

в конец файла options.pptpd, который указывается через опцию option конфигурационного файла pptpd.conf PPTP сервера POPTOP.

Конфигурационные файлы RADIUS клиента могут быть созданы полностью все вручную, в случае если в системы не был установлен пакет libradiusclient, или можно установить этот пакет и отредактировать созданные им конфигурационные файлы. В новых версиях ppp данный пакет не нужен так как эта библиотека собирается и линкуется в плугин radius.so статически. В конфигурационных файлах RADIUS клиента содержатся как настройки самого клиента так и настройки адресов и общих секретов RADIUS серверов к которым клиент обращается.

Общий конфигурационный файл RADIUS клиента /etc/radiusclient/radiusclient.conf:

# Общие настрйки

auth_order radius
login_tries 4
login_timeout 60
nologin /etc/nologin
# Настройки RADIUS
# RADIUS сервер для запросов аутентификации

authserver localhost:1812
# RADIUS сервер для запросов учёта

acctserver localhost:1813
# Файл содержащий общие секреты серверов и клиента

servers /etc/radiusclient/servers
# файла словаря атрибутов

dictionary /etc/radiusclient/dictionary
login_radius /usr/sbin/login.radius
seqfile /var/run/radius.seq
mapfile /etc/radiusclient/port-id-map
default_realm
radius_timeout 10
radius_retries 3
# NAS-Идентификатор

# nas_identifier MyUniqueNASName
# Локльные настройки
# программа вызываемая для локальной регистрации

login_local /bin/login

Конфигурационный файл RADIUS клиента, с общими секретами данного клиента и RADIUS серверов с которыми он может взаимодействовать /etc/radiusclient/servers (занчение ключа должно совпдать со значение введённым в конфигурационном файле FreeRADIUS сервера – clients.conf):


#Server Name or Client/Server pair Key

#---------------- ---------------

127.0.0.1 testing123
Все остальные конфигурационные файлы не изменялись и могут быть взяты из файлов прилагаемых к данной лабораторной рабоет.


  1. Проверка работы VPN клиента из ОС Windows и ОС Linux

Относительно клиентской стороны никаких изменений, относительно первой лабораторной работы, вносить ну нужно (за исключение возможно логина и пароля пользователя). Добавление механизма авторизации аутентификации и учёта посредством протокола RADIUS расширило удобства возможности администрирования клиентов и учёта их работы.

Для примера, так как сервер FreeRADIUS был настроен что бы учётные данные сохранялись в БД, можно посмотреть статистику работы клиента:
$ psql -h 127.0.0.1 freeradiusdb freeradiususer

freeradiusdb=> SELECT

freeradiusdb-> UserName,AcctStartTime,AcctStopTime,

freeradiusdb-> FramedProtocol

freeradiusdb-> FROM radacct;

username | acctstarttime | acctsessiontime | framedprotocol

----------+-------------------------------+-----------------+----------------

testuser | 2006-10-08 15:46:09.858789+03 | 37 | PPP

(1 запись)
Для облегчения администрирования клиентов и просмотра статистики можно написать программы, скрипты, web-интерфейсы и так далее. Однако на данный момент уже существует много разнообразных программ обеспечивающих выполнение данных задач в связке POPTOP и FreeRADIUS и другое ПО, например FreeNIBS.

Заключение

Ход лабораторной работы рассматривает базовые возможности модуля rlm_sql, данный модуль в свою очередь позволяет организовывать группы пользователей и создание общих правил для них. Условия проверки значений входного и назначение значений ответного пакетов могут быть значительно сложнее. Из них могут создаваться цепочки посредством присвоения атрибуту "Fall-Through" значения yes/1, и их разрывание – no/0.


В пакет FreeRADIUS состоит ещё из многим модулей, настраивая взаимодействие между которыми можно создать полноценную систему ААА на базе протокола RADIUS.

Содержание отчета


Отчёт должен содержать ход выполнения лабораторной работы с листингами лог-файлов работы серверов POPTOP и FreeRADIUS, а также код SQL запросов производимых к БД.

Контрольные вопросы


  1. Какие протоколы аутентификации, авторизации и учёта вы знаете?

  2. Какие достоинства и недостатки протокола RADIUS?

  3. Какой принцип аутентификации, авторизации и учёта в протоколе RADIUS? Какие команды запросов/ответов для этого применяются?

  4. Сервер FreeRADIUS и его модули. Опишите алгоритм отработки RADIUS запроса данным сервером.

  5. Какие модули сервера FreeRADIUS были использованы в данной лабораторной работе? Каково из назначение?

  6. В чём приемущество использования БД в сервере FreeRADIUS? Какие ещё источники данных могу быть использованы?



<< предыдущая страница