通过NPS(radius)的记账功能实现用户识别

       三方平台比如v*n、无线控制器等通过radius认证时,AD的安全日志并没有隧道内地址或者DHCP分配地址的内容,导致NPS认证的用户无法直接通过域控安全日志进行用户识别。

但是如果NPS服务器开启记账功能后,实际上三方平台都会通过radius向NPS推送记账的详细信息,其中也会包含分配的ip地址或者隧道内的地址信息,我们可以利用powershell脚本监控account日志,抓取用户与IP的对应关系,通过XML API形式,推送给PA防火墙,以实现用户识别。

1.NPS服务日志:

记账功能日志的开启:

默认情况下记账功能是默认开启的。

Paloalto-通过NPS(radius)的记账功能实现用户识别

记录的位置在C:\Windows\System32\LogFiles。

日志的格式是IN+时间.log

Paloalto-通过NPS(radius)的记账功能实现用户识别

日志格式通常会有两种(默认ODBC格式):

Paloalto-通过NPS(radius)的记账功能实现用户识别

ODBC格式:

"WIN-0TKL51HJ0V2","IAS",02/27/2020,01:53:48,1,"user1","ccloud.com/Users/user1",,,,"172.19.19.2","radius","192.168.243.254",,0,"192.168.243.254","pafw",,,,,,2,11,"pafw",0,"311 1 192.168.243.200 02/27/2020 09:17:59 20",,,,"Microsoft: Secured password (EAP-MSCHAP v2)",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"Use Windows authentication for all users",1,,,,

"WIN-0TKL51HJ0V2","IAS",02/27/2020,01:53:48,2,,"ccloud.com/Users/user1",,,,,,,,0,"192.168.243.254","pafw",,,,,1,2,11,"pafw",0,"311 1 192.168.243.200 02/27/2020 09:17:59 20",,,,"Microsoft: Secured password (EAP-MSCHAP v2)",,,,,,,,,,,,,,,,,,,,,,,,,,,"0x0143434C4F5544",,,"Use Windows authentication for all users",1,,,,

DTS格式:

<Event><Timestamp data_type="4">02/04/2020 11:42:47.239</Timestamp><Computer-Name data_type="1">TPRADIUS</Computer-Name><Event-Source data_type="1">IAS</Event-Source><User-Name data_type="1">xxxx\li_li</User-Name><NAS-Identifier data_type="1">34-FA-9F-8E-6D-2C</NAS-Identifier><NAS-IP-Address data_type="3">10.192.91.7</NAS-IP-Address><Framed-IP-Address data_type="3">10.192.90.147</Framed-IP-Address><Called-Station-Id data_type="1">34-FA-9F-8E-6D-2C:lilinTest</Called-Station-Id><Service-Type data_type="0">1</Service-Type><Calling-Station-Id data_type="1">B4-8B-19-78-5D-55</Calling-Station-Id><NAS-Port-Type data_type="0">19</NAS-Port-Type><Vendor-Specific data_type="2">000061DD030B6C696C696E54657374</Vendor-Specific><Client-IP-Address data_type="3">10.192.90.187</Client-IP-Address><Client-Vendor data_type="0">0</Client-Vendor><Client-Friendly-Name data_type="1">RadiusProxy</Client-Friendly-Name><Proxy-Policy-Name data_type="1">安全的無線連線</Proxy-Policy-Name><Provider-Type data_type="0">1</Provider-Type><SAM-Account-Name data_type="1">xxxx\li_li</SAM-Account-Name><Fully-Qualifed-User-Name data_type="1">Xxxx\li_li</Fully-Qualifed-User-Name><Authentication-Type data_type="0">1</Authentication-Type><NP-Policy-Name data_type="1">TP</NP-Policy-Name><Class data_type="1">311 1 10.192.90.140 02/03/2020 05:18:15 217</Class><Quarantine-Update-Non-Compliant data_type="0">1</Quarantine-Update-Non-Compliant><MS-Extended-Quarantine-State data_type="0">0</MS-Extended-Quarantine-State><MS-Quarantine-State data_type="0">0</MS-Quarantine-State><Packet-Type data_type="0">1</Packet-Type><Reason-Code data_type="0">0</Reason-Code></Event>

