centos7 下用FREERADIUS3+ldap(windowsAD)搭建radius服务器
1安装软件:
yum install freeradius freeradius-ldap freeradius-utils -y
2启动服务
systemctl start radiusdservice
3开机自动启动
systemctl enable radiusdservice
4修改配置文件 /etc/raddb/mods-available/ldap主要是ldap部分,其它都是默认
[root@10-57-22-55 mods-available]# cat /etc/raddb/mods-available/ldap | grep -v '#' | grep -v ^$
5在 mods-enabled/ 下执行ln 注意后面有点
6在 sites-available/ 下创建 site_ldap
[root@10-57-22-55 sites-available]# cat site_ldap
7在 sites-enabled/ 下执行ln 注意后面有点
重启服务器
systemctl restart radiusdservice
测试 命令如下
radtest user password localhost:1833 0 testing123
以下结果表示成功:Received Access-Accep(密码带特殊字符需要用‘’引号引起来)
以下为密码错误Received Access-Reject
简单的说来,LDAP是一个得到关于人或者资源的集中、静态数据的快速方式。
LDAP是一个用来发布目录信息到许多不同资源的协议。通常它都作为一个集中的地址被使用,不过根据组织者的需要,它可以做得更加强大。
LDAP其实是一个电话簿,类似于我们所使用诸如NIS(Network Information Service)、DNS (Domain Name Service)等网络目录,也类似于你在花园中所看到的树木。
不少LDAP开发人员喜欢把LDAP与关系数据库相比,认为是另一种的存贮方式,然后在读性能上进行比较。实际上,这种对比的基础是错误的。LDAP和关系数据库是两种不同层次的概念,后者是存贮方式(同一层次如网格数据库,
对象数据库),前者是存贮模式和访问协议。LDAP是一个比关系数据库抽象层次更高的存贮概念,与关系数据库的查询语言SQL属同一级别。LDAP最基本
的形式是一个连接数据库的标准方式。该数据库为读查询作了优化。因此它可以很快地得到查询结果,不过在其它方面,例如更新,就慢得多。
特殊的数据库
从另一个意义上 LDAP是实现了指定的数据结构的存贮,它是一种特殊的数据库。但是LDAP和一般的数据库不同,明确这一点是很重要的。 LDAP对查询进行了优化,与写性能相比LDAP的读性能要优秀很多。
就象Sybase、Oracle、Informix或Microsoft的数据库管理系统(DBMS)是用于处理查询和更新关系型数据库那样,LDAP服务器也是用来处理查询和更新LDAP目录的。换句话来说LDAP目录也是一种类型的数据库,但不是关系型数据库。要特别注意的是,LDAP通常作为一个 hierarchical数据库使用,而不是一个关系数据库。因此,它的结构用树来表示比用表格好。正因为这样,就不能用SQL语句了。
21世纪的LDAP技术发展很快。 几乎所有计算机平台上的所有的应用程序都可以从LDAP目录中获取信息。LDAP目录中可以存储各种类型的数据:电子邮件地址、邮件路由信息、人力资源数据、公用密匙、联系人列表,等等。通过把LDAP目录作为系统集成中的一个重要环节,可以简化员工在企业内部查询信息的步骤,甚至连主要的数据源都可以放在任何地方。
服务器
LDAP服务器可以用“推”或“拉”的方法复制部分或全部数据,例如:可以把数据“推”到远程的办公室,以增加数据的安全性。复制技术是内置在LDAP服务器中的而且很容易配置。如果要在DBMS中使用相同的复制功能,数据库厂商就会要你支付额外的费用,而且也很难管理。
作为一名网络管理员,您需要为您所需管理的每个网络设备存放用于管理的用户信息。但是网络设备通常只支持有限的用户管理功能。学习如何使用Linux上的一个外部RADIUS服务器来验证用户,具体来说是通过一个LDAP服务器进行验证,可以集中放置存储在LDAP服务器上并且由RADIUS服务器进行验证的用户信息,从而既可以减少用户管理上的管理开销,又可以使远程登录过程更加安全。
数据安全作为现代系统中网络安全的一部分,与系统安全一样的重要,所以保护数据--确保提供机密性、完整性和可用性--对管理员来说至关重要。
在本文中,我将谈到数据安全性的机密性方面:确保受保护的数据只能被授权用户或系统访问。您将学习如何在Linux系统上建立和配置一个Remote Authentication Dial-In User Service 服务器(RADIUS),以执行对用户的验证、授权和记帐(AAA)。
各组成元素介绍
首先让我们谈一谈RADIUS协议、AAA组件以及它们如何工作,另外还有LDAP协议。
Remote Authentication Dial-In User Service 协议是在IET的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)是一种开放标准,它定义了用于访问和更新类X500 目录中信息的一种方法。LDAP可用于将用户信息保存在一个中央场所,从而不必将相同的信息存储在每个系统上。它还可以用于以一种一致的、可控制的方式维护和访问信息。
LDAP在一个集中的目录中管理用户,从而简化了用户管理工作。除了存储用户信息外,在LDAP中定义用户还可以使一些可选特性得到启用,例如限制登录的数量。在本文中,您将学习如何配置RADIUS服务器,以便基于LDAP验证用户--由于本文的重点在于RADIUS,我不会描述关于LDAP服务器的安装和配置的细节。
OpenLDAP是LDAP的一种开放源码实现。在OpenLDAPorg上可以找到关于它的详细信息(请参阅参考资料获得相关链接)。
场景
想像以下场景:
用户在家里可以通过拨号验证访问他公司的内部网。
带无线支持的笔记本电脑可以通过无线验证连接到一个校园网。
管理员使用他们的工作站通过管理用户验证以telnet或HTTP登录到网络设备。
所有这些验证任务都可以通过一个RADIUS服务器基于一个中央LDAP服务器来完成(见图 1)。
图1 通过RADIUS和LDAP进行验证
在本文中,我将重点描述对最后一种选项的实现,作为对该解决方案的一个介绍。首先安装RADIUS服务器。
安装 RADIUS
RADIUS服务器软件可以从多个地方获得。在本文中,我将使用FreeRADIUS(请参阅参考资料获得相关链接),但Cisco Secure Access Control Server (ACS)是一种集中式用户访问控制框架,可用于跨UNIX和Windows上多个Cisco设备的用户管理,并支持Cisco 特有的协议TACACS+(据说在支持TACACS+的设备上可拥有更多的特性)。
FreeRADIUS是来自开放源码社区的一种强大的Linux上的RADIUS服务器,可用于如今的分布式和异构计算环境。FreeRADIUS 102 支持LDAP、MySQL、PostgreSQL和Oracle数据库,并与诸如EAP和Cisco LEAP之类的网络协议兼容。FreeRADIUS目前被部署在很多大型生产网络系统中。
下面的步骤演示如何在Red Hat Enterprise Linux Advanced Server 30上安装和测试FreeRADIUS 102:
清单1 安装和测试FreeRADIUS
tar -zxvf freeradius-102targz - 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文件夹下。首先,我们需要像下面这样修改radiusdconf文件。
清单2 修改radiusdconf
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 = "bluepagesibmcom" - the hostname or IP address of the LDAP server
port = 636 - encrypted communications
basedn = "ou=bluepages,o=ibmcom" - define the base Distinguished Names (DN),
- under the Organization (O) "ibmcom",
- 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/clientsconf 文件中配置的。有两种方式可用于配置RADIUS客户机。您可以按IP subnet将NAS分组(清单 3),或者可以按主机名或 IP 地址列出NAS(清单4)。如果按照第二种方法,可以定义shortname和nastype。
清单3 按IP subnet将NAS分组
client 19216800/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 19216801 {
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 121路由器,我们将启用AAA,然后配置验证、授权和记帐。
清单6 启用AAA
aaa new-model
radius-server host 1921680100
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 1201T1的Cisco 1200 Series AP。如图2中的屏幕快照所示,您:
输入服务器名或 IP 地址和共享的秘密。
选择“Radius”作为类型,并选中“User Authentication”。
图2 为WAP配置NAS
实际上,在这里您还可以配置EAP Authentication,使FreeRADIUS可用于验证无线LAN的一般用户。
记帐:工作中的RADIUS
现在所有配置都已经完成,FreeRADIUS服务器可以开始记录NAS发送的所有信息,将该信息存储在/var/log/radius/radiuslog文件中,就像这样:
清单10 /var/log/radius/radiuslog文件
Thu Mar 3 21:37:32 2005 : Auth: Login OK: [David] (from client
mylan port 1 cli 192168094)
Mon Mar 7 23:39:53 2005 : Auth: Login incorrect: [John] (from
client mylan port 1 cli 192168094)
详细的记帐信息被存放在/var/log/radius/radacct目录中。清单11表明,David在2005年3月4日19:40到19:51这段时间里从 192168094登录到了路由器19216801。这么详细的信息对于正在调查安全事故以及试图维护易于审计的记录的管理员来说无疑是一大帮助。
清单11 RADIUS 提供的记帐细节示例
Fri Mar 4 19:40:12 2005
NAS-IP-Address = 19216801
NAS-Port = 1
NAS-Port-Type = Virtual
User-Name = "David"
Calling-Station-Id = "192168094"
Acct-Status-Type = Start
Acct-Authentic = RADIUS
Service-Type = NAS-Prompt-User
Acct-Session-Id = "00000026"
Acct-Delay-Time = 0
Client-IP-Address = 19216801
Acct-Unique-Session-Id = "913029a52dacb116"
Timestamp = 1109936412
Fri Mar 4 19:51:17 2005
NAS-IP-Address = 19216801
NAS-Port = 1
NAS-Port-Type = Virtual
User-Name = "David"
Calling-Station-Id = "192168094"
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 = 19216801
Acct-Unique-Session-Id = "913029a52dacb116"
Timestamp = 1109937077
结束语
通过遵循本文中列出的简单步骤,您可以建立一个Remote Authentication Dial-In User Service服务器,该服务器使用一个外部的LDAP服务器来处理为网络安全问题而进行的验证、授权和记帐。本文提供了以下内容来帮助您完成此任务:
对RADIUS和LDAP服务器以及AAA概念的介绍。
一个融入了安装和配置任务的场景。
关于安装和配置RADIUS服务器的说明。
关于配置网络访问服务器的细节。
RADIUS将提供和管理的详细信息的一个示例。
这些指示可以快速确保受保护的数据只能由Linux系统上已授权的实体访问。
1 安装LDAP插件
[ https://pluginsjenkinsio/ldap/]
2 添加一个Jenkins LDAP配置
Server :这里填写LDAP server的地址即可
root DN : 这里填写你需要的base路径, 如果这里不填则勾选 Allow blank rootDN ,但是user search base和group search base则不能为空,否则会报找不到object的错误
User search base :可以不填,则会查找改root DN下的所有用户
User search filter :一般包含三种, uid={0}; cn={0}; sAMAccountName={0}, 如果不确定LDAP Server怎样设置的,则可以依次尝试
Group search base : 可以不填,则会查找改root DN下的所有组
Manager DN :认证查询该LDAP服务器的用户DN,包括该用户的完整CN, OU, DC
Manager Password : 上述用户的密码
其他可以保持默认配置
3 添加另外一个LDAP Server 的配置
点击 Add Server , 可以按照上述配置继续配置,这两个可以是不同的配置
配置多个ldap时建议勾选上 Ignore if unavailable ,这样如果其中一个ldap server不可用,会尝试使用下一些个ldap server。
4 配置过程中遇到的问题
41 错误日志:
User lookup: failed for user "your_username" LdapCallback;null; nested exception is javaxnamingPartialResultException [Root exception is javaxnamingCommunicationException: dc1dc2dc3:389 [Root exception is javanetUnknownHostException: dc1dc2dc3]] LDAP Group lookup: could not verify
其中your_username是你试图登陆的一个AD用户; dc1dc2dc3是你设置的DC=dc1, DC=dc2, DC=dc3,我这里出现了该问题是因为LDAP server我提供的是一个IP地址
原因:该问题是找不到 dc1dc2dc3该域名,请在AD上配置域名解析 your_LDAP_IP 到dc1dc2dc3或者临时在系统的/etc/hosts文件中添加该域名解析
42 错误日志:
LdapCallback;LDAP response read timed out, timeout used:60000ms; nested exception is javaxnamingNamingException: LDAP response read timed out, timeout used:60000ms; remaining name ''
这个问题是因为connection pool的连接有问题,解决方案是在Jenkins的LDAP配置中添加一个环境变量 comsunjndildapconnectpool 设为 false , 具体可参考:[ https://guvcloud/post/jenkins-and-ldap/]
43 我使用的是docker 容器跑的Jenkins,有一些有用的命令
docker logs --following container_name/ID 查看日志
docker exec --user root -it container_name/ID /bin/bash 以root用户登陆该容器
44 如果登陆速度较慢,可以enable cache来减少查询LDAP server的负载
C#提供了 LdapConnection 类用于连接Microsoft Active Directory 域服务或 LDAP 服务器的 TCP/IP 或 UDP LDAP 连接。
下面是连接 Ldap的连接方法和大家分享下:
1static LdapConnection ldapConnection;
2 static string ldapServer;
3 static NetworkCredential credential;
4 static string targetOU;
5 static string pwd;
6 public void LdapBind()
7 {
8 ldapServer = "1721869204:389";
9 targetOU = "cn=Manager,dc=tst,dc=com";
10 pwd = "000000";
11
12 //credential = new NetworkCredential(StringEmpty, StringEmpty);
13 credential = new NetworkCredential(targetOU, pwd);
14
15
16 string dn = "";
17
18 //ldapConnection = new LdapConnection(new LdapDirectoryIdentifier(ldapServer));
19 //ldapConnectionSessionOptionsProtocolVersion = 3;//Ldap协议版本
20 //ldapConnectionAuthType = AuthTypeAnonymous;//不传递密码进行连接
21
22 ldapConnection = new LdapConnection(ldapServer);
23 ldapConnectionAuthType = AuthTypeBasic;
24 ldapConnectionCredential = credential;
25
26 try
27 {
28 ConsoleWriteLine("链接");
29 ldapConnectionBind();
30 ConsoleWriteLine("链接成功");
31
32 }
33 catch (Exception ee)
34 {
35 ConsoleWriteLine(eeMessage);
36 }
37
38
39 ldapConnectionDispose();
40
41 }
注意
1、如果我们使用ldapConnectionAuthType = AuthTypeAnonymous; 的认证方式,就一定要让Dn与Pwd为空,实现匿名认证方式,如:
credential = new NetworkCredential(StringEmpty, StringEmpty);
2、使用c#连接Ldap服务器,还可以使用 Novell公司的NovellDirectoryLdap来实现。
转载仅供参考,版权属于原作者。祝你愉快,哦
为什么连接不上LDAP服务器
@(#) $OpenLDAP: slapd 234 (Jun 24 2005 14:31:55) $
root@globus4403:/usr/hhz/openldap-234/servers/slapd
daemon_init: <null>;
daemon_init: listen on ldap:///
daemon_init: 1 listeners to open
ldap_url_parse_ext(ldap:///)
daemon: IPv6 socket()() failed errno=97 (Address family not supported by protocol)daemon: initialized ldap:///
daemon_init: 2 listeners opened
No passwd entry for user ldap
0条评论