通过 SNMP 获取用户信息
此文档已测试可在 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
在某些示例中,可能会提及 IP 地址。请更改这些地址以反映您的配置。
诸如 <ip.of.switch> 之类的值以及其他标记为 <something> 的值应适当替换。
配置交换机
启用 SNMP 查询
我们需要在交换机上配置一个 'SNMP 社区'(该社区至少具有 '只读' 或 '受限' 权限)。
如果您的交换机没有这样的 'SNMP 社区',您将需要创建一个。
您将受益于阅读手册,以了解如何将更改应用到您自己的交换机。
首先登录到您的交换机(使用 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 查询的所有交换机上运行上述命令(完全如上所示)。

链路层发现协议
如果您的环境中有多个交换机,则应启用链路层发现协议 (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.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
开始使用
全部启动
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-proxy-cli 模式。
向 CLI 提供 2 个用空格分隔的值。
- 一个索引(这基本上可以是任何不带空格的东西)
- 连接到您的交换机的设备的 IP 地址
在 CLI 中输入的命令可能如下所示
a 10.82.96.123
您将获得 "a ERR" 或 "a OK user=<switchname>_<portname>_<mac address>" 结果,这将帮助您进行调试。