如何处理LDAP配置故障
概述
当遇到LDAP身份验证问题时,我们需要查找实际执行的LDAP查询JFrog平台或JFrog Artifactory以及LDAP目录返回的相应响应。在本文中,我们将展示如何使用tcpdump捕获网络流量,然后利用WireShark UI的优势来分析、过滤和排除LDAP事务。
tcpdump-是一个命令行网络数据包分析器,将帮助我们收集无法在日志中找到的信息。tcpdump是大多数Linux发行版中的标准包,您可以在这里获得它:https://www.tcpdump.org/.
WireShark-是一个开放源码的网络数据包分析器,具有用户界面,有助于故障排除和分析LDAP连接。有关该工具和下载链接的更多信息,请参见https://www.wireshark.org/.
本文中的示例使用以下配置:
JFrog平台:10.132.0.88
LDAP服务器:10.132.0.2
LDAP端口:389
LDAP设置:
LDAP组设置:
LDAP树:
指令
1.运行tcpdump,开始从JFrog平台/ Artifactory服务器主机捕获网络流量。
我们将使用以下命令选项:
我→监听接口。如果未指定,tcpdump将从系统接口列表中查找编号最低的配置up的接口。接口参数“any”可用于从所有接口捕获数据包。
- n→不要将地址(即主机地址、端口号等)转换为名称。
- w文件→将原始数据包写入文件,而不是解析并打印出来。
主机→
港口→
例子:$ tcpdump -i any -n -w /var/opt/jfrog/artifactory/log/ldap. txtPcap主机10.166.0.2,端口389
2.当tcpdump运行时,执行以下LDAP事务之一:
尝试使用LDAP认证方式登录JFrog Platform / Artifactory
从LDAP设置中建立一个测试连接
尝试在“LDAP组设置”中导入LDAP组
3.
4.在Wireshark中打开tcpdump捕获文件(ldap.pcap)。
你现在可以利用Wireshark来过滤流量,同时查看,例如。通过LDAP/TCP协议(显示过滤器).
LDAP连通性分析
现在我们可以分析tcpdump捕获文件(LDAP .pcap),以确定JFrog平台/ Artifactory是否能够连接到LDAP服务器。
1.当成功建立到LDAP服务器的TCP连接时,可以看到以下TCP序列(TCP 3-way握手)。如果你只看到SYN在运行,没有SYN, ACK返回,那么LDAP服务器从JFrog平台/ Artifactory主机是不可达的。
1 10.132.0.88 10.166.0.2 TCP 76 43114→389 [SYN] Seq=0 Win=28400 Len=0 MSS=1420 SACK_PERM=1 TSval=3831820 TSecr=0 WS=128
2 10.166.0.2 10.132.0.88 TCP 76 389→43114 [SYN, ACK] Seq=0 ACK =1 Win=28160 Len=0 MSS=1420 SACK_PERM=1 TSval=958410 TSecr=3831820 WS=128
3 10.132.0.88 10.166.0.2 TCP 68 43114→389 [ACK] Seq=1 ACK =1 Win=28416 Len=0 TSval=3831852 TSecr=958410
2.在下面的例子中,我们可能会看到SYN请求被重传,没有返回SYN, ACK。如果您看到这种情况,请验证您的LDAP服务器是否正常,您配置的LDAP URL是否有效,网络配置(代理、防火墙、路由器等)是否允许流量到达LDAP服务器。1 10.132.0.88 10.166.0.2 TCP 76 47692→389 [SYN] Seq=0 Win=28400 Len=0 MSS=1420 SACK_PERM=1 TSval=4991787 TSecr=0 WS=128
2 10.132.0.88 10.166.0.2 TCP 76 [TCP重传]47692→389 [SYN] Seq=0 Win=28400 Len=0 MSS=1420 SACK_PERM=1 TSval=4992788 TSecr=0 WS=128
3 10.132.0.88 10.166.0.2 TCP 76 [TCP重传]47692→389 [SYN] Seq=0 Win=28400 Len=0 MSS=1420 SACK_PERM=1 TSval=4994792 TSecr=0 WS=128
4 10.132.0.88 10.166.0.2 TCP 76 [TCP重传]47692→389 [SYN] Seq=0 Win=28400 Len=0 MSS=1420 SACK_PERM=1 TSval=4998800 TSecr=0 WS=128
LDAP用户搜索
JFrog平台/ Artifactory通过搜索找到该用户,并获得该用户的DN。搜索请求是根据LDAP Settings中提供的配置构建的。
1.从下面的输出中,您可以看到LDAP User Search返回了1个结果,因为用户存在于Active Directory中。在数据包2中,我们看到用户DN。1 10.132.0.88 10.166.0.2 LDAP 134 searchRequest(16)“ou =用户,dc =测试,dc = com”wholeSubtree
2 10.166.0.2 10.132.0.88 LDAP 398 searchResEntry(16)“cn = Valeriy彼得罗夫,ou =用户,dc =测试,dc = com”
3 10.166.0.2 10.132.0.88 LDAP 82 searchResDone(16) success [1 result]
用户在WireShark中搜索valeriyp的请求(报文1):
用户搜索响应(报文2):
2.下面的示例显示了没有与Active Directory中的任何用户匹配的搜索。
用户搜索“test”请求,用户“test”在AD中找不到,返回“0结果”:1 10.132.0.88 10.166.0.2 LDAP 130 searchRequest(7)“ou =用户,dc =测试,dc = com”wholeSubtree
2 10.166.0.2 10.132.0.88 LDAP 82 searchResDone(7) success [0 results]
请求(报文1):
响应(报文2):
LDAP用户认证
1.下面的示例显示了来自LDAP服务的绑定请求和成功的绑定响应。1 10.132.0.88 10.166.0.2 LDAP 131 binrequest (1)“cn=Valeriy Petrov,ou=Users,dc=test,dc=com”很简单
2 10.166.0.2 10.132.0.88 LDAP 82 bindResponse(1) success .使用实例
在LDAP搜索中找到的用户DN将在binrequest中发送。WireShark会屏蔽密码,将其替换为“simple”。如果我们检查数据包,我们可以在明文中看到密码,“password”在下面的例子中。
2.下面的例子显示了bindResponse中的invalidCredentials错误。如果输入的密码无效,可能会发生错误。1 10.132.0.88 10.166.0.2 LDAP 129 binrequest (1)“cn=Valeriy Petrov,ou=Users,dc=test,dc=com”很简单
2 10.166.0.2 10.132.0.88 LDAP 82 bindResponse(1) invalidCredentials .2
Wireshark:
LDAP组搜索分析
1.在下面的示例中,我们看到在Active Directory中成功搜索组。注意,searchRequest查询LDAP服务器并应用LDAP组设置中定义的Filter,从Search Base中定义的DN开始。1 0.000000 10.132.0.88 10.166.0.2 LDAP 351 searchRequest(22)“ou =组,dc =测试,dc = com”wholeSubtree
2 0.035339 10.166.0.2 10.132.0.88 LDAP 207 searchResEntry(22)“cn =开发商,ou =组,dc =测试,dc = com”
3 0.035377 10.166.0.2 10.132.0.88 LDAP 222 searchResEntry(22)“cn =用户,ou =组,dc =测试,dc = com”
4 0.035382 10.166.0.2 10.132.0.88 LDAP 197 searchResEntry(22)“cn =支持,ou =组,dc =测试,dc = com”
5 0.035385 10.166.0.2 10.132.0.88 LDAP 224 searchResEntry(22)“cn =管理员,ou =组,dc =测试,dc = com”
6 0.035389 10.166.0.2 10.132.0.88 LDAP 246 searchResEntry(22)“cn =服务,ou =嵌套,ou = appgroups, ou =组,dc =测试,dc = com”
12 0.035482 10.166.0.2 10.132.0.88 LDAP 119 searchResDone(22) success [5 results]
2.下面的示例显示了当没有找到Group对象时,Group搜索请求中的LDAP错误noSuchObject,因此返回" 0 results "。如果遇到这种错误,请检查正确配置的Search Base和Filter。1 0.000951 10.132.0.88 10.166.0.2 LDAP 360 searchRequest(2)“ou = IncorrectGroups, dc =测试,dc = com”wholeSubtree
2 0.034433 10.166.0.2 10.132.0.88 LDAP 96 searchResDone(2) noSuchObject [0 results]
成功登录和组关联的示例
1.在此例中,用户“valeriyp”是登录JFrog平台的support组的成员。
Wireshark界面中的流程:
在这个例子中,我们可以看到:
1.返回“valeriyp”用户DN的用户搜索请求成功1 0.000000 10.132.0.88 10.166.0.2 LDAP 134 searchRequest(13)“ou =用户,dc =测试,dc = com”wholeSubtree
2 0.035437 10.166.0.2 10.132.0.88 LDAP 398 searchResEntry(13)“cn = Valeriy彼得罗夫,ou =用户,dc =测试,dc = com”
2.用户绑定请求成功cn = Valeriy彼得罗夫,ou =用户,dc =测试,dc = com以及“simple”(屏蔽密码)。在Wireshark界面中,查看该报文的原始数据,可以发现密码。
9 0.073018 10.132.0.88 10.166.0.2 LDAP 131 binrequest (1)“cn=Valeriy Petrov,ou=Users,dc=test,dc=com”很简单
11 0.105634 10.166.0.2 10.132.0.88 LDAP 82 bindResponse(1) success .使用实例
3.成功组搜索请求
15 0.129357 10.132.0.88 10.166.0.2 LDAP 435 searchRequest(14)“ou =组,dc =测试,dc = com”wholeSubtree
19 0.162667 10.166.0.2 10.132.0.88 LDAP 224 searchResEntry(14)“cn =支持,ou =组,dc =测试,dc = com”
查找LDAP响应时间
LDAP响应时间将计算出来并显示在LDAP部分中。在所有searchResultReference和SearchResultEntry响应之后,LDAP服务器返回一个searchResultDone响应,其中包含成功的指示或已发生错误的详细信息。在数据包详细信息窗口中,展开LDAP部分。在本节中,我们可以找到包含LDAP服务器响应时间的字段。

对长LDAP响应时间进行筛选
现在,当我们知道如何检查LDAP响应时间后,我们可能想要基于该响应时间创建一个过滤器,并只显示花费大于或小于设置时间的LDAP响应。
这在针对Artifactory的身份验证变慢的情况下尤其有用,我们想知道这是否是由于LDAP服务器造成的。
在本例中,我们使用下面的筛选器语法仅显示耗时超过30毫秒的响应。ldap。时间>= 0.03
欲进一步阅读:
LDAP调试指南
//www.si-fil.com/knowledge-base/ldap-debugging-guide/
LDAP/AD组同步/映射是如何工作的?
//www.si-fil.com/knowledge-base/how-does-ldap-ad-group-sync-mapping-work/