防火墙非常有趣,但在需要对防火墙规则进行快速且复杂的更改时,您会做些什么?很简单。请使用本文中演示的 Daniel Robbins 的动态防火墙脚本。可以使用这些脚本来增加网络安全性和响应性,并激发您自己的创造性设计。
了解动态防火墙脚本好处的最佳方法是在运行时查看它们。要这样做,让我们假设我是一家 ISP 的系统管理员,最近我建立了基于 Linux 的防火墙,用于保护我的客户和内部系统免遭因特网上恶意用户的攻击。为了实现这个目的,我的防火墙使用新的 Linux 2.4 iptables 有状态功能,以允许我的客户和服务器建立新的外出连接,当然还允许新的进入连接,但仅限于“公共”服务,如 web、ftp、ssh 和 SMTP。由于我使用了缺省拒绝设计,因此会自动拒绝任何从因特网到非公共服务(如 squid 代理缓存或 Samba 服务器)的连接。现在,我有一个非常不错的防火墙,它为我公司的所有客户提供了非常好的保护。
在第一个星期左右,防火墙的工作非常出色,但在这之后却发生了件讨厌的事:我最大的对手 Bob(他为另一家 ISP 工作,是我们的竞争对手)决定用大量信息包攻击我的网络,试图阻止我向客户提供服务。糟糕的是,Bob 已经仔细研究了我的防火墙,他知道我在保护内部服务时,端口 25 和 80 必定是可以公开访问的,这样我才可以接收邮件和响应 HTTP 请求。Bob 决定利用这一点,他想用吸干带宽的方法来攻击我的 Web 和邮件服务器。
大约在 Bob 实施攻击一分钟之后,我注意到信息包逐渐占满了上行链路。在查看了 tcpdump 的情况之后,我确定这还是 Bob 实施的另一次攻击,我推算出他用于发起攻击的 IP 地址。现在我已经有了这个信息,我需要做的就是阻止这些 IP 地址,我想这大概能解决问题 -- 很简单的解决方案。
响应攻击
我迅速使用 vi 打开防火墙设置脚本,并开始改动 iptables 规则、修改防火墙,这样它就可以阻止那些 Bob 发出的恶意进入信息包。大约一分钟左右,我找到了添加合适 DROP 规则的确切位置,并添加了这些规则。然后,我启动防火墙,但又马上停止了它……哎,我在添加规则时犯了一个小错。我再次装入防火墙脚本,改正问题,30 秒之后,将已将防火墙调整成阻止这个月内 Bob 发起的所有攻击。起先,它似乎成功地挫败了攻击……直到问讯台的电话铃声响起。显然,Bob 已经中断我的网络大约 10 分钟,现在我的客户打电话来询问究竟发生了什么情况。更遭的是,几分钟后,我发现上行链路又被占满了。看来 Bob 这次使用了一组全新的 IP 地址来实施攻击。我也做出响应,立即开始修改防火墙脚本,只不过这次我有一点惊慌 -- 也许我的解决方案还不那么完美。