<Event><Timestamp data_type="4">02/04/2020 11:42:47.239</Timestamp><Computer-Name data_type="1">TPRADIUS</Computer-Name><Event-Source data_type="1">IAS</Event-Source><Class data_type="1">311 1 10.192.90.140 02/03/2020 05:18:15 217</Class><MS-Extended-Quarantine-State data_type="0">0</MS-Extended-Quarantine-State><MS-Quarantine-State data_type="0">0</MS-Quarantine-State><Service-Type data_type="0">2</Service-Type><Framed-Protocol data_type="0">1</Framed-Protocol><Quarantine-Update-Non-Compliant data_type="0">1</Quarantine-Update-Non-Compliant><Client-IP-Address data_type="3">10.192.90.187</Client-IP-Address><Client-Vendor data_type="0">0</Client-Vendor><Client-Friendly-Name data_type="1">RadiusProxy</Client-Friendly-Name><Proxy-Policy-Name data_type="1">安全的無線連線</Proxy-Policy-Name><Provider-Type data_type="0">1</Provider-Type><SAM-Account-Name data_type="1">Xxxx\li_li</SAM-Account-Name><Fully-Qualifed-User-Name data_type="1">Xxxx\li_li</Fully-Qualifed-User-Name><Authentication-Type data_type="0">1</Authentication-Type><NP-Policy-Name data_type="1">TP</NP-Policy-Name><Packet-Type data_type="0">2</Packet-Type><Reason-Code data_type="0">0</Reason-Code></Event>

前文提到过默认记账跟认证的日志是都开的,所以每次客户端认证登录成功会产生两条日志,倒数第二条是记账日志,倒数第一条是认证日志,记账日志中包含客户端的分配的隧道地址或者dhcp server分配地址等信息。所以对我们来说倒数第二条日志是有用日志,我们可以从这入手,获取用户和ip的对应关系。

2.API获取

因为powershell脚本是通过API的形式往防火墙POST提交user-id的对应信息。所以我们要先获得防火墙的api-key

访问防火墙的管理地址:

https://<mgtip>/api/?type=******&user=<user>&password=<password>

例如

https://192.168.243.130/api/?type=******&user=admin&[email protected]

获得如下

Paloalto-通过NPS(radius)的记账功能实现用户识别

其中这串key是脚本中需要使用api-key。

3.脚本原理说明

脚本实际上是创建一个powershell脚本,监控日志文件的写入,一旦写入立即读取内容,通过日志的规律,通过powershell对字符串的处理,获取user与ip的信息,放入到一个xml文件中,通过API,把这个xml里的信息POST到防火墙中。

为了应对日志文件每天都会产生新的INyyMMdd.log,设定计划任务,脚本每天凌晨00:01分时进行脚本重启,重新定位新的一天的log文件。

脚本里我已经写了完整的注释,很简单的powershell指令,这个脚本能应对默认NPS的计费配置是没问题的,因为环境的不同,日志和配置的不同,可能需要微调。针对关键字符串也可以通过正则去find,测试了下不管是v*n还是ac控制器的,计费日志格式都是一样的,这样就显得直接字符串数组的操作更方便些。

 附件有Paloalto-PAUSERID.zip

4.脚本执行和计划任务

  1. 把压缩包直接放在NPS服务器C盘,里边包含两个PS1 和 XML 两个文件 (C:\PAUSERID)

Paloalto-通过NPS(radius)的记账功能实现用户识别

  1. 编辑NPS_USERID_PAN.ps1脚本,把第二节查询到的api-key改进去

Paloalto-通过NPS(radius)的记账功能实现用户识别

  1. 为了解决每天产生日志文件名称不同,定期00点01分通过计划任务重启powershell脚本。

计划任务:

Paloalto-通过NPS(radius)的记账功能实现用户识别

Paloalto-通过NPS(radius)的记账功能实现用户识别

AM12时1分执行

Paloalto-通过NPS(radius)的记账功能实现用户识别

 

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

参数

-NoExit -File "C:\PAUSERID\NPS_USERID_PAN.ps1"

Paloalto-通过NPS(radius)的记账功能实现用户识别

Paloalto-通过NPS(radius)的记账功能实现用户识别

5.执行结果

Paloalto-通过NPS(radius)的记账功能实现用户识别

关于缓存时间

Paloalto-通过NPS(radius)的记账功能实现用户识别

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-01-01
  • 2021-10-15
  • 2021-07-19
  • 2022-12-23
  • 2022-12-23
  • 2021-07-16
猜你喜欢
  • 2021-08-06
  • 2021-05-03
  • 2022-12-23
  • 2022-12-23
  • 2021-06-21
  • 2022-12-23
相关资源
相似解决方案