Skip to main content

Configure ASR9K AAA with Freeradius

·3 mins
Table of Contents

在上篇文章中使用了 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:
#




Comments