Фев 17 2010

Настройка FreeRadius.

FreeRadius один из наиболее быстро развивающихся radius сервером с большими функциональными возможностями. В свомих задачах я применяю FreeRadius для авторизации, поэтому в моем конфиге, все лишнее убрано. FreeRadius я использую в связке с MySQL.
Стаим FreeRadius из портов:

cd /usr/ports/net/freeradius-mysql/
make install clean


Перед сборкой появится меню выбора опция компиляции:

 ┌────────────────────────────────────────────────────────────────────┐
 │                Options for freeradius-mysql 1.1.8                  │
 │ ┌────────────────────────────────────────────────────────────────┐ │
 │ │[ ] KERBEROS      With Kerberos support                         │ │
 │ │[ ] HEIMDAL       With Heimdal Kerberos support                 │ │
 │ │[ ] LDAP          With LDAP database support                    │ │
 │ │[ ] PGSQL         With PostgreSQL database support              │ │
 │ │[ ] UNIXODBC      With unixODBC database support                │ │
 │ │[ ] FIREBIRD      With Firebird database support (EXPERIMENTAL) │ │
 │ │[ ] SNMP          With SNMP support                             │ │
 │ │[ ] EDIR          With Novell eDirectory support                │ │
 │ │[ ] NOPERL        Do not require perl (use only if necessary)   │ │
 │ │[ ] EXPERIMENTAL  Build experimental modules                    │ │
 ├─└────────────────────────────────────────────────────────────────┘─┤
 │                       [  OK  ]       Cancel                        │
 └────────────────────────────────────────────────────────────────────┘

После того как сборка и инсталяция FreeRadiusа можно переходить к настройке. Директория в которой находятся конфигурационный фвйлы FreeRadius — /usr/local/etc/raddb/ Нас интересуют 3 конфигурационных файла radiusd.conf — основной файл настроек, sql.conf — настройки отвечающие за работу с SQL сервером и clients.conf — тут настраиваются доступы клиентов приходящих за авторизацией.
Настройку начнем с radiusd.conf у меня выглядит так:

prefix = /usr/local
exec_prefix = ${prefix}
sysconfdir = ${prefix}/etc
localstatedir = /var
sbindir = ${exec_prefix}/sbin
logdir = /var/log
raddbdir = ${sysconfdir}/raddb
radacctdir = ${logdir}/radacct
 
confdir = ${raddbdir}
run_dir = ${localstatedir}/run/radiusd
 
log_file = ${logdir}/radius.log
 
libdir = ${exec_prefix}/lib
 
pidfile = /var/run/radiusd/radiusd.pid
 
max_request_time = 30
delete_blocked_requests = no
cleanup_delay = 5
max_requests = 1024
bind_address = *
 
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  = no
$INCLUDE  ${confdir}/clients.conf
snmp    = no
thread pool {
        start_servers = 5
        max_servers = 32
        min_spare_servers = 3
        max_spare_servers = 10
        max_requests_per_server = 0
}
modules {
        acct_unique {
                key = "User-Name, Acct-Session-Id, NAS-IP-Address, Client-IP-Address, NAS-Port"
        }
        $INCLUDE  ${confdir}/sql.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
        }
        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
        }
}
 
instantiate {
        exec
        expr
}
authorize {
        sql
}
 
authenticate {
}
preacct {
        acct_unique
}
accounting {
 
}
session {
        radutmp
        sql
}
 
post-auth {
        sql
}
pre-proxy {
}
post-proxy {
}

В radiusd.conf я только удалял не нужные секции, а вот в sql.conf я правил логины и пароли для доступа к MySQL
Файл отвечающий за подключение к MySQL выглядит так:

