Configuring Radius server on Linux with Mysql and freeRadius. RADIUS (Remote Authentication Dial In User Service)được xem là một giao thức chứng thực từ xa khá an toàn và hiệu quả. Bằng cách xây dựng một RADIUS server kết hợp với một service quản lý người dùng tập trung (LDap, Mysql, Active Directory...), ta có thể xác nhận quyền truy cập của người dùng từ vào nhiều dịch vụ khác nhau
như VPN, Web, Access-Point...
#bl3 Bài viết này s cùng các bạn cài đặt và cấu hình RADIUS server dùng gói freeRadius, kết hợp với mySQL để quản lý tài khoản người dùng tập trung. Do tất cả ta chỉ cài đặt trên cùng một server nên ta sẽ không quan tâm đến việc cài đặt IP. Đây là các bước chúng ta sẽ thực hiện.
  1. Cài đặt MySQL server trên RedHat 5
  2. Cài đặt freeRadius
  3. Cấu hình freeRadius để sử dụng MySQL.
  4. Testing
#bl3 Các package cơ bản cho việc cài đặt và cấu hình của chúng ta.
- mysql-server-5.0.45-7.el5.i386.rpm
- mysql-5.0.45-7.el5.i386.rpm
- freeradius-1.1.3-1.4.el5.i386.rpm
- freeradius-mysql-1.1.3-1.4.el5.i386.rpm
#bl3 Truy cập RADIUS+MySQL package #bllink để download đầy đủ các package cần thiết cũng như các package phụ thuộc trong quá trình cài đặt. Còn bây giờ Let's start!

#bl0 Cài đặt MySQL server
#bl2 Hãy lần lượt cài đặt các gói bên dưới với lệnh rpm -ivh
#code $ rpm -ivh perl-DBI-1.52-2.el5.i386.rpm
$ rpm -ivh mysql-5.0.45-7.el5.i386.rpm
$ rpm -ivh perl-DBD-MySQL-3.0007-2.el5.i386.rpm
$ rpm -ivh mysql-server-5.0.45-7.el5.i386.rpm
#/code #bl2 Nếu không có vấn đề gì trong quá trình cài đặt, ra khởi động dịch vụ mysqld
#code$ service mysqld start
#/code #code To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h localhost.localdomain password 'new-password'
See the manual for more instructions.
You can start the MySQL daemon with:
cd /usr ; /usr/bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl
cd mysql-test ; perl mysql-test-run.pl

Please report any problems with the /usr/bin/mysqlbug script!
#/code Và đó là những gì chúng ta được khuyến cáo từ MySQL. Hãy đặt passwork cho tài khoản root của mySQL
#code $ /usr/bin/mysqladmin -u root password 123
#/code #bl2 Tiếp theo chúng ta sẽ đăng nhập vào MySQL server để tạo database, nên nhớ không thêm khoản cách giữa -u và root nhé.
#code $ mysql -uroot -p123
GRANT ALL ON radius.* TO radius@localhost IDENTIFIED BY "radpass";
#/code #bl2 Lưu ý "radpass" là password mà Radius dùng để truy cập mySQL ta sẽ khai báo bên dưới. Trước khi làm việc với MySQL, s xin giới thiệu một số lệnh cơ bản về mySQL để chúng ta tiện theo dõi. Còn bây giờ ta tạo database mang tên radiusdb
#code mysql> create database radiusdb;
mysql> use radiusdb;
mysql> show tables;
Empty
#/code #bl2 Đến đây chúng ta đã hoàn tất việc cài đặt MySQL server, chút nữa chúng ta sẽ tạo các table theo đúng quy định cho radiusdb.

#bl0 Cài đặt freeRadius
#code rpm -ivh libsensors3-2.10.6-55.el5.i386.rpm
rpm -ivh net-snmp-5.3.2.2-5.el5.i386.rpm
rpm -ivh net-snmp-utils-5.3.2.2-5.el5.i386.rpm
rpm -ivh freeradius-1.1.3-1.4.el5.i386.rpm
rpm -ivh freeradius-mysql-1.1.3-1.4.el5.i386.rpm
#/code #bl2 Hãy chạy tuần tự các lệnh bên trên để cài đặt. Tiếp đó ta sẽ cấu hình file cần thiết trong phạm vi bài viết này:
  • /etc/raddb/radiusd.conf : Chứa các cấu hình cơ bản của radius.
  • /etc/raddb/users : Nơi khai báo các tài khoản dùng để chứng thực nếu ta không sử dụng một dịch vụ quản lý người dùng nào khác.
  • /etc/raddb/sql.conf : Nơi cấu hình cho phép radius làm việc với mySQL.
#bl2 Bây giờ để test xem radius server của chúng ta đã cài thành công chưa. Ta sẽ thêm một tài khoản mới vào /etc/raddb/users (bạn có thể bỏ qua bước testing nếu thích!)
#code $ vi /etc/raddb/users
** Tìm đến dòng 80 và uncomment như bên dưới
80 salipro Auth-Type := Local, User-Password == "123"
81 Reply-Message = "Welcome!! Login successed"
82# Service-Type = Framed-User,
83# Framed-Protocol = PPP,
84# Framed-IP-Address = 172.16.3.33,
85# Framed-IP-Netmask = 255.255.255.0,
86# Framed-Routing = Broadcast-Listen,
87# Framed-Filter-Id = "std.ppp",
88# Framed-MTU = 1500,
89# Framed-Compression = Van-Jacobsen-TCP-IP

** Sau đó ESC > :x để lưu lại
#/code #bl2 Tiếp đến khởi động daemon radiusd ở chế độ Debug và mở một tab mới trong terminal để test.
#code $ radiusd -X
** Mở một tab mới trong Terminal và chạy lệnh
$ radtest salipro 123 localhost 0 testing123

