前言
我在他的基础上添加了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提供的安全服务具体是指:
- 认证(Authentication):是对用户的身份进行验证,判断其是否为合法用户。
- 授权(Authorization):是对通过认证的用户,授权其可以使用哪些服务。
- 计费(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
打印的信息显示有一个错误,信息如下:
图 1
信息显示没有安装libtalloc,但是执行yum安装显示是已安装的:
yum install libtalloc
图 2
解决办法,安装libtalloc-devel:
yum install libtalloc-devel -y
问题解决,再次./configure,没有再打印这个错误信息, 说明这个问题解决,而是打印了下一个错误信息:
图 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
运行正常,显示:
图 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
图 5
这是添加之后的hosts文件:
图 6
再次执行radtest测试服务器 # radtest testing password123 127.0.0.1 0 testing123 ,结果显示:
图 7
收到 Access-Reject 消息,表示请求失败,测试没通过.解决办法:把 radiusd.conf 文件里的禁止写log(no)改成允许(yes)
vi /usr/local/etc/raddb/radiusd.conf
修改后的 radiusd.conf 文件片段如下:
图 8
再次执行radtest测试服务器 # radtest testing password123 127.0.0.1 0 testing123 ,结果显示:
图 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
结果显示:
图 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行(不同版本可能会有不同)
图 11
添加client客户端的ipv6地址
vim /usr/local/etc/raddb/clients.conf
图 12
这样就可以通过2004::4888:5796:958c:8888的机器访问服务器(2004::480d:5786:958c:4e2c)的radius服务了。