sql {
#Работаем с MySQL
        driver = "rlm_sql_mysql"
#Сервер MySQL на локалхосте
        server = "localhost"
#Имя пользователя для доступа к MySQL
        login = "freeradius"
#Пароль для доступа к MySQL
        password = "123"
#База MySQL в которой хранятся данные для авторизации
        radius_db = "freeradius"
        authcheck_table = "radcheck"
        authreply_table = "radreply"
        nas_table = "nas"
        deletestalesessions = yes
        sqltrace = no
        num_sql_socks = 5
        connect_failure_retry_delay = 60
        sql_user_name = "%{User-Name}"
        authorize_check_query = "SELECT id, UserName, Attribute, Value, op \
          FROM ${authcheck_table} \
          WHERE Username = '%{SQL-User-Name}' \
          ORDER BY id"
        authorize_reply_query = "SELECT id, UserName, Attribute, Value, op \
          FROM ${authreply_table} \
          WHERE Username = '%{SQL-User-Name}' \
          ORDER BY id"
        readclients = yes
}

То что по умолчанию находится в файлах настроек я не комментирую.
Теперь создадим базу и пользователя:
Подключимся к MySQL:

mysql -uroot -p

И в командной строке mysql выполним команды по созданию базы и пользователя

create database freeradius;
GRANT ALL ON freeradius.* TO freeradius@localhost IDENTIFIED BY "123";

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

mysql -u root -p freeradius < /usr/local/share/doc/freeradius/examples/mysql.sql

И теперь создадим одного администратора и одного простого пользователя:
Администратор с логином hilik и паролем hilik-123

use freeradius;
insert into radcheck set UserName='hilik', Attribute='Password', op='==', Value='hilik-123';
insert into radreply set UserName='hilik', Attribute='Service-Type', op='=', Value='Administrative-User';

И read only пользователь(он добавляется одним запросом) с логином hilikr и паролем hilikr-123:

use freeradius;
insert into radcheck set UserName='hilikr', Attribute='Password', op='==', Value='hilikr-123';

Теперь вернемся к редактированию конфигов. Внесем настройки в clients.conf.
Тут мы пропишем localhost и опорную сеть свитчей:

client 127.0.0.1 {
        secret          = 123
        shortname       = localhost
        nastype     = other     
}
 
client 192.168.25.0/24 {
        secret          = cisco-123
        shortname       = private-network-1
        nastype     = other
}

Теперь запустим и протестируем наш радиус сервер.

echo "radiusd_enable="YES" >> /etc/rc.conf

И теперь запустим:

/usr/local/etc/rc.d/radiusd start

Теперь протестируем с помощью radtest. Сначала проверим административного пользователя:

radtest hilik hilik-123 localhost 1812 123

И в ответ увидим:

Sending Access-Request of id 60 to 127.0.0.1 port 1812
        User-Name = "hilik"
        User-Password = "hilik-123"
        NAS-IP-Address = 255.255.255.255
        NAS-Port = 1812
rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=60, length=26
        Service-Type = Administrative-User

Атрибут Service-Type = Administrative-User — означает что на свитчах Extreme Networks и Edge-Core пользователь будет с правами администратора.
Теперь рид онли юзер:

radtest hilikr hilikr-123 localhost 1812 123

И в ответ получим:

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

Атрибут отсутствует. То есть так и должно быть. Теперь можно настраивать на свитчах авторизацию через Radius сервер.
PS Если что то идет не так, можно запустить radiusd с ключем -X — это режим отладки, radius запустится на фореграунде и всю отладку будет выводить на консоль.

Добавить в закладки:

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru
  • By Andrey, 17.03.2010 @ 12:46

    А с каким паролем root ставиться mysql ???

  • By hilik, 17.03.2010 @ 12:55

    По умолчанию пароля не стоит. Доступ только с локалхоста.

  • By sss, 07.05.2010 @ 09:23

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

  • By ааа, 07.05.2010 @ 09:24

    Как сделать , чтоб пользователь смог поменять себе пароль самостоятельно ?

  • By admin, 07.05.2010 @ 09:49

    Сделать свою панель управления.

  • By ааа, 07.05.2010 @ 12:05

    а чтоб так как на сисковском АCS: забил пароль пользователю а он при заходе на любое у-во под радиусом может себе поменять пароль с того, который ему админ дал на свой

Other Links to this Post


Украинская Баннерная Сеть