Skip to main content

Configure ASR9K AAA with Freeradius

·600 words·3 mins
Rory
Author
Rory
Step by step the ladder is ascended

在上篇文章中使用了 ISE 作为 AAA server,ISE 功能上虽然较多,但是对于新手操作起来还是有些繁琐。所以我在想是否能找到 AAA server 替代品,只需要简单的配置就可以满足我认证测试的需求,然后我就找到 freeradius。所以本文就介绍下我在测试 freeradius 时遇到的一些坑以及排错。

freeradius/freeradius-server

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

Reference:
#