PacketFence
随着针对网络的攻击数量不断增加——无论是匿名访问网络的人员还是利用网络进行非法活动的人员,拥有强大的安全工具至关重要。虽然良好的防火墙和诸如 Snort 和 Nessus 之类的工具可以提高安全性,但网络管理员正在寻找能够完善这些安全工具的解决方案,通过自动响应违反网络使用策略的行为。这类工具被称为网络访问控制 (NAC) 解决方案。目前存在许多此类工具——尤其是来自思科等大型供应商的专有工具——但开源解决方案 PacketFence 值得关注。
PacketFence 是一款免费且开源的解决方案,提供网络访问控制功能,包括以下标准功能:
网络组件(台式机、笔记本电脑、打印机等)的注册,以及可选地,在获得完全网络访问权限之前接受网络使用策略。
基于对所有连接节点的被动和主动网络扫描,检测网络使用策略违规行为。
隔离违规节点。
基于网络使用策略违规行为的通知(电子邮件、弹出窗口等)。
补救,以便网络组件在违规后可以重新获得其网络访问权限。
PacketFence 使用 Perl 编写,并利用了常见的开源组件,例如 MySQL、Apache、Snort 和 Nessus。它不需要在访问网络的计算机上安装用户代理。其部署是非侵入性的,并且与用户的每次交互都通过一个可以被每个 Web 浏览器访问的强制门户进行。
PacketFence 目前支持 ARP、DHCP/DNS 和 VLAN 隔离技术。选择正确的隔离方法取决于您的网络规模和您拥有的网络设备。在本文中,我们将介绍基于 ARP 的隔离,它适用于任何类型的网络设备。
基于 ARP 的隔离通过毒化连接到网络的任何设备的 ARP 缓存来工作。如您所知,ARP 是一种用于将 IP 地址映射到 MAC 地址的协议。从根本上讲,以太网 ARP 中存在四种基本类型的消息,PacketFence 对其感兴趣:
ARP 请求:请求目标 MAC 地址。
ARP 回复:包含 MAC 地址的回复。
RARP 请求:从 MAC 地址请求 IP 地址。
RARP 回复:包含 IP 地址的回复。
ARP 的问题在于,当客户端发出 ARP 请求时,它只是简单地信任收到的回复并将其存储到其缓存中。毒化 ARP 缓存就像向客户端发送 ARP 回复一样简单,即使客户端没有请求回复。操作系统很可能会在收到此类数据包时更新缓存,或者在决定更新缓存时使用我们发送的毒化数据。
PacketFence 是在 Red Hat Enterprise Linux 4、CentOS 4 和 Fedora Core 上开发的。一些人已成功在不同的发行版上运行它,但为了简化您的首次安装,最好坚持使用官方支持的发行版之一。由于 PacketFence 是一种 NAC 解决方案,并且安装它将作用于您当前的 LAN,请务必与您的网络管理员协调您的测试。
PacketFence 使用 MySQL 数据库来存储有关连接到网络的节点、它们所属的用户以及是否存在任何违反指定网络策略的信息。因此,如果您还没有要用于此目的的专用 MySQL 服务器,请运行以下命令安装 MySQL 服务器:up2date -i mysql-server.
如前所述,PacketFence 可以使用 Snort 和 Nessus,我们在下面描述如何将这两个工具与 PacketFence 集成。
Snort 是一款开源网络入侵检测系统,它使用签名来分析网络流量。一旦给定的数据包与签名匹配,Snort 就可以生成警报。签名不仅存在于许多计算机病毒和间谍软件中,而且还存在于网络流量中,例如 BitTorrent、ICQ、Skype 甚至 Hotmail 访问。它们可以从 Sourcefire, Inc. 通过 Snort 网站以及通过 Bleeding Edge Threats(请参阅“资源”)获得。PacketFence 还附带 Oinkmaster 配置,以自动获取和精简规则集,使其仅包含 PacketFence 所需的内容。由于 PacketFence 对 Snort 2.6 的支持仍在开发中,请从 www.snort.org/dl/binaries/linux/old 下载 Snort 2.4.5,然后通过执行以下命令安装 RPM:
rpm -ivh snort-2.4.5-1.RHEL4.i386.rpm
另一方面,Nessus 是一款主动漏洞扫描器——意味着它会生成与您要测试漏洞的主机的连接。您必须向 Nessus 的所有者 Tenable Network Security 注册,才能接收可用的插件。通过下载 Linux 版 2.2.9 并执行以下命令来安装 Nessus:
sh nessus-installer-2.2.9.sh
Nessus 3 尚未得到很好的支持,并且由于围绕它的许可问题,请坚持使用 2.2.9。
安装完成后,使用以下命令启动 Nessus:
/opt/nessus/sbin/nessusd -D
从 SourceForge 存储库下载 PacketFence RPM,并使用以下命令安装它:
rpm -ivh packetfence-1.6.2-1.i386.rpm
在 /usr/local/pf 中,您将找到两个 Perl 脚本,它们将帮助您完成必要的配置步骤:installer.pl 和 configurator.pl。将您的当前目录更改为 /usr/local/pf,并执行:installer.pl。该脚本除其他外,设置 PacketFence 数据库,安装所有必要的 Perl 模块(数量相当多),并为 Web GUI 创建用户帐户。
现在,真正的配置工作开始了。首先,执行:configurator.pl,您将看到几个选项。选择基于测试模式的模板配置。系统将要求您提供几个网络参数(DHCP 服务器、DNS 服务器等),并将创建一个基本配置文件 /usr/local/pf/conf/pf.conf。此配置文件仅包含您应用于保存在 /usr/local/pf/conf/pf.conf.defaults 中的默认配置参数的差异。查看 conf/pf.conf.defaults 以了解可用选项。为了帮助您了解 PacketFence 内部发生的事情,请将以下行添加到 /usr/local/pf/conf/pf.conf 以提高日志记录级别:
[logging] verbosity=8
使用以下命令启动 PacketFence:service packetfence start。查看 /var/log/messages,您应该看到 PacketFence 开始创建网络上所有节点的清单,如下例所示:
Jan 3 16:05:28 pf pf: update_hashes(5): UPDATE New node 00:07:e9:05:4c:f2 (192.168.0.1) Jan 3 16:05:28 pf pf: update_hashes(5): UPDATE New node 00:90:27:6a:71:ea (192.168.0.2)
/usr/local/pf/bin/pfcmd 是 PacketFence 命令行界面。不带任何其他参数执行它会显示一个帮助屏幕,其中包含可用选项。为了显示数据库中的所有节点,请执行:
#/usr/local/pf/bin/pfcmd node view mac|pid|detect_date|regdate|lastskip|status| user_agent|computername|last_arp|last_dhcp|switch| port|vlan|dhcp_fingerprint 00:07:e9:05:4c:f2|1|2007-01-03 16:05:28|||unreg||| 2007-01-03 16:10:11||||| 00:90:27:6a:71:ea|1|2007-01-03 16:05:28|||unreg||| 2007-01-03 16:10:12|||||
手动注册节点可以使用:
/usr/local/pf/bin/pfcmd ↪node edit 00:07:e9:05:4c:f2 status="reg",pid=1
您还可以使用 pfcmd 访问每个配置参数的文档。要查看 [general] 部分中 logo 参数的文档:
# /usr/local/pf/bin/pfcmd config help general.logo GENERAL.LOGO Default: /common/packetfence.gif Logo displayed on Web pages.
使用以下命令查看可用报告:
/usr/local/pf/bin/pfcmd help report
os 和 osclass 报告使用 PacketFence 的 DHCP 指纹识别功能,该功能尝试确定每个 DHCP 请求的操作系统(包括打印机、VoIP 电话、交换机等发出的请求)。
运行:
/usr/local/pf/bin/pfcmd report os
显示网络上每个检测到的操作系统的节点数量和百分比。请注意,DHCP 指纹识别功能可以轻松地用于禁止运行特定操作系统的计算机访问您的网络。
PacketFence 还具有一个管理 Web GUI,默认情况下,可以通过安全端口 1443 访问。将您的浏览器指向 https://<pf-host>:1443/。一旦您输入安装期间定义的登录名/密码,您就可以开始通过 GUI 监控和配置 PacketFence。
当您开始强制执行节点在 PacketFence 中的注册时,网络上的所有节点都必须先注册才能获得完全的网络访问权限。此注册要求适用于所有具有网络访问权限的设备,包括无线接入点和打印机。因此,在配置文件中实际激活此选项之前,明智的做法是手动预先注册这些类型的设备。
对于具有 Web 浏览器的计算机,另一方面,注册可以由用户通过 PacketFence 强制门户完成。门户可以通过 htaccess 文件、Radius 或 LDAP 验证登录名/密码信息,我们在示例中使用 LDAP。为了做到这一点,您需要调整提供的模板 /usr/local/pf/conf/templates/ldap.conf 以适应您的 LDAP 结构。
由于您的所有用户都将被重定向到注册屏幕,因此此时更改 Web 页面上显示的默认 PacketFence 徽标为您自己的公司徽标也是明智之举。这可以通过添加:logo=/common/mylogo.gif到 /usr/local/pf/conf/pf.conf 中的 [default] 部分,并将文件 mylogo.gif 复制到目录 /usr/local/pf/html/common/。
要激活注册,请将以下参数合并到 /usr/local/pf/conf/pf.conf 中:
[trapping] testing=disabled detection=disabled [registration] aup=disabled auth=ldap
现在,使用以下命令重启 PacketFence:service packetfence restart。您应该在 /var/log/messages 中看到 PacketFence 正在通过 ARP 欺骗您的网络网关来捕获未注册的节点。从客户端,打开 Web 浏览器并访问任何外部网站应导致重定向到 PacketFence 强制门户,该门户允许您注册计算机。您还可以通过在客户端上执行:arp -n -a(在 Linux 下)并检查 ARP 缓存中为您的网络网关保存的 MAC 地址来确定客户端是否已被 ARP 欺骗。
您可以通过将 Snort 警报添加到您的 PacketFence 安装来进一步推进。假设在您的环境中禁止使用 BitTorrent 客户端,并且您希望配置 PacketFence 以强制执行此策略。编辑 /usr/local/pf/conf/violations.conf,使包含 BitTorrent 的部分如下所示:
[2000334] desc=P2P (BitTorrent) priority=8 url=/content/index.php?template=p2p disable=N max_enable=1 actions=trap,email,log trigger=Detect::2000334,Detect::2000357, ↪Detect::2000369
这告诉 PacketFence:
BitTorrent 违规可能由 Snort 警报 2000334、2000357 和 2000369 生成(trigger 参数)。
系统必须通过隔离用户、向管理员发送电子邮件警报并将违规记录到 /var/log/messages(actions 参数)来对此违规行为采取行动。
用户允许重新启用网络访问一次(max_enable 参数)。
最后,您需要通过将以下内容合并到 conf/pf.conf 中来从 PacketFence 内部激活 Snort:
[trapping] detection=enabled [interface eth0] type=internal, managed,monitor
并重启 PacketFence 服务。请注意,如果您使用的是交换机,则必须将您的网络流量副本重定向到 eth0(PacketFence 监视器——即 Snort 监听数据包的接口)。
现在,在 PacketFence 中生成违规就像启动您最喜欢的 BitTorrent 客户端(例如 Azureus)一样简单。这样做,并打开一个 torrent 文件以开始下载。一旦在网络上交换了几个数据包,Snort 应该会捕获一些数据包并将它们与 2000334、2000357 或 2000369 规则匹配。这些规则来自 Bleeding Edge Threats 规则集,分别对应于 BitTorrent 对等同步、流量和公告。一旦 Snort 记录了这种异常活动,PacketFence 就会通过创建违规来做出反应。
作为管理员,您可以使用以下命令查看违规列表:
/usr/local/pf/bin/pfcmd violation view all
作为用户,在您的计算机上,启动您最喜欢的 Web 浏览器并尝试打开任何外部网站。您将被自动重定向到 PacketFence 系统,该系统将显示对等模板,如图 2 所示。
停止 BitTorrent 客户端可让您重新获得网络访问权限。现在,尝试第二次使用 BitTorrent。与之前一样,会生成警报,并且您的浏览器将被重定向到 PacketFence 门户。但是,这一次,您将没有第二次机会重新启用您的访问权限。在现实生活中,违规用户必须致电他们的网络管理员才能重新启用网络访问权限。
要激活 Nessus 对尝试在 PacketFence 中注册的主机的扫描,请将以下部分添加到 /usr/local/pf/conf/pf.conf:
[scan] ssl=enabled pass=<nessus_passwd> user=<nessus_user> port=1241 host=127.0.0.1 registration=enabled
并重启 PacketFence 服务。现在尝试添加一台运行未修补的 Microsoft Windows 版本的计算机将立即生成违规。您还可以使用管理 Web GUI(“扫描”选项卡)来定义应每晚执行完整的 Nessus 扫描。
在您的网络中部署具有基于 ARP 的隔离的 PacketFence 很简单。虽然这种隔离技术易于部署,但它不一定能够很好地扩展,并且可能会被明智的用户使用静态 ARP 缓存条目绕过。
PacketFence 中存在其他隔离技术,例如 DHCP/DNS,它具有良好的可扩展性。在 Inverse,我们还在 PacketFence 中添加了基于 VLAN 的隔离,这使得该解决方案对于大型网络来说更加安全和有吸引力。PacketFence 是保护校园网络甚至部分网络(VLAN 或子网)的理想解决方案。最后,一个高质量的 NAC 解决方案已经从 FOSS 社区中脱颖而出,PacketFence 的发展前景广阔。
资源
PacketFence: www.packetfence.org
Snort: www.snort.org
Bleeding Edge Threats: www.bleedingsnort.com
Oinkmaster: oinkmaster.sourceforge.net
Nessus: www.nessus.org
Azureus: azureus.sourceforge.net
Ludovic Marcotte (ludovic@inverse.ca) 拥有蒙特利尔大学计算机科学学士学位。他目前是 Inverse, Inc. 的高级系统架构师,Inverse, Inc. 是一家位于蒙特利尔市中心的 IT 咨询公司,专门从事基于免费和开源组件的基础设施部署。
Dominik Gehl (dgehl@inverse.ca) 拥有蒙特利尔大学计算机科学硕士学位。他目前是 Inverse, Inc. 的系统架构师,Inverse, Inc. 是一家位于蒙特利尔市中心的 IT 咨询公司,专门从事基于免费和开源组件的基础设施部署。