debian6上使用apt-get安装和配置freeradius

文章目录

今天介绍下如何在debian6上使用apt-get安装和配置freeradius,在本文之前,请先参考debian下lnmp一键安装脚本这篇文章配置好lnmp环境,方便后续freeradius的使用。

freeradius的安装及调试

1、确定没有安装radius软件包

首先先确定本机没有安装radius的任何软件包、以确定干净安装、可以使用dpkg的命令来查看

1
dpkg -l | grep radius

如果返回没有的话就继续下一步。如果存在,使用dpkg -P来把freeradius的程序文件和配置文件完全删除、然后就开始干净的安装freeradius。

2、安装freeradius

安装freeradius之前先要确保已经安装了mysql,因为后来要用到,接下来安装freeradius的部件

1
apt-get install freeradius freeradius-ldap freeradius-mysql

3、调试freeradius

安装完成后freeradius就会自动启动了,由于我们要使用调试模式来启动freeradius,所以先关闭freeradius服务先

1
service freeradius stop

注意:
使用ubtuntu的apt-get方式来安装freeradius的位置会和源码不同、源码安装的默认位置是/usr/local/etc/raddb/
而使用ubuntu的apt-get方式的配置文件则安置在/etc/freeradius/

然后修改/etc/freeradius/下的users文件

1
2
3
4
5
6
7
8
9
steve   Cleartext-Password := "testing"
    Service-Type = Framed-User,
    Framed-Protocol = PPP,
    Framed-IP-Address = 172.16.3.33,
    Framed-IP-Netmask = 255.255.255.0,
    Framed-Routing = Broadcast-Listen,
    Framed-Filter-Id = "std.ppp",
    Framed-MTU = 1500,
    Framed-Compression = Van-Jacobsen-TCP-IP

把这几行反注释,也就是使用一个名为steve、密码为testing的用户来测试一下是否通则登录freeradius服务器,保存后退出然后启动radius的调试模式。

1
freeradius -X

然后打开另一个终端,使用radtest来测试用户是否能够通过

1
radtest steve testing localhost 1812 testing123

这句前steve和testing代表用户和密码,localhost和1812则是freeradius的IP地址和端口号,testing123则是freeradius服务端与客户端之间通讯的key,由/etc/freeradius目录下的clients.conf定义在client localhost字段的secret参数。

1
2
3
4
5
6
7
client localhost {
    ...
    ...
    secret      = testing123
    ...
    ...
}

注意这个secret字段最好不要少于8个字节,更多具体的详细说明请看clients.conf文件中secret参数前面的注释说明。

adtest成功通过后则会显示Access-Accept状态。

另外,如果你一个不好运,确实在linux系统中存在steve的用户,这样子的话freeradius服务器则会跳过你现在的用户配置直接去查询系统的配置,这时的密码就会以系统密码为准,这里在users文件中定义的密码就会失效,而且如果改用户是禁止在linux上登录的话,则会直接把用户打回成 Access-Reject。

另外、如果你打算把freeradius的服务器和客户端分开两个服务器来运行,就需要自行在服务器端的client.conf加上客户端的IP地址好通知服务器

1
vim /etc/freeradius/client.conf

如你的freeradius客户端IP是10.0.0.124,那么便要在freeradius服务端的client.conf加上如下内容

1
2
3
4
5
6
client 10.0.0.124 {
        ipaddr = 10.0.0.124
        secret      = testing123
        require_message_authenticator = no
        nastype     = other
}

保存client.conf然后重启服务器,便可以在IP为10.0.0.124的radius客户端来访问服务器了。可以使用radtest命令来测试一下、测试把localhost改成相应的服务器IP地址。

P.S.:如果客户端不具备公网地址或者由于处于某种防火墙之下、会有可能造成访问失败、

mysql与freeradius连接

接下来的工作是使用mysql数据库与freeradius连接

1、建立radius数据库

首先要做的就是建立相应的radius数据库、进入mysql

1
mysql -uroot -p

然后建立radius数据库

1
CREATE DATABASE radius;

之后使用exit退出mysql,然后建立一系统的表格,freeradius已经自带有sql脚本,我们执行这些脚本就可以自行建立了,首先定位到这些脚本的位置先

1
cd /etc/freeradius/sql/mysql

看见有不少sql文件

1
2
3
4
5
6
7
8
9
10
11
12
-rw-r--r-- 1 root root      661 2010-01-04 21:56 admin.sql
-rw-r----- 1 root freerad  4543 2010-01-04 21:56 counter.conf
-rw-r--r-- 1 root root     1242 2010-01-04 21:56 cui.conf
-rw-r--r-- 1 root root      452 2010-01-04 21:56 cui.sql
-rw-r----- 1 root freerad 14375 2012-01-31 23:26 dialup.conf
-rw-r----- 1 root freerad 14379 2012-01-31 23:25 dialup.conf.bak
-rw-r----- 1 root freerad  4058 2010-01-04 21:56 ippool.conf
-rw-r----- 1 root freerad   579 2010-01-04 21:56 ippool.sql
-rw-r----- 1 root freerad   400 2010-01-04 21:56 nas.sql
-rw-r----- 1 root freerad  4318 2010-01-04 21:56 schema.sql
-rw-r--r-- 1 root root     1844 2010-01-04 21:56 wimax.conf
-rw-r--r-- 1 root root      407 2010-01-04 21:56 wimax.sql

其中admin.sql可以为mysql建立一个专门管理radius数据库的管理员
schema.sql则是用来建立radius数据库最基本的表格、
其它的sql就不用管先了、是其它附加模块才需要导入的
首先导入admin.sql

1
mysql -uUSERNAME -pPASSWD radius < admin.sql

其中的USERNAME和PASSWD代表mysql管理员的帐户和密码、通常是使用最高权限的root用户来执行、

schema.sql同样也是照此格式来执行导入到数据库、如果结果正常的话、可以使用radius账户进入mysql数据库

1
mysql -uradius -p

默认密码是”radpass”(没有引号)、登录后再查看数据库、

1
2
use radius;
show tables;

会看到已经建立有相应的表格了,现在就完成了mysql数据库的部署了,之后再去配置freeradius的相关数据

2、配置freeradius

修改/etc/freeradius/radiusd.conf、定位到该行

1
 $INCLUDE  sql.conf

将之反注释、启动sql.conf、

然后编辑/etc/freeradius/sql.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
sql {
    #
    #  Set the database to one of:
    #
    #   mysql, mssql, oracle, postgresql
    #
    database = "mysql"
 
    #
    #  Which FreeRADIUS driver to use.
    #
    driver = "rlm_sql_${database}"
 
    # Connection info:
    server = "localhost"
    #port = 3306
    login = "radius"
    password = "radpass"
 
    # Database table configuration for everything except Oracle
    radius_db = "radius"
    ...
}

默认情况下、使用apt-get命令来安装freeradius会自动检测到已经安装了mysql而自动把database设置为mysql、如果迩的不是这样显示请设置成mysql、然后再再看password这个参数、如果迩之前已经更改了radius用户的密码、这里要做相应的修改、其余的参数就默认好了、

修改了sql.conf、再设置相应的设备通知其使用mysql作为数据存储设备、

1
vim /etc/freeradius/sites-available/default

把authorize{}字段下的file注释掉、反注释sql、这里的file指的就是usrs文件、将不再把用户信息写在users而使用mysql来存储用户信息、
把accounting{} 字段下的sql反注释、启用sql来记录统计信息、
把session{}字段下的sql反注释、启用用户同时登录限制功能、这里还需要修改其它地方、一会再说
把post-auth{} 字段的sql反注释、启用用户登录后进行数据记录功能

整个文件如下所示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
authorize {
        ...
        ...
#        files
        sql
        ...
}
 
...
...
 
accounting {
        ...
        sql
        ...
}
 
...
...
 
 
session {
    radutmp
 
    #
    #  See "Simultaneous Use Checking Queries" in sql.conf
    sql
}
 
 
post-auth {
    ...
    sql
    ...
    ...
}

如果你之前如我一样启动了启用用户同时登录限制功能、那么接下来还要做这一步

编辑dialup.conf文件

1
vim /etc/freeradius/sql/mysql/dialup.conf

找到这几行、将之反注释

1
2
3
4
5
# Uncomment simul_count_query to enable simultaneous use checking
    simul_count_query = "SELECT COUNT(*) \
                             FROM ${acct_table1} \
                             WHERE username = '%{SQL-User-Name}' \
                             AND acctstoptime IS NULL"

之后整个对mysql的radius配置就已经完成了

3、测试是否连接成功

之后在radius数据库建立几条用户信息以测试mysql+freeradius的用户认证是否成功

1
2
3
4
5
6
insert into radgroupreply (groupname,attribute,op,value) values ('user','Auth-Type',':=','Local');
insert into radgroupreply (groupname,attribute,op,value) values ('user','Service-Type','=','Framed-User');
insert into radgroupreply (groupname,attribute,op,value) values ('user','Framed-IP-Netmask',':=','255.255.255.0');
INSERT INTO radcheck (UserName, Attribute, Value) VALUES ('sqltest', 'Password', 'testpwd');
insert into radusergroup(username,groupname) values('sqltest','user');
INSERT INTO radgroupcheck (GroupName, Attribute, op, Value) values("user", "Simultaneous-Use", ":=", "1");

插入后整个数据库表的内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
mysql> select * from radusergroup;
      +---------------+-----------+----------+
      | UserName      | GroupName | priority |
      +---------------+-----------+----------+
      | fredf         | dynamic   |         1|
      | barney        | static    |         1|
      | dialrouter    | netdial   |         1|
      +---------------+-----------+----------+
      3 rows in set (0.01 sec)
 
      mysql> select * from radcheck;
      +----+----------------+--------------------+------------------+------+
      | id | UserName       | Attribute          | Value            | Op   | 
      +----+----------------+--------------------+------------------+------+
      |  1 | fredf          | Cleartext-Password | wilma            | :=   |
      |  2 | barney         | Cleartext-Password | betty            | :=   |
      |  2 | dialrouter     | Cleartext-Password | dialup           | :=   |
      +----+----------------+--------------------+------------------+------+
      3 rows in set (0.01 sec)
 
      mysql> select * from radreply;
 
      +----+------------+-------------------+---------------------------------+------+
      | id | UserName   | Attribute         | Value                           | Op   |
      +----+------------+-------------------+---------------------------------+------+
      |  1 | barney     | Framed-IP-Address | 1.2.3.4                         | :=   |
      |  2 | dialrouter | Framed-IP-Address | 2.3.4.1                         | :=   |
      |  3 | dialrouter | Framed-IP-Netmask | 255.255.255.255                 | :=   |
      |  4 | dialrouter | Framed-Routing    | Broadcast-Listen                | :=   |
      |  5 | dialrouter | Framed-Route      | 2.3.4.0 255.255.255.248         | :=   |
      |  6 | dialrouter | Idle-Timeout      | 900                             | :=   |
      +----+------------+-------------------+---------------------------------+------+
      6 rows in set (0.01 sec)
 
      mysql> select * from radgroupreply;
      +----+-----------+--------------------+---------------------+------+
      | id | GroupName | Attribute          | Value               | Op   |
      +----+-----------+--------------------+---------------------+------+
      | 34 | dynamic   | Framed-Compression | Van-Jacobsen-TCP-IP | :=   |
      | 33 | dynamic   | Framed-Protocol    | PPP                 | :=   |
      | 32 | dynamic   | Service-Type       | Framed-User         | :=   |
      | 35 | dynamic   | Framed-MTU         | 1500                | :=   |
      | 37 | static    | Framed-Protocol    | PPP                 | :=   |
      | 38 | static    | Service-Type       | Framed-User         | :=   |
      | 39 | static    | Framed-Compression | Van-Jacobsen-TCP-IP | :=   |
      | 41 | netdial   | Service-Type       | Framed-User         | :=   |
      | 42 | netdial   | Framed-Protocol    | PPP                 | :=   |
      +----+-----------+--------------------+---------------------+------+
      12 rows in set (0.01 sec)

注意了、这些数据类型的属性值attribute都是特定的字符、不是随随便便自己写上去的、要查看定义这些属性的文件请查看迩当前配置文件的dictionary目录、其实里面也啥内容没定义到、只是写上了路径、一般会写上包含在

$INCLUDE /usr/share/freeradius/dictionary

这里的意思就是整个dictionary文件被放置在这个文件中、其实这个文件也是个路径信息、所以真正定义的dictionary文件是放在/usr/share/freeradius/这个目录、比如Framed-IP-Address属性被定义在dictionary.rfc2865文件中、Cleartext-Password被定义在dictionary.freeradius.internal文件中

然后启动freeradius的调试模式

1
freeradius -X

注意之前的freeradius服务必须先停掉、不然会出现冲突、然后再使用以上用户来测试

如使用fredf用户、密码为wilma、

1
radtest fredf wilma localhost 1812 testing123

返回Access-Accept状态的同时会返回相应reply表格的内容、先返回radreply的用户返回信息、再返回radgroupreply的所属组返回信息、返回成功就表示配置已经正确了。

参考文章:在ubtunu使用apt-get安装和配置freeradius

本文出自 TENNFY博客,转载时请注明出处及相应链接。

本文永久链接: https://www.tennfy.com/2052.html

下一篇文章:

上一篇文章:

3人参与了讨论

  1. feizai 说:

    请教一下
    我运行到这里时
    radtest steve testing localhost 1812 testing123
    返回的是下面这两个是什么原因呢
    radclient:: Expected end of line or comma
    radclient: Nothing to send.
    我debian系统linode vps

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

1 + 8 = ?


您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

返回顶部