Фев 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 запустится на фореграунде и всю отладку будет выводить на консоль.

  • 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


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