前言

我在他的基础上添加了docker和ipv6的教程。

RADIUS 服务器软件可以从多个地方获得。在本文中,我将使用 FreeRADIUS搭建RADIUS服务,本文将介绍两种搭建方法,一种是使用官方源码进行搭建,另外一个则是使用docker的方式进行搭建。

RADIUS介绍

远程用户拨入验证服务(RADIUS, Remote Authentication Dial In User Service)是一个AAA协议,通常用于网络访问、或流动IP服务,适用于局域网及漫游服务。

RADIUS协议包括RADIUS验证协议(对应AAA的验证和授权)和RADIUS记账协议,分别定义于IETF RFC 2865和RFC 2866。

 

什么是AAA协议?

AAA是认证(Authentication)、授权(Authorization)和计费(Accounting)的简称,是网络安全中进行访问控制的一种安全管理机制,提供认证、授权和计费三种安全服务。

AAA提供的安全服务具体是指:

  1. 认证(Authentication):是对用户的身份进行验证,判断其是否为合法用户。
  2. 授权(Authorization):是对通过认证的用户,授权其可以使用哪些服务。
  3. 计费(Accounting):是记录用户使用网络服务的资源情况,这些信息将作为计费的依据。

首先,认证部分提供了对用户的认证。整个认证通常是采用用户输入用户名与密码来进行权限审核。认证的原理是每个用户都有一个唯一的权限获得标准。由AAA服务器将用户的标准同数据库中每个用户的标准一一核对。如果符合,那么对用户认证通过。如果不符合,则拒绝提供网络连接。

其次,用户要通过授权来获得操作相应任务的权限。比如,登录系统后,用户可能会执行一些命令来进行操作。这时,授权过程会检测用户是否拥有执行这些命令的权限。简单而言,授权过程是一系列强迫策略的组合,包括:确定活动的种类或质量、资源或者用户被允许的服务有哪些。授权过程发生在认证上下文中,一旦用户通过了认证,他们也就被授予了相应的权限。

最后,计费这一过程将会计算用户在连接过程中消耗的资源数目。这些资源包括连接时间或者用户在连接过程中的收发流量等等。可以根据连接过程的统计日志、用户信息、授权控制、账单、趋势分析、资源利用以及容量计划活动来执行计费过程。

源码方式搭建

下载freeradius-server-3.0.12.tar.bz2。

