窥视防火墙

作者:Jeffrey L. Taylor

当我的家庭局域网升级到 24x7 全天候互联网连接时,我的 Linux 机器成为了防火墙和路由器。我喜欢自定义防火墙的能力,并且通过使用 Snort,我可以密切关注门口的野蛮人。然而,我无法进行太多实验,而不会中断整个家庭的互联网访问。添加一个内置防火墙的 DSL/有线宽带路由器(参见“资源”)使我的计算机脱离了关键路径,并允许我试验各种配置和操作系统,而不会引起家庭不和。但是,我怀念看到正在发生的事情。我不希望有人攻击我的第一个迹象是他们出现在防火墙内部。

入侵检测系统 (IDS) 是企业界的标准做法,但它们很容易比包括计算机在内的整个家庭网络花费更多。使用一些免费软件 (Snort)、一个廉价的以太网集线器和一根定制电缆,您可以拥有一个几乎与商业系统一样好的 IDS。主要的缺点是证明高薪合理的漂亮报告和图表。

典型的带有宽带路由器的家庭局域网如图所示

Peering Over the Firewall

图 1. 带有宽带路由器的局域网

大多数宽带路由器都包含一个多端口交换机。交换机仅将数据包发送到目标端口。相比之下,集线器是一个简单的中继器,并将每个数据包发送到所有其他端口。使用交换机,每台计算机只能看到自己的流量,因此计算机 A 无法监控对其他计算机的攻击。图 2 显示了如何使用集线器窥视路由器周围并查看所有数据包。

Peering Over the Firewall

图 2. 带有宽带路由器和 Snort 电缆的局域网

住宅有线和 DSL 调制解调器以 1-2Mbps 的速度运行,因此单个速度为 10Mbps 的以太网集线器就足够了。这些可以在折扣店找到二手的、翻新的或作为过时产品倾销的,价格低至 10 美元。

数据包嗅探器(例如 Snort)在计算机 A 的第二个网络接口卡 (NIC) 上以混杂模式运行,可以查看所有流量,包括那些被防火墙阻止的数据包。为了防止第二个 NIC 响应任何 IP 数据包,需要将其启动时不带 IP 地址,即 ifconfig eth1 up。如果第二个 NIC 已经分配了 IP 地址,则将其关闭并重新启动并不总是删除 IP 地址。相反,关闭接口,删除驱动程序模块 (rmmod ne2k-pci) 并重新启动它。如果驱动程序已编译到内核中,您可能需要在此处重新启动。某些系统配置工具(例如 SuSE 的 yast)不允许您配置没有 IP 地址的以太网接口。在这种情况下,您必须手动编辑必要的文件。

通常没有 IP 地址就足够隐蔽了,但第二个 NIC 仍然可以响应低级第 2 层请求,例如 ARP 请求。为了使其完全不可见,请使用只读电缆。接线图如图 3 所示。这些电缆可以很容易地用一段 Cat5 电缆、两个 RJ45 连接器和一个压线工具制成。首先,剥去半英寸的外层绝缘层,然后将每根导线插入 RJ45 连接器上的插槽并压接。对于哪个引脚连接哪种颜色的导线,似乎没有一致的标准,因此请目视观察商业电缆并效仿。将其标记为集线器端。

接下来,从电缆的另一端剪下两英寸,以获得一小段导线,用于在 Snort 端的引脚 1 和 2 之间制作跳线。您可以通过将其对折并将其塞入 RJ45 连接器中来完成此操作。再次,剥去半英寸的外层绝缘层。从引脚 1、2、3 和 6 的导线上剥去四分之一英寸的内层绝缘层。小心地使用实心导体 Cat5 电缆,您可以将引脚 1 和 3 的导线推入引脚 3 的插槽,并将引脚 2 和 6 的导线推入插槽 6。确保所有导线都完全插入插槽,然后压接端头。有关结果图片的链接,请参阅“资源”。(警告:尝试使用绞合线是一项自虐的任务。)

如果您的电缆是绞合线,或者您找不到压线钳并且擅长使用烙铁,只需将跳线在中间剪断,然后将适当的导线连接在一起。使用热缩管来绝缘和保护您的手工艺品。

Peering Over the Firewall

图 3. Snort 只读电缆接线图

当您将电缆插入 NIC 和集线器时,状态 LED 应以其通常的模式亮起。如果不是,请检查并更正您的工作。接下来,将 Snort 置于数据包转储模式,命令为 snort -d -p -v -i eth1。您现在应该看到来自两个方向的流量。

最后,编辑 snort.conf 并在守护进程模式下启动 Snort

snort -D -i eth1 -p -c /etc/snort.conf

大多数家庭宽带连接都具有动态 IP 地址,但它们不会经常更改。因此,每次地址更改时,都可以手动配置 snort.conf 中的 HOME_NET。另一种选择是在您的外部 IP 地址上运行 whois 程序。它可能会告诉您 ISP 拥有的 IP 地址范围。使用此地址/网络掩码作为 HOME_NET 可以减少工作量,但 Snort 可能会忽略来自您的电子邻居的攻击,因为它们被认为是您 LAN 的一部分。

通过这种设置,我可以再次看到脚本小子晃动门把手以及各种蠕虫(包括 Slammer)试图传播。

当我升级到 Snort 1.9.1 及其更广泛的攻击签名时,我开始看到 P2P GNUTella 警报。我不使用 P2P,所以这很可疑。路由器在内部私有地址和单个外部 IP 地址之间进行网络地址转换 (NAT),从而隐藏了罪魁祸首。通过将集线器移动到防火墙内部,如图 4 所示,您可以查看未转换的内部地址。您必须将 /etc/snort.conf 中的 HOME_NET 从外部 IP 地址更改为内部范围,可能类似于 192.168.0.0/16,才能执行此操作。

Peering Over the Firewall

图 4. 在 LAN 内部嗅探 (Snorting Inside the LAN)

在移动电缆之前,请检查您的宽带路由器是否支持配置生成所有流量的镜像端口(spanning port),也就是说,它不是交换式的。如果是这样,您可以将集线器留在原地,并将 Snort 插入镜像端口。

罪魁祸首原来是 AmphetaDesk(一个 RSS 新闻聚合器)和 PGP/GPG 密钥获取。P2P GNUTella 签名过于宽泛;它会标记任何到非标准端口(不是端口 80)的 HTTP GET 请求。以下是一些您可以添加到 local.rules 以消除误报的规则

pass tcp $HOME_NET any -> $EXTERNAL_NET !80 (flow:to_server,established; \
  content:"User-Agent\: AmphetaDesk"; offset:10;)
pass tcp $HOME_NET any -> $EXTERNAL_NET 11371 (flow:to_server,established; \
  content:"GET /pks/lookup?op=get&search="; offset:0;)

总之,Snort 使了解正在发生的事情变得容易。为了掌握最新动态,请经常更新您的 Snort 规则。

资源

“两个路由器的故事”,UnixReview.com,2002 年 9 月。

只读 Snort 电缆图片网址

www.snortsam.net/1

www.snortsam.net/2

www.snortsam.net/3

Jeffrey L. Taylor 是一位拥有 30 年软件工程经验的资深人士。他使用 UNIX 超过 25 年,使用 Linux 超过 4 年。他目前正处于硬核软件开发的休假期间,正在研究和撰写有关 SOHO 服务器和 LAN 的文章。本文摘自即将出版的书籍。

电子邮件:jeff.taylor@ieee.org

加载 Disqus 评论