** Và đây là kết quả thành công
Sending Access-Request of id 217 to 127.0.0.1 port 1812
User-Name = "salipro"
User-Password = "123"
NAS-IP-Address = 255.255.255.255
NAS-Port = 0
rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=217, length=64
Reply-Message = "Welcome!! Login successed"
#/code Vậy là chúng ta đã cài đặt thành công Radius server. Công việc tiếp theo là cấu hình chi tiết.

#bl0 Cấu hình freeRadius để sử dụng MySQL.
#bl2 Đầu tiên ta sẽ thay đổi một vài cấu hình trong /etc/raddb/radiusd.conf
#code $ vi /etc/raddb/radiusd.conf
hoặc
$ gedit /etc/raddb/radiusd.conf
#/code Tìm và thiết lập các thông số như bên dưới đây
#code ** Tạm thời tắt proxy
428 proxy_requests = no
** Uncomment tại đây để radius nhận cấu hình từ sql module.
1248: $INCLUDE ${confdir}/sql.conf
** Lưu ý các dòng chứa "sql" phải được uncomment
authorise {
preprocess
chap
mschap
#counter
#attr_filter
#eap
suffix
sql
#files
#etc_smbpasswd
}

authenticate {
authtype PAP {
pap
}
authtype CHAP {
chap
}
authtype MS-CHAP{
mschap
}
#pam
#unix
#authtype LDAP {
# ldap
#}
}

preacct {
preprocess
suffix
#files
}

accounting {
acct_unique
detail
#counter
unix
sql
radutmp
#sradutmp
}

session {
radutmp
}
#/code #bl2 Tiếp theo chúng ta sẽ cấu hình các thông số cần thiết cho module sql bằng lệnh $vi /etc/raddb/sql.conf và thiết lập như sau
#code
sql {
driver = "rlm_sql_mysql"
server = "localhost"
#port = 3306
login = "radius"
password = "radpass"
radius_db = "radiusdb"
...
}
...
sql_user_name = "%{Stripped-User-Name:-%{User-Name:-DEFAULT}}"
#
#sql_user_name = "%{User-Name}"
#/code #bl2 Vậy là việc cấu hình cơ bản đã thành công, và tiếp theo chúng ta sẽ attach các table mẫu vào trong CSDL MySQL. Đầu tiên ta sẽ copy file mysql.sql vào trong /etc/raddb để dễ quản lý và attach nó
#code $ cp /usr/share/doc/freeradius-1.1.3/examples/mysql.sql /etc/raddb
mysql -uroot -p123 radiusdb < /etc/raddb/mysql.sql
#/code #bl2 Sau khi attach thành công, bạn có thể truy cập vào lại MySQL và sử dụng các lệnh show tables; show columns from [table-name];. Tiếp theo hãy insert dữ liệu mẫu như s đã làm bên dưới đây
#code
insert into radcheck(UserName, Attribute, Value) values('sali','User-Password','pass');
insert into radgroupcheck(GroupName,Attribute,Value) values('demoGroup','Auth-Type','Local');
insert into usergroup(UserName, GroupName) values('sali','demoGroup');
insert into radreply(UserName, Attribute, Value) values('sali','Reply-Message','Hi! User in MySQL logined successful');
insert into radgroupreply(GroupName, Attribute, Value) values('demoGroup','Acct-Interim-Interval',60);
** Đây là kết quả sau khi chúng ta insert
mysql> select * from radcheck;
+----+----------+---------------+----+-------+
| id | UserName | Attribute     | op | Value |
+----+----------+---------------+----+-------+
|  1 | sali     | User-Password | == | pass  |
+----+----------+---------------+----+-------+

mysql> select * from usergroup;
+----------+-----------+----------+
| UserName | GroupName | priority |
+----------+-----------+----------+
| sali     | demoGroup |        1 |
+----------+-----------+----------+

mysql> select * from radgroupcheck;
+----+-----------+-----------+----+-------+
| id | GroupName | Attribute | op | Value |
+----+-----------+-----------+----+-------+
|  1 | demoGroup | Auth-Type | == | Local |
+----+-----------+-----------+----+-------+

mysql> select * from radreply;
+----+----------+---------------+----+--------------------------------------+
| id | UserName | Attribute     | op | Value                                |
+----+----------+---------------+----+--------------------------------------+
|  1 | sali     | Reply-Message | =  | Hi! User in MySQL logined successful |
+----+----------+---------------+----+--------------------------------------+

mysql> select * from radgroupreply;
+----+-----------+-----------------------+----+----------------------+
| id | GroupName | Attribute             | op | Value                |
+----+-----------+-----------------------+----+----------------------+
|  1 | demoGroup | Acct-Interim-Interval | =  | 60                   |
+----+-----------+-----------------------+----+----------------------+

#/code Vậy là ta đã hoàn tất việc cấu hình.

#bl0 Testing
#bl2 Chúng ta hãy khởi động lại Mysql và radius
#code $ service mysqld restart
$ service radiusd start
$ chkconfig --level 2345 radiusd on
#/code
- Sau đó chúng ta kiểm tra lại bằng lệnh radtest
#code $ radtest sali pass localhost 0 testing123
** Đây là kết quả thành công
Sending Access-Request of id 217 to 127.0.0.1 port 1812
User-Name = "sali"
User-Password = "pass"
NAS-IP-Address = 255.255.255.255
NAS-Port = 0
rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=217, length=64
Reply-Message = "Hi! User in MySQL logined successful"
Acct-Interim-Interval = 60
#/code

#blsrc Reference: