在上篇文章中使用了 ISE 作为 AAA server,ISE 功能上虽然较多,但是对于新手操作起来还是有些繁琐。所以我在想是否能找到 AAA server 替代品,只需要简单的配置就可以满足我认证测试的需求,然后我就找到 freeradius。所以本文就介绍下我在测试 freeradius 时遇到的一些坑以及排错。
Starting the server #
docker run --rm --name my-radius -d freeradius/freeradius-server
使用上述命令就可以快速创建一个 radius server,添加“–rm”使容器停止后自动删除.
由于这个容器中没 vi/nano command,我无法去编辑配置文件,所以在将 docker run 起来后进去将配置文件 copy 出来一份,在本地进行修改。
[root@server1 ~]# docker exec -it my-radius /bin/bash
root@3c05e2ec2770:/# cd /etc/raddb
root@3c05e2ec2770:/etc/raddb# ls -al
total 148
drwxr-s--x. 9 freerad freerad 4096 Oct 7 19:58 .
drwxr-xr-x. 1 root root 66 Feb 22 02:21 ..
-rw-r--r--. 1 root root 20819 Oct 7 17:00 README.rst
drwxr-s--x. 2 freerad freerad 4096 Oct 7 20:00 certs
-rw-r-----. 1 root freerad 8323 Oct 7 17:00 clients.conf
-rw-r--r--. 1 root freerad 1440 Oct 7 17:00 dictionary
-rw-r-----. 1 root freerad 2661 Oct 7 17:00 experimental.conf
lrwxrwxrwx. 1 root root 28 Oct 7 17:00 hints -> mods-config/preprocess/hints
lrwxrwxrwx. 1 root root 33 Oct 7 17:00 huntgroups -> mods-config/preprocess/huntgroups
drwxr-xr-x. 2 root root 4096 Oct 7 19:58 mods-available
drwxr-xr-x. 9 root root 126 Oct 7 19:58 mods-config
drwxr-xr-x. 2 root root 4096 Oct 7 19:58 mods-enabled
-rw-r--r--. 1 root root 52 Oct 7 17:00 panic.gdb
drwxr-s--x. 2 freerad freerad 205 Oct 7 19:58 policy.d
-rw-r-----. 1 root freerad 28825 Oct 7 17:00 proxy.conf
-rw-r-----. 1 root freerad 31521 Oct 7 17:00 radiusd.conf
drwxr-s--x. 2 freerad freerad 4096 Oct 7 19:58 sites-available
drwxr-s--x. 2 freerad freerad 41 Oct 7 19:58 sites-enabled
-rw-r--r--. 1 root root 3470 Oct 7 17:00 templates.conf
-rw-r--r--. 1 root root 8536 Oct 7 17:00 trigger.conf
lrwxrwxrwx. 1 root root 27 Oct 7 17:00 users -> mods-config/files/authorize
root@3c05e2ec2770:/etc/raddb#
root@3c05e2ec2770:/etc/raddb#
root@3c05e2ec2770:/etc/raddb# cat clients.conf
root@3c05e2ec2770:/etc/raddb# cat mods-config/files/authorize
root@3c05e2ec2770:/etc/raddb# cat /etc/freeradius/sites-enabled/default
root@3c05e2ec2770:/etc/raddb# exit
exit
[root@server1 ~]# docker stop my-radius <<< 停止容器,因为后面我们要使用自己定义的配置文件启动
my-radius
[root@server1 ~]#
一共三个文件,“clients.conf”用于存储网络设备信息,“mods-config/files/authorize”用于存储认证授权信息,还有一个“/etc/freeradius/sites-enabled/default” 属于配置信息。
下面我们在本地新建三个文件,default 文件是我们从 docker 中 copy 出来的,client.conf 和 authorize 可以使用从 docker 中 copy 出来然后新增如下配置, 或者直接自己新建。
[root@server1 freeradius]# ls
authorize clients.conf default
[root@server1 freeradius]# cat clients.conf
client dockernet {
ipaddr = 172.17.0.0/16
secret = testing123
}
client 10.124.36.67 {
ipv4addr = 10.124.36.67/32
secret = cisco
nastype = cisco
shortname = 9001-B
}
[root@server1 freeradius]# cat authorize
bob Cleartext-Password := "test"
rory Cleartext-Password := "cisco!123"
Service-Type = NAS-Prompt-User,
Login-Service = Telnet,
Cisco-AVPair = "shell:tasks*=#priv15,"
[root@server1 freeradius]#
其中最重要的是需要修改 default 配置文件, 将“filter_password”前面的#去掉.
[root@server1 freeradius]# vim default
#
filter_password
#
这样做的原因是 XR 的设备在传递 password 的时候会额外填充一些字符串,radius 默认会把它当作密码的一部分,我们在配置文件中去开启"filter_password"会将这些字符过滤掉,只保留真正的 password.
准备好三个文件后,我们就可以使用本地的配置文件起个 radius 服务了,如下:
[root@server1 freeradius]# ls
authorize clients.conf default
[root@server1 freeradius]#docker run --rm --name my-radius -v /root/freeradius/clients.conf:/etc/raddb/clients.conf -v /root/freeradius/authorize:/etc/raddb/mods-config/files/authorize -v /root/freeradius/default:/etc/freeradius/sites-enabled/default -p 1812-1813:1812-1813/udp -d freeradius/freeradius-server
bdd046015ba4ecdb19207d164cce5f326f9b20b641524c71b70c0e7b8033daca
[root@server1 freeradius]#
当然你也可以加上"-X" 来调试,去掉-d;这样 docker 就不会 detach,debug 的信息会实时的输出。
[root@server1 freeradius]# docker run --rm --name my-radius -v /root/freeradius/clients.conf:/etc/raddb/clients.conf -v /root/freeradius/authorize:/etc/raddb/mods-config/files/authorize -v /root/freeradius/default:/etc/freeradius/sites-enabled/default -p 1812-1813:1812-1813/udp freeradius/freeradius-server -X
如果需要更改配置可以直接在本地修改, 修改完成后,停止之前的容器,重新创建一个:
[root@server1 freeradius]# docker stop my-radius
[root@server1 freeradius]# docker run --rm --name my-radius -v /root/freeradius/clients.conf:/etc/raddb/clients.conf -v /root/freeradius/authorize:/etc/raddb/mods-config/files/authorize -v /root/freeradius/default:/etc/freeradius/sites-enabled/default -p 1812-1813:1812-1813/udp -d freeradius/freeradius-server
ASR9K AAA 配置: #
usergroup priv15
taskgroup root-system
taskgroup cisco-support
description pri15
!
radius source-interface MgmtEth0/RSP0/CPU0/0 vrf MGMT
radius-server host 10.70.79.197 auth-port 1812 acct-port 1813
key 7 05080F1C2243
!
aaa group server radius XU
server 10.70.79.197 auth-port 1812 acct-port 1813
vrf MGMT
source-interface MgmtEth0/RSP0/CPU0/0
!
aaa authorization exec console local
aaa authorization commands console none
aaa authentication login console local
aaa authentication login default group XU local
验证 Radius 认证授权过程: #
Radius 在授权上没法做到基于命令行的, 只能简单的基于权限,所以数据包的交互上很简单.
如上,radius 在返回“priv15”的 usergroup 后,路由器就不会再次向 server 进行授权验证。
快速搭建 freeradius: #
或者你可以 clone 我的配置文件, 直接使用。如下:
[root@server2 ~]# git clone https://github.com/xuxing3/freeradius
Cloning into 'freeradius'...
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 5 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (5/5), done.
[root@server2 ~]# cd freeradius/
[root@server2 freeradius]# ls
authorize clients.conf default
[root@server2 freeradius]#
[root@server2 freeradius]# docker run --rm --name my-radius -v /root/freeradius/clients.conf:/etc/raddb/clients.conf -v /root/freeradius/authorize:/etc/raddb/mods-config/files/authorize -v /root/freeradius/default:/etc/freeradius/sites-enabled/default -p 1812-1813:1812-1813/udp -d freeradius/freeradius-server