我们已经知道如果保护自己的密码╋还有如何使用资料加密的手段来保护资料。但是如果您的电脑遭到入侵╋密码档案和私有键值都被盗窃了╋我们所作的努力不就白费了吗?系统遭到入侵,在今天的网路环境来说已是施空见惯的了... ^_^ 只要您的机器有连上网路,那就有被入侵的可能。因此,所有的网路安全专家所给的意见都是一样的:最安全的设定就是拔掉网路线!
那么,我们如何做到安全的网路连线呢?除了小心还是小心!不过,我们还可以用技术手段来对网路线线加以控制,以便将一些不"必要的"连线排除在外。这样的技术设备,就是所谓的“防火墙(Fire Wall)”了。
何谓防火墙?
Firewall 一词,原本是建筑物上用来阻隔火灾的结构,也有说是位于引擎室与驾驶舱之间的汽车部件。网路的火墙就是这么用途的啦?将危险的、不安全的连线阻隔在您的网路之外。而我们通常说的火墙有两种?过滤性火墙(filter) 和 代理性火墙(proxy)。若没特别说明,我们一般所说的火墙是指过滤性火墙。
然而╋从安全觉度来看,proxy 比起 filter 来说,将更加可靠:因为它将内部与外部网路完全区隔开来了,除非它帮您做连线代理,否则别想建立连线。而且,内部网路对外部网路而言,是完全"隐形"的!除此之外,proxy 也有其非常好用的地方╋比方说我们可以利用单一的连线╋如使用 modem/adsl╋然后让整个内部网路连接外部资源╋不仅节省硬体成本╋而也无需支付多个 ISP 帐号与电话线路。Proxy 的功能就是“代理”╋可以分为“程式代理”和“socks 代理”,如无特指,一般是指程式代理。
前者可以说是为你代理所有应用软体的连线工作?当您需要连接外部资源的时候╋您的请求是直接送给 proxy ╋然后╋proxy 会帮您到真正的目的地去获取╋然后再转送给您。而每一次的代理动作╋它都会将资料保留一个备份╋存在它的快取区去╋如果再接获相同的请求(不管是原来的机器╋还是另外别的机器发出的)╋它就将存于快取里面的资料做为回复。有些聪明的 proxy 还能知道快取里面的资料是否和实际目的地的资料同步呢╋如果发现实际目的地的资料经过更新╋它就会再次复制进自己的快取去。
从上面的这个过程╋我们可以看得出╋proxy 还可以提高网路的存取速度哦╋因为如果资料已经在快取里面了╋其传送都在 LAN 里面进行╋而无需经过复杂的路由程序。同时╋因为资料无需从外面重复传递╋实际上╋也令到网路的流量减少许多。而且╋通过 proxy ╋我们也可以省下许多 IP 位址╋因为其他机器尽可以使用私有 IP 就行了。目前正时兴的网咖(Internet Cafe)╋许多就是利用 proxy 来降低成本和提高 www 的浏览速度。另外╋proxy 还可以再经由上游 proxy(或proxy阵列) 连接 internet ╋从而再可以提高效率和安全性。
而 socks 代理呢?就好象接线生那样╋仅是将您的 TCP 连接由里面的接口搭至外面的接口而且。还记得在“网路概念”里面提到的 API 吗?socks 代理其实就是代理 API 请求而已╋而真正处理工作的╋还是发出请求的主机本身。
这里还要一提的是“NAT(Network Address Translation)”╋它的工作原理也非常近似 socks proxy ╋不过╋它是利用转换封包的位址来达到目的。如果本地网路主机要将一个封包送到外面网路╋当火墙收到这个封包的时候╋就会启动 IP 伪装功能(maquerading)╋将来源位址暂时转换成其本身位址╋然后等到接到回应封包之后╋再将位址进行还原(demasquerading)。在里面的机器根本就无需知道这个动作╋一切都由火墙处理好了。这和 Proxy 一样╋也可以节省大量的 IP 位址╋而让使用私有 IP 位址的主机也能够存取 internet 了。因此,有人也将 NAT 称为 IP Proxy 。
防火墙的运作原理
如果您对 TCP 与 IP 协定已经相当了解的话╋尤其是 IP 封包和 TCP 封包格式╋那么,您将会更容易了解(过滤性)防火墙的运作?火墙会对所有经过的封包进行检查╋按照一系列规则(rule)╋来决定封包的处理方式。火墙一般都会根据封包的来源和目的位址?协定?port?界面等因素进行判断╋决定是否让封包通过。提醒一下:firewall 只管放行与否,至于要送到哪里去,则是 routing 所负责的。
以 Linux 2.2.x 核心的 ipchains 为例,我们可以为火墙建立一些基本原则来定义好各种的链(chain)?传入(input)?传出(output)?转递(forward)?重导(redirect)?等╋来决定封包的处理动作?接受(accept)?拒绝(deny)?回绝(reject)?转递(forward)?伪装(masquerade)?等。在此基础上╋然后再配合实际情形设定更多规则加以限制。
我们设定规则的时候是非常多样性的╋也可以由一个 chain 导向另一个 chian ╋直到符合我们的要求为止。下面让我们看一看一个非常阳春的规则设定例子?
当我们从一个 chain 跳到另一个自定义的 chain 的时候╋如果自定义的 chain 没有将封包剔除的话╋就会回到刚才的 chain 的下一个规则去╋继续其后的规则检查。从上例中我们可以看到?只有从 192.168.1.1 传给 192.168.1.2 的 TCP 封包才能过关╋其它诸如 ICMP 和 UDP 封包╋及其他位址的封包一律会被挡掉。只要我们精心设计╋不难设定出一个适合自己情形的不太松也不太紧的火墙的。
防火墙的设定技巧
从上面的防火墙运作来看╋我们可以运用设定规则╋将一些重要的主机保护起来╋让其只允许特定的网路存取╋也就可以将大部份的网路入侵者摈于门外。不过╋对于那些绝顶骇客高手而言╋还是会从您的设定漏洞攻破您的把守的╋例如?他们通常会使用“取道”的方法╋绕过那些被禁止的位址╋以及通过不断改变位址来逃避追踪。有些较优秀的火墙程式╋可以自动检测一些骇客常用的攻击方法╋除了会对网路管理员发出预警之外╋还可以即时切断该等连线╋和追查路径等动作。
同时╋利用不同系统来设定多个火墙╋也能提高防御能力?除非骇客对所有系统都熟悉╋否则╋过了一道火墙╋还是过不了第二道火墙?而且由于第一道火墙的屏隔╋要探测第二道火墙的难度也高许多。当然╋要设定的规则就更为复杂了╋通常都会造成过于严厉而令到一些网路资源无法使用╋或降低了网路的效能。
所以╋设计一套完善的规则╋其实是件极具挑战性的事情╋其后也需要不断的测试以修补漏洞╋这也是非常耗时的工作。如果对一个繁忙的网路来说╋事先的测试工作就显得非常重要了?您总不能在收到一大堆不能连线的投诉之后而关闭火墙作调试吧?
通常我们在设定火墙的时候╋划分一个“非军事区(DMZ - Demilitarized Zone)”是非常好用的?
我们可以设定火墙╋允许外部直接传入到 DMZ 上面的伺服器╋但仅限制于某些特定的协定╋如 DNS?WWW?FTP?MAIL 等╋同时也允许内部网路使用这些服务。但外部网路是完全禁止进入内部网路的╋而内部网路则可以通过 Proxy 存取外部资源?我们也允许内部伺服器使用 rsync 协定来和 DMZ 上面的机器进行资料同步。一般我们不会将重要的资料存放在 DMZ 上面的机器╋而且邮件也会在 DMZ 接收后由内部伺服器提取进来。这样╋就算那里的机器被攻破了╋也不至于损失太多。
至于如何一一设定╋恐怕不是这里能够详细论述的了。