The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Установка и настройка gnu-radius + postgresql (freebsd ipfw traffic)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: freebsd, ipfw, traffic,  (найти похожие документы)
From: Олег Малых <malykh@krls.ru> Subject: Установка и настройка gnu-radius + postgresql Решил я поставить radius с возможностью хранения паролей и настроек пользователей в SQL сервере. Так как зверинец из множества видов SQL серверов держать не хотелось, то необходима была поддержка именно PostgreSQL. Выбор пал на gnu-radius, как поддерживающий несколько видов SQL, в том числе и PostgreSQL. Данный документ не претендует на полную документацию по установке gnu-radius+postgresql, это просто последовательность действий, которая привела меня к работающей системе. В документе приведены ряд решений и трудности с которыми мне пришлось столкнуться при реализации данного проекта. Все это ставилось на linux версии RedHat 7.1. PostgreSQL был собран из исходников для другой задачи и успешно работал на момент установки. Установку PostgreSQL здесь разбирать не будем, а остановимся именно на установке gnu-radius и связки его с SQL. Сама установка ничего сложного в себя не включает: 1) Скачиваем $wget http://ftp.gnu.org/gnu/radius/gnu-radius-0.96.4.tar.gz 2) Распаковываем $tar xzvf gnu-radius-0.96.4.tar.gz 3) Переходим в каталог с Radius $cd gnu-radius-0.96.4 Если интересно, то читаем README и т.д. 4) Запускаем конфигурирование, указывая подключить PostgreSQL и пути к include файлам PostgreSQL $./configure --with-postgres --with-include-path=/usr/local/pgsql/include --with-client Если PostgreSQL собран в другом месте, то, соответственно, измените путь. 5) Собираем $make 6) Инсталлируем $make install Если возникли ошибки, то где-то Вы ошиблись, либо не находится нормальная сборка PostgreSQL. По умолчанию radius собирается в /usr/local, вы можете его собрать и в другой каталог, указав при конфигурировании --prefix=PREFIX, где PREFIX это каталог, относительно которого будет установлен radius. Первичная настройка 1) Я подправил себе файл /usr/local/etc/raddb/config port 1645; В секции auth и port 1646; В секции acct. Мне это нужно было, чтобы киску свою не перенастраивать, Вы можете оставить себе порты по умолчанию, не это влияет на работу ;) 2) В файл /usr/local/etc/raddb/clients занесите информацию о клиентах, которые будут запрашивать аутентификацию у radius #Client Name Key #---------------- ------------------- localhost localtest cisco ciscokey Ключи лучше придумать самим ;) 3) Для теста нашего radius есть клиентские утилиты, вот для них нужно прописать конфигурацию в /usr/local/etc/raddb/client.conf server local 127.0.0.1 localtest 1645 1646 source_ip 127.0.0.1 timeout 3 retry 1 4) В файл /usr/local/etc/raddb/users занесите для теста # This is the users database. uzver Auth-Type = Local, Password = "test" Service-Type = NAS-Prompt-User radius уже может работать и отвечать на запросы Можно проверить на работоспособность radiusd запустив $/usr/local/sbin/radiusd (radiusd должен быть запущен относительно корневого пути, например /usr/local/sbin/radiusd, иначе работа будет некорректной) У меня с ходу не запустился, так как не были указаны пути к библиотекам PostgreSQL. Я внес пути в /etc/ld.so.conf и запустил ldconfig, после чего все удачно заработало. Ответы от radius можно проверить тестовой утилитой /usr/local/sbin/radauth $/usr/local/sbin/radauth -v uzver test server 127.0.0.1:1645 send code 1 (RT_AUTHENTICATION_REQUEST) send: User-Name = uzver send: Password = test send: NAS-Port-Id = 0 recv code 2 (RT_AUTHENTICATION_ACK) recv: Service-Type = NAS-Prompt-User expect 2 got 2 PASS Если вы получили такой ответ, то radius работает и из текстового users отдает ответы на запросы аутентификации, если нет, то нужно искать в чем ошибка. Теперь самое страшное ;) - связь с SQL. В описании приведена только схема связи данного продукта с MySQL, да и то с ошибками. Ниже приведена последовательность действий с PostgreSQL для подготовки его к работе с radius: 1) Становимся пользователем из под которого запущен postmaster и создаем базу (не будем оригинальны) radius. [root@ns /]# su - postgres [postgres@ns postgres]$ createdb radius 2) Входим в командный режим управления базой и создаем пользователя radius с паролем test [postgres@ns postgres]$ psql -d radius radius=# create user radius password 'test'; 3) Создаем таблицы для хранения информации о пользователях, сами SQL выражения изменены под PostgreSQL и вроде как полнофункционально работают. Я заменил все типы char(n) на тип varchar(n) так как odbc добавляет пробелы в конец строки до требуемого числа символов. Таблица passwd (здесь в документации допущена ошибка, пропущено поле active я дал ему тип varchar(3) и значение по умолчанию лучше 'Framed-User') radius=# CREATE TABLE passwd ( user_name varchar(32) UNIQUE default '' not null, service varchar(16) default 'Framed-User' not null, password varchar(64), active varchar(3)); Таблица groups (все прозрачно) radius=# CREATE TABLE groups ( user_name varchar(32) default '' not null, user_group varchar(32)); Таблица attrib (вместо MySQL enum() просто проверяем на присутствие - check) radius=# CREATE TABLE attrib ( user_name varchar(32) default '' not null, attr varchar(32) default '' not null, value varchar(128), op varchar(3) check (op in ('=', '!=', '<', '>', '<=', '>=')) default null ); Таблица calls radius=# CREATE TABLE calls ( status int, user_name varchar(32), event_date_time timestamp without time zone DEFAULT '1970-01-01 00:00:00' NOT NULL, nas_ip_address varchar(17), nas_port_id bigint, acct_session_id varchar(16) DEFAULT '' NOT NULL, acct_session_time bigint, acct_input_octets bigint, acct_output_octets bigint, connect_term_reason int, framed_ip_address varchar(17), called_station_id varchar(32), calling_station_id varchar(32) ); Даем право на чтение, запись пользователю radius radius=# grant select on passwd,groups,attrib,calls to radius; radius=# grant insert,update on calls to radius; 4) Теперь выходим из командного режима "\q". Не забудьте прописать в pg_hba.conf возможность доступа к базе radius с localhost через аутентификацию логин-пароль например: host radius all 127.0.0.1 255.255.255.255 password passwd И естественно, что postmaster нужно запускать с ключиком -i Вроде ничего не забыл про PostgreSQL теперь возвращаемся к radius и правим файл /usr/local/etc/raddb/sqlserver interface postgres server localhost port 5432 login radius password test keepopen yes doauth yes auth_db radius doacct yes Я указал только строки в которые я вносил изменения. От локальной аутентификации я отказался на случай переноса сервера SQL на другую машину. Теперь возвращаемся к /usr/local/etc/raddb/users и добавляем к примеру: DEFAULT Group = "test1", Auth-Type = SQL, Simultaneous-Use = 1 Service-Type = Framed-User Внимание! При аутентификации через SQL пароли в таблице должны храниться криптованые или md5 или des. Долго я выяснял это, пока не наткнулся в документации: Specifying Passwords in SQL Database. user-name Auth-Type = Crypt-Local, Password-Location = SQL Using this profile, the user's password is retrieved from the authentication database using auth_query. The configuration of SQL authentication is described in detail on section Authentication Server Parameters. The shortcut for this notation is Auth-Type = SQL. In any case, the passwords used with this authentication type must be either DES or MD5 hashed. Для криптования паролей я воспользовался утилитой /sbin/grub-md5-crypt Запускаете, вводите пароль, полученную строку вносите в таблицу. Если Вы занесли данные о пользователе, прописали в группу, добавили атрибутов то при помощи /usr/local/sbin/radauth можно проверить работоспособность того, что мы сделали. Можно добавлять, удалять атрибуты в PostgreSQL и смотреть как radius честно их отдает. Очень удобен механизм групп. например: DEFAULT Group = "test1", Auth-Type = SQL, Login-Time = "Wk1800-0755,Sa,Su0000-2359", Simultaneous-Use = 1 Service-Type = Framed-User, Framed-Protocol = PPP, Framed-Netmask = 255.255.255.255 DEFAULT Group = "test2", Auth-Type = SQL, Simultaneous-Use = 1 Service-Type = Framed-User Пользователи, которые в группе test1 могут получить доступ только с 18:00 до 07:55 по рабочим дням и круглосуточно по выходным, а из группы test2 пользователи не имеют временных ограничений. В общем, большая широта для творчества. Оригинал: http://linuxnews.ru/docs/new/malykh/radius_postgress.html

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ RSS ]
  • 1, tin (?), 00:03, 28/12/2003 [ответить]  
  • +/
    Можно хранить и некриптованые пароли
    Я всю два часа доку лопатил пока понял в чем дело
    bash-2.05b# cat ./users
    DEFAULT Auth-Type = Local,
            Password-Location = SQL,
            Simultaneous-Use = 1    
            Service-Type = Framed-User,
            Framed-Protocol = PPP

    bash-2.05b# radauth testik 123456
    PASS

     
     
  • 3, Hisan Grogus (?), 08:13, 19/04/2005 [^] [^^] [^^^] [ответить]  
  • +/
    тут пара вопросов есть зарание прошу прощение за возможную тупость но второй ... большой текст свёрнут, показать
     
  • 5, LSTemp (ok), 00:05, 07/08/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Вот мне до сих пор не понятно, почему после Simultaneous-Use = 1 запятой нет:

    DEFAULT Auth-Type = Local,
    Password-Location = SQL,
    Simultaneous-Use = 1
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    Service-Type = Framed-User,
    Framed-Protocol = PPP

    И работает именно только так.

     

  • 2, tin (?), 00:05, 28/12/2003 [ответить]  
  • +/
    Продолжение
    vpn=> select * from users;
    id | user_name | passwd | descr     | active
    ----+-----------+--------+-----------+--------
      1 | testik    | 123456 | test_user | t
    (1 Record)
     

    игнорирование участников | лог модерирования

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2021 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру