在 Linux 上构建一个 RADIUS 服务器

发表于:2007-05-25来源:作者:点击数: 标签:
将远程网络登录集中化并保证其安全 级别: 初级 Wei Zhang IT 专家, IBM 2005 年 6 月 23 日 作为一名网络管理员,您需要为您所需管理的每个网络设备存放用于管理的用户信息。但是网络设备通常只支持有限的用户管理功能。学习如何使用 Linux 上的一个外部 RAD
将远程网络登录集中化并保证其安全

级别: 初级

Wei Zhang
IT 专家, IBM
2005 年 6 月 23 日

作为一名网络管理员,您需要为您所需管理的每个网络设备存放用于管理的用户信息。但是网络设备通常只支持有限的用户管理功能。学习如何使用 Linux® 上的一个外部 RADIUS 服务器来验证用户,具体来说是通过一个 LDAP 服务器进行验证,可以集中放置存储在 LDAP 服务器上并且由 RADIUS 服务器进行验证的用户信息,从而既可以减少用户管理上的管理开销,又可以使远程登录过程更加安全。

数据安全作为现代系统中网络安全的一部分,与系统安全一样的重要,所以保护数据 —— 确保提供机密性、完整性和可用性 —— 对管理员来说至关重要。

在本文中,我将谈到数据安全性的机密性方面:确保受保护的数据只能被授权用户或系统访问。您将学习如何在 Linux 系统上建立和配置一个 Remote Authentication Dial-In User Service 服务器(RADIUS),以执行对用户的验证、授权和记帐(AAA)。

各组成元素介绍
首先让我们谈一谈 RADIUS 协议、AAA 组件以及它们如何工作,另外还有 LDAP 协议。

Remote Authentication Dial-In User Service 协议是在 IETF 的 RFC 2865 中定义的(请参阅 参考资料 获得相关链接)。它允许网络访问服务器(NAS)执行对用户的验证、授权和记帐。RADIUS 是基于 UDP 的一种客户机/服务器协议。RADIUS 客户机是网络访问服务器,它通常是一个路由器、交换机或无线访问点(访问点是网络上专门配置的节点;WAP 是无线版本)。RADIUS 服务器通常是在 UNIX 或 Windows 2000 服务器上运行的一个监护程序。

RADIUS 和 AAA
如果 NAS 收到用户连接请求,它会将它们传递到指定的 RADIUS 服务器,后者对用户进行验证,并将用户的配置信息返回给 NAS。然后,NAS 接受或拒绝连接请求。

功能完整的 RADIUS 服务器可以支持很多不同的用户验证机制,除了 LDAP 以外,还包括:

  • PAP(Password Authentication Protocol,密码验证协议,与 PPP 一起使用,在此机制下,密码以明文形式被发送到客户机进行比较);
  • CHAP(Challenge Handshake Authentication Protocol,挑战握手验证协议,比 PAP 更安全,它同时使用用户名和密码);
  • 本地 UNIX/Linux 系统密码数据库(/etc/passwd);
  • 其他本地数据库。

在 RADIUS 中,验证和授权是组合在一起的。如果发现了用户名,并且密码正确,那么 RADIUS 服务器将返回一个 Access-Accept 响应,其中包括一些参数(属性-值对),以保证对该用户的访问。这些参数是在 RADIUS 中配置的,包括访问类型、协议类型、用户指定该用户的 IP 地址以及一个访问控制列表(ACL)或要在 NAS 上应用的静态路由,另外还有其他一些值。

RADIUS 记帐特性(在 RFC 2866 中定义;请参阅 参考资料 获得相关链接)允许在连接会话的开始和结束发送数据,表明在会话期间使用的可能用于安全或开单(billing)需要的大量资源 —— 例如时间、包和字节。

轻量级目录访问协议
轻量级目录访问协议(Lightweight Directory Access Protocol,LDAP)是一种开放标准,它定义了用于访问和更新类 X.500 目录中信息的一种方法。LDAP 可用于将用户信息保存在一个中央场所,从而不必将相同的信息存储在每个系统上。它还可以用于以一种一致的、可控制的方式维护和访问信息。

LDAP 在一个集中的目录中管理用户,从而简化了用户管理工作。除了存储用户信息外,在 LDAP 中定义用户还可以使一些可选特性得到启用,例如限制登录的数量。在本文中,您将学习如何配置 RADIUS 服务器,以便基于 LDAP 验证用户 —— 由于本文的重点在于 RADIUS,我不会描述关于 LDAP 服务器的安装和配置的细节。

OpenLDAP 是 LDAP 的一种开放源码实现。在 OpenLDAP.org 上可以找到关于它的详细信息(请参阅 参考资料 获得相关链接)。

场景
想像以下场景:

  • 用户在家里可以通过拨号验证访问他公司的内部网。
  • 带无线支持的笔记本电脑可以通过无线验证连接到一个校园网。
  • 管理员使用他们的工作站通过管理用户验证以 telnet 或 HTTP 登录到网络设备。

所有这些验证任务都可以通过一个 RADIUS 服务器基于一个中央 LDAP 服务器来完成(见图 1)。

图 1. 通过 RADIUS 和 LDAP 进行验证
通过 RADIUS 和 LDAP 进行验证

在本文中,我将重点描述对最后一种选项的实现,作为对该解决方案的一个介绍。首先安装 RADIUS 服务器。

安装 RADIUS
RADIUS 服务器软件可以从多个地方获得。在本文中,我将使用 FreeRADIUS(请参阅 参考资料 获得相关链接),但 Cisco Secure Access Control Server (ACS) 是一种集中式用户访问控制框架,可用于跨 UNIX 和 Windows 上多个 Cisco 设备的用户管理,并支持 Cisco 特有的协议 TACACS+(据说在支持 TACACS+ 的设备上可拥有更多的特性)。

FreeRADIUS 是来自开放源码社区的一种强大的 Linux 上的 RADIUS 服务器,可用于如今的分布式和异构计算环境。FreeRADIUS 1.0.2 支持 LDAP、MySQL、PostgreSQL 和 Oracle 数据库,并与诸如 EAP 和 Cisco LEAP 之类的网络协议兼容。FreeRADIUS 目前被部署在很多大型生产网络系统中。

下面的步骤演示如何在 Red Hat Enterprise Linux Advanced Server 3.0 上安装和测试 FreeRADIUS 1.0.2:

清单 1. 安装和测试 FreeRADIUS

            tar -zxvf freeradius-1.0.2.tar.gz         - extract it with gunzip and tar
            ./configure
            make
            make install                              - run this command as root
            radiusd or                                - start RADIUS server
            radiusd -X                                - start RADIUS server in debug mode
            radtest test test localhost 0 testing123  - test RADIUS server
            

如果 radtest 收到一个响应,则表明 FreeRADIUS 服务器工作正常。

同时我还推荐另一种免费工具,那就是 NTRadPing(请参阅 参考资料 获得相关链接),它可用于测试来自 Windows 客户机的验证和授权请求。它可以显示从 RADIUS 服务器发回的详细的响应,例如属性值。

现在让我们来配置 FreeRADIUS。

配置 FreeRADIUS
RADIUS 服务器的配置包括对服务器、客户机和用户的配置(都是用于验证和授权)。出于不同的需要,对 RADIUS 服务器可以有不同的配置。幸运的是,大多数配置都是类似的。

配置服务器
FreeRADIUS 配置文件通常位于 /etc/raddb 文件夹下。首先,我们需要像下面这样修改 radiusd.conf 文件。

清单 2. 修改 radiusd.conf
1) Global settings:
            log_auth = yes                - log authentication requests to the log file
            log_auth_badpass = no         - don't log passwords if request rejected
            log_auth_goodpass = no        - don't log passwords if request accepted
            2) LDAP Settings:
            modules {
            ldap {
            server = "bluepages.ibm.com"   - the hostname or IP address of the LDAP server
            port = 636                     - encrypted communications
            basedn = "ou=bluepages,o=ibm.com"   - define the base Distinguished Names (DN),
            - under the Organization (O) "ibm.com",
            - in the Organization Unit (OU) "bluepages"
            filter = "(mail=%u)"                   - specify search criteria
            base_filter = "(objectclass=person)"   - specify base search criteria
            }
            authenticate {                - enable authentication against LDAP
            Auth-Type LDAP {
            ldap
            }
            

参数被设为使用 IBM BluePages,这是 LDAP 服务的一个实例。对于其他 LDAP 服务器,参数可能有所不同。

配置客户机
客户机是在 /etc/raddb/clients.conf 文件中配置的。有两种方式可用于配置 RADIUS 客户机。您可以按 IP subnet 将 NAS 分组(清单 3),或者可以按主机名或 IP 地址列出 NAS(清单 4)。如果按照第二种方法,可以定义 shortnamenastype

清单 3. 按 IP subnet 将 NAS 分组

            client 192.168.0.0/24 {
            secret      = mysecret1   - the "secret" should be the same as configured on NAS
            shortname   = mylan       - the "shortname" can be used for logging
            nastype      = cisco      - the "nastype" is used for checkrad and is optional
            }
            

 

清单 4. 按主机名或 IP 地址列出 NAS

            client 192.168.0.1 {
            secret      = mysecret1
            shortname   = myserver
            nastype      = other
            }
            

为验证而配置用户
文件 /etc/raddb/user 包含每个用户的验证和配置信息。

清单 5. /etc/raddb/user 文件
1) Authentication type:
            Auth-Type := LDAP       - authenticate against LDAP
            Auth-Type := Local, User-Password == "mypasswd"
            - authenticate against the
            - password set in /etc/raddb/user
            Auth-Type := System     - authenticate against the system password file
            - /etc/passwd or /etc/shadow
            2) Service type:
            Service-Type = Login,   - for administrative login
            

为授权而配置用户
下面的验证服务器属性-值对(AV)应该为用户授权而进行配置。在验证被接受后,这个属性-值对被返回给 NAS,作为对管理员登录请求的响应。

对于 Cisco 路由器,有不同的权限级别:

  • 级别 1 是无特权(non-privileged)。提示符是 router>,这是用于登录的默认级别。
  • 级别 15 是特权(privileged)。 提示符是 router#,这是进入 enable 模式后的级别。
  • 级别 2 到 14 在默认配置中不使用。

下面的命令可以使一个用户从网络访问服务器登录,并获得对 EXEC 命令的立即访问:

cisco-avpair ="shell:priv-lvl=15"

下面的代码处理相同的任务,这一次是对于 Cisco 无线访问点:

Cisco:Avpair = "aironet:admin-capability=write+snmp+ident+firmware+admin"

任何功能组合都和这个属性一起返回:

Cisco:Avpair = "aironet:admin-capability=ident+admin"
Cisco:Avpair = "aironet:admin-capability=admin"

请与 Cisco 联系,以获得关于这些命令的更多信息。

配置网络访问服务器
接下来我们将配置 NAS,首先是配置一个 Cisco 路由器,然后轮到一个 Cisco WAP。

对于 Cisco IOS 12.1 路由器,我们将启用 AAA,然后配置验证、授权和记帐。

清单 6. 启用 AAA

            aaa new-model
            radius-server host 192.168.0.100
            radius-server key mysecret1
            

AAA 在路由器上应该被启用。然后,指定能为 NAS 提供 AAA 服务的 RADIUS 服务器的列表。加密密钥用于加密 NAS 和 RADIUS 服务器之间的数据传输。它必须与 FreeRADIUS 上配置的一样。

清单 7. 配置验证

            aaa authentication login default group radius local
            line vty 0 4
            login authentication default
            

在这个例子中,网络管理员使用 RADIUS 验证。如果 RADIUS 服务器不可用,则使用 NAS 的本地用户数据库密码。

清单 8. 配置授权

            aaa authorization exec default group radius if-authenticated
            

允许用户在登录到 NAS 中时运行 EXEC shell。

清单 9. 配置记帐

            aaa accounting system default start-stop group radius
            aaa accounting network default start-stop group radius
            aaa accounting connection default start-stop group radius
            aaa accounting exec default stop-only group radius
            aaa accounting commands 1 default stop-only group radius
            aaa accounting commands 15 default wait-start group radius
            

必须对路由器进行特别的配置,以使之发送记帐记录到 RADIUS 服务器。使用清单 9 中的命令记录关于 NAS 系统事件、网络连接、输出连接、EXEC 操作以及级别 1 和级别 15 上的命令的记帐信息。

这样就好了。现在让我们看看为 Cisco 无线访问点而进行的配置。下面的配置适用于带有 Firmware 12.01T1 的 Cisco 1200 Series AP。如图 2 中的屏幕快照所示,您:

  • 输入服务器名或 IP 地址和共享的秘密。
  • 选择“Radius”作为类型,并选中“User Authentication”。

图 2. 为 WAP 配置 NAS
图 2. 为 WAP 配置 NAS

实际上,在这里您还可以配置 EAP Authentication,使 FreeRADIUS 可用于验证无线 LAN 的一般用户。

记帐:工作中的 RADIUS
现在所有配置都已经完成,FreeRADIUS 服务器可以开始记录 NAS 发送的所有信息,将该信息存储在 /var/log/radius/radius.log 文件中,就像这样:

清单 10. /var/log/radius/radius.log 文件

            Thu Mar 3 21:37:32 2005 : Auth: Login OK: [David] (from client
            mylan port 1 cli 192.168.0.94)
            Mon Mar 7 23:39:53 2005 : Auth: Login incorrect: [John] (from
            client mylan port 1 cli 192.168.0.94)
            

详细的记帐信息被存放在 /var/log/radius/radacct 目录中。清单 11 表明,David 在 2005 年 3 月 4 日 19:40 到 19:51 这段时间里从 192.168.0.94 登录到了路由器 192.168.0.1。这么详细的信息对于正在调查安全事故以及试图维护易于审计的记录的管理员来说无疑是一大帮助。

清单 11. RADIUS 提供的记帐细节示例

            Fri Mar  4 19:40:12 2005
            NAS-IP-Address = 192.168.0.1
            NAS-Port = 1
            NAS-Port-Type = Virtual
            User-Name = "David"
            Calling-Station-Id = "192.168.0.94"
            Acct-Status-Type = Start
            Acct-Authentic = RADIUS
            Service-Type = NAS-Prompt-User
            Acct-Session-Id = "00000026"
            Acct-Delay-Time = 0
            Client-IP-Address = 192.168.0.1
            Acct-Unique-Session-Id = "913029a52dacb116"
            Timestamp = 1109936412
            Fri Mar  4 19:51:17 2005
            NAS-IP-Address = 192.168.0.1
            NAS-Port = 1
            NAS-Port-Type = Virtual
            User-Name = "David"
            Calling-Station-Id = "192.168.0.94"
            Acct-Status-Type = Stop
            Acct-Authentic = RADIUS
            Service-Type = NAS-Prompt-User
            Acct-Session-Id = "00000026"
            Acct-Terminate-Cause = Idle-Timeout
            Acct-Session-Time = 665
            Acct-Delay-Time = 0
            Client-IP-Address = 192.168.0.1
            Acct-Unique-Session-Id = "913029a52dacb116"
            Timestamp = 1109937077
            

结束语
通过遵循本文中列出的简单步骤,您可以建立一个 Remote Authentication Dial-In User Service 服务器,该服务器使用一个外部的 LDAP 服务器来处理为网络安全问题而进行的验证、授权和记帐。本文提供了以下内容来帮助您完成此任务:

  • 对 RADIUS 和 LDAP 服务器以及 AAA 概念的介绍。
  • 一个融入了安装和配置任务的场景。
  • 关于安装和配置 RADIUS 服务器的说明。
  • 关于配置网络访问服务器的细节。
  • RADIUS 将提供和管理的详细信息的一个示例。

这些指示可以快速确保受保护的数据只能由 Linux 系统上已授权的实体访问。

原文转自:http://www.ltesting.net