下载地址(https://ftp.yz.yamagata-u.ac.jp/pub/network/freeradius/old/freeradius-server-3.0.12.tar.bz2),如果下载速度太慢的话,可以使用迅雷下载。

下载之后,将freeradius-server-3.0.12.tar.bz2放入linux系统的指定位置。


tar -jxvf freeradius-server-3.0.12.tar.bz2  
cd freeradius-server-3.0.12/  
./configure


打印的信息显示有一个错误,信息如下:

radius认证服务器与LDAP认证的区别 radius认证服务器搭建_docker

图 1

信息显示没有安装libtalloc,但是执行yum安装显示是已安装的:


yum install libtalloc  


radius认证服务器与LDAP认证的区别 radius认证服务器搭建_安全_02

图 2

解决办法,安装libtalloc-devel:


yum install libtalloc-devel -y


问题解决,再次./configure,没有再打印这个错误信息, 说明这个问题解决,而是打印了下一个错误信息:

radius认证服务器与LDAP认证的区别 radius认证服务器搭建_linux_03

图 3

信息显示链接不到libcrypto,执行


rpm -qa |grep libcrypto


没有信息打印,说明没有安装libcrypto,  libcrypto包含在openssl安装包里,OpenSSL 包含2个主要的库: libssl and libcrypto.

所以解决办法就是安装openssl:


yum install openssl openssl-devel


运行./configure显示这个问题解决,并且没有报其它错误信息.

至此,./configure执行完全成功.

接下来要 执行make 命令.


make  


make命令被正确 执行

可以在./build/bin目录找到radiusd程序,这个就是radius server程序.

接下来安装这个 server:


make install  


成功安装.

执行下面命令,以超级身份运行:


radiusd -X  


运行正常,显示:

radius认证服务器与LDAP认证的区别 radius认证服务器搭建_服务器_04

图 4

按照官方文档的测试方法,在文件 /usr/local/etc/raddb/users 的最前面添加:


testing Cleartext-Password := "password123"


testing 是用户名,  password123 是明文格式的密码.

以管理员方式再次运行radiusd,在运行radiusd时会说是端口已经被使用,是因为系统服务已经自动运行。关闭之后再运行即可。


service freeradius stop   

radiusd -X  


正常运行.

 

接下来用radtest来测试服务器:


radtest testing password123 127.0.0.1 0 testing123


如果返回


(0) Error parsing "stdin": Failed resolving "fedora.hexiaowang" to IPv4 address: Name or service not known


fedora.hexiaowang 是我给我的Fedora 25取的计算机名称.

这个错误是程序无法把计算机名 fedora.hexiaowang 映射成IP.解决办法,把 fedora.hexiaowang 映射成 本机IP 127.0.0.1 添加到 /etc/hosts 文件.

这是添加之前的hosts文件:


cat hosts  


radius认证服务器与LDAP认证的区别 radius认证服务器搭建_安全_05

图 5

这是添加之后的hosts文件:

radius认证服务器与LDAP认证的区别 radius认证服务器搭建_安全_06

图 6

再次执行radtest测试服务器 # radtest testing password123 127.0.0.1 0 testing123 ,结果显示:

radius认证服务器与LDAP认证的区别 radius认证服务器搭建_安全_07

图 7

收到 Access-Reject 消息,表示请求失败,测试没通过.解决办法:把 radiusd.conf 文件里的禁止写log(no)改成允许(yes)


vi /usr/local/etc/raddb/radiusd.conf


修改后的 radiusd.conf 文件片段如下:

radius认证服务器与LDAP认证的区别 radius认证服务器搭建_java_08

图 8

再次执行radtest测试服务器 # radtest testing password123 127.0.0.1 0 testing123 ,结果显示:

radius认证服务器与LDAP认证的区别 radius认证服务器搭建_服务器_09

图 9

收到 Access-Accept 即表示测试成功!

配置 radius server 端:

修改服务器端记录客户端的配置文件 /etc/raddb/clients.conf 文件,该文件默认值提供了本机测试的 local 配置,即:安装完后默认只允许本机的client客户端访问radius服务器。Client有多种配置方式,

 

# 只允许本机的客户端访问
client localhost {
     ipaddr = 127.0.0.1
     secret = testing123
}

  

# 添加一个子网 192.168.230.0/24 的网段可访问
client 192.168.230.0/24 {
       secret          = alonesword
     shortname       = lan-w3pc
}

     

# 添加一个ipv6格式的网络,只有2001::480d:5786:958c:4e22可以访问
client 2001::480d:5786:958c:4e22 {
       secret          = test
}

 

保存文件 /etc/raddb/clients.conf

重启radius服务.

Docker方式搭建

Docker镜像我们使用到的是其官方提供的freeradius-server

没有docker的先安装docker,以及学习如何使用docker。

执行拉取镜像命令:


docker pull freeradius/freeradius-server:latest


运行docker容器(当然,你也可以自己将主要的配置文件挂载到宿主机上,可以选择将容器中的/etc/raddb整个文件夹挂载到宿主机中,主要的配置文件都在这个文件夹下)


docker run --name freeradius --restart=always -d -p 1812-1813:1812-1813/udp freeradius/freeradius-server:latest


该容器镜像内部默认是没有安装vi,vim等命令的,如果是在外网环境,可以执行命令


apt-get update  
apt-get install vim


安装好vim之后,就可以修改配置文件了,内网环境还是建议配置挂载。

按照官方文档的测试方法,在容器内修改文件 /etc/raddb/users ,在最前面添加:


testing Cleartext-Password := "password123"


testing 是用户名,  password123 是明文格式的密码.

接下来用radtest来测试服务器:


radtest testing password123 127.0.0.1 0 testing123


结果显示:

radius认证服务器与LDAP认证的区别 radius认证服务器搭建_java_10

图 10

收到 Access-Accept 即表示测试成功!

之后是配置/etc/raddb/clients.conf文件,配置方法与源码方式的配置方法相同。

如何配置ipv6?

这里主要介绍源码安装方式如何配置ipv6,如果要让docker安装的freeradius容器支持ipv6,需要事先为docker引擎配置ipv6。

源码配置ipv6教程。

1. 查看本机是否配置了ipv6


ip addr | grep net6


复制ipv6的地址,比如我的是:2004::480d:5786:958c:4e2c。

修改default文件中的ipv6地址


vim /usr/local/etc/raddb/sites-enabled/default


修改第215行和229行(不同版本可能会有不同)

radius认证服务器与LDAP认证的区别 radius认证服务器搭建_java_11

图 11

添加client客户端的ipv6地址


vim /usr/local/etc/raddb/clients.conf


radius认证服务器与LDAP认证的区别 radius认证服务器搭建_docker_12

图 12

这样就可以通过2004::4888:5796:958c:8888的机器访问服务器(2004::480d:5786:958c:4e2c)的radius服务了。