通过 SNMP 获取用户信息

来自 Alpine Linux

此文档已测试可在 alpine-2.3.2 (squark-0.4-r0, net-snmp-5.7.1-r1) 上工作

简介

本文档描述了如何使用 'squark-auth-snmp' 作为 squid 身份验证助手,以从交换机获取用户名或其他有用信息。
'squark-auth-snmp' 通过 SNMP 使用标准 MIB 查询交换机,以获取各种信息。
然后,这些信息被注入到 squid 访问日志中(这可以在审计员分析日志时提供帮助)

已确认功能正常的交换机(至少在某种程度上)

  • HP Procurve 5400zl
  • HP Procurve 1810G 24GE
  • HP Procurve 2150-48
  • HP Procurve 2650
注意: 以下示例将创建/使用名为 'public' 的社区。您可以将每次出现的 'public' 替换为适合您需求的内容。
在某些示例中,可能会提及 IP 地址。请更改这些地址以反映您的配置。
诸如 <ip.of.switch> 之类的值以及其他标记为 <something> 的值应适当替换。

配置交换机

启用 SNMP 查询

我们需要在交换机上配置一个 'SNMP 社区'(该社区至少具有 '只读' 或 '受限' 权限)。
如果您的交换机没有这样的 'SNMP 社区',您将需要创建一个。

提示: 在交换机上查看/修改/创建 SNMP 社区的步骤因交换机的品牌或型号而异。
您将受益于阅读手册,以了解如何将更改应用到您自己的交换机。
注意: 以下示例假设您正在使用 "HP Procurve" 交换机。

首先登录到您的交换机(使用 telnet、ssh 或串行电缆。随交换机附带的手册将描述如何为您的交换机执行此操作)

查看你的 snmp-server 设置

运行以下命令以查看您当前的 snmp 设置

show snmp-server

创建 SNMP 社区

在本例中,我们将创建一个名为 "public" 的 SNMP 社区,并赋予其 "受限" 权限。
我们还将配置交换机以从接收到相应 SNMP 请求的同一 IP 地址发送 SNMP 回复。

configure snmp-server community "public" restricted snmp-server response-source dst-ip-of-request exit

在 squark-auth-snmp 插件将对其运行 snmp 查询的所有交换机上运行上述命令(完全如上所示)

警告: 您的交换机可能需要重启才能应用 'dst-ip-of-request' 设置。


链路层发现协议

如果您的环境中有多个交换机,则应启用链路层发现协议 (LLDP),以便 'squark-auth-snmp' 正常工作。
如果您在下面的 squark 配置中指定的交换机是核心交换机(例如在星型拓扑网络中),并且您网络中的所有交换机都启用了 LLDP(通常默认启用),那么您的网络拓扑应该是自动可发现的。

基于 Web 的身份验证

{{tip|可以配置 HP Procurve 交换机以执行基于端口的 Web 身份验证。
网络设备在端口上发起流量,并被分配到具有有限或无网络访问权限的“访客” vlan。
需要打开浏览器,并向用户提供用户名和密码提示。

配置 squid & squark

安装 squark

apk add squark

配置 squid

我们假设您已经安装了 squid 并完成了一些初始配置以使其工作。
以下示例应替换或附加值到您的工作 '/etc/squid/squid.conf'。

提示: 配置 squid 时,请查阅 https://wiki.squid-cache.org/

通用的 squid.conf 修改

更改(或编辑) '/etc/squid/squid.conf' 以反映以下内容

# Logging
logformat squark %ts.%03tu %6tr %>a %Ss/%03>Hs %<st %rm %ru %un %Sh/%<A %mt %rG
access_log /var/log/squid/access.log squark

# Permissions
cache_effective_user squid
cache_effective_group squid

# Allow hosts on <some.zone> to access internet
http_access allow <some.zone> Zone_SquarkAuth

正如您在上面的示例中看到的,我们引用了尚未创建的 acl "Zone_SquarkAuth"。
以下示例将描述如何根据您的需要创建它。

配置 squark-auth-snmp 以使用 SNMPv2c

更改(或编辑) '/etc/squid/squid.conf' 以反映以下内容

# External ACL squid auth helper
external_acl_type squark_auth children-startup=1 children-max=1 ttl=1800 negative_ttl=60 concurrency=128 grace=10 \
  %SRC /usr/bin/squark-auth-snmp -f "%N-%i-%M" -c public -r 10.82.96.1 -i eth1.96 -R 10.82.72.226 -v 96
acl Zone_SquarkAuth external squark_auth

{{Tip|有关可用的 'squark_auth' 选项的更多信息,请在您的终端中运行命令 'man squark-auth-snmp' 或浏览 squark git 树

配置 net-snmp

安装 net-snmp

apk add net-snmp

配置 net-snmp

基本配置

修改 '/etc/snmp/snmpd.conf' 以至少反映以下内容

rocommunity public default
syslocation  "Location of our equipment"
sysservices  15
syscontact  "ComputerDept <computerdept@foo.bar>"

SNMPv3 配置(可选)

当指定 snmpv3 作为首选 SNMP 版本时,Squark 将使用 '/etc/snmp/snmp.conf' 中指定的配置。确保您在 /etc/snmp/snmp.conf 中至少有以下内容

defContext none
defSecurityName <username>
defAuthPassphrase <password>
defVersion 3
defAuthType MD5
defSecurityLevel authNoPriv
注意: 根据您的交换机上的 SNMPv3 配置调整上述内容。

开始使用

全部启动

rc-service squid start rc-service snmpd start

确保配置您的服务在下次重启时自动启动

rc-update add squid default rc-update add snmpd default

调试

Squark

如果您在获取 'squark-auth-snmp' 以提供您想要查看的数据时遇到问题,您可以单独在终端中运行 'squark-auth-snmp' 以调试您的语法。

使用您计划使用的选项运行 'squark-auth-snmp' 命令(以下只是一个示例,说明其外观)

/usr/bin/squark-auth-snmp -f "%N-%i-%M" -c public -r 10.82.72.221 -i eth1.96 -v 96

注意: 单独在终端中运行 'squark-auth-snmp' 不会为您提供有关附近交换机的信息。您需要配置 'squark-auth-snmp' 以询问特定的交换机才能查询有效的结果。

您将进入 squark-proxy-cli 模式。
向 CLI 提供 2 个用空格分隔的值。

  1. 一个索引(这基本上可以是任何不带空格的东西)
  2. 连接到您的交换机的设备的 IP 地址

在 CLI 中输入的命令可能如下所示

a 10.82.96.123

您将获得 "a ERR" 或 "a OK user=<switchname>_<portname>_<mac address>" 结果,这将帮助您进行调试。