防火墙在校园内一直被认为陌晦高深,很少有系管师有勇气进行计划性的实验,基本上这份讲义也能够当成测试报告来阅读,是笔者秉持我不入地狱、谁入地狱的精神,冒着生命危险,蛮干出来的成果,也藉此抛砖引玉,希望能带动国内能力高于笔者许多的众家高手,一起来进行有利于校园网络的公益研究!
一、什么是防火墙
文章整理:西部数码--专业提供域名注册、虚拟主机服务
防火墙是一套能够在两个或两个以上的网络之间,明显区隔出实体线路联机的软件和硬件设备组合。被区隔开来的网络,能够透过封包转送技术来相互通讯,透过防火墙的安全管理机制,能够决定哪些数据能够流通,哪些资料无法流通,藉此达到网络安全保护的目的。
防火墙产品能够概略归类为硬件式防火墙和软件式防火墙,但实际上无论是硬件式或软件式防火墙,他们都需要使用硬件来作为联机介接,也需要使用软件来设定安全政策,严格说两者间的差别并不太大。我们只能从使用的硬件和操作系统来加以区分,硬件式防火墙是使用专有的硬件,而软件式防火墙则使用一般的电脑硬件,硬件式防火墙使用专有的操作系统,而软件式防火墙则使用一般的操作系统。
防火墙依照其运作方式来分类,能够区分为封包过滤式防火墙 (Packet Filter) 、应用层网关式防火墙 (Application-Level Gateway,也有人把他称为 Proxy 防火墙)、电路层网关式防火墙 (Circuit-Level Gateway)。其中被广为采用的是封包过滤式防火墙,本文要介绍的 iptables 防火墙就是属于这一种。
封包过滤是最早被实作出来的防火墙技术,他是在 TCP/IP 四层架构下的 IP 层中运作。封包过滤器的功能主要是检查通过的每一个 IP 数据封包,假如其标头中所含的数据内容符合过滤条件的设定就进行进一步的处理,主要的处理方式包含:放行(accept)、丢弃(drop)或拒绝(reject)。要进行封包过滤,防火墙必须要能分析通过封包的来源 IP 和目的地 IP,还必须能检查封包类型、来源埠号和目的埠号、封包流向、封包进入防火墙的网卡接口、TCP的联机状态等数据。
防火墙由于种种理由价格一直居高不下,对于贫穷的中小学来讲要采购一台防火墙,简直是不可能的任务,而由于 Linux 的风行,使用 Linux 来充作软件式防火墙,似乎是不错的解决之道,本文拟介绍以 Linux 上最新最强大的 iptables 防火墙软件,建置出适合学校使用的过滤规则,让缺钱的学校能有一套好用的防火墙来看守校园网络的大门。
二、Linux 防火墙演变简史
Linux 最早出现的防火墙软件称为 ipfw,ipfw 能透过 IP 封包标头的分析,分辨出封包的来源 IP 和目的地 IP、封包类型、来源埠号和目的埠号、封包流向、封包进入防火墙的网卡界面......等,并藉此分析结果来比对规则进行封包过滤,同时也支持 IP 伪装的功能,利用这个功能能够解决 IP 不足的问题,可惜这支程式缺乏弹性设计,无法自行建立规则组合(ruleset)作更精简的设定,同时也缺乏网址转译功能,无法应付越来越复杂的网络环境,而逐渐被淘汰。
取而代之的 ipchains,不但指令语法更容易理解,功能也较 ipfw 优越;ipchains 允许自订规则组合(ruleset),称之为 user-define chains,透过这种设计,我们能够将彼此相关的规则组合在一起,在需要的时候跳到该组规则进行过滤,有效将规则的数量大幅缩减,以往 ipfw 仅能进行循序过滤,导致规则又臭又长的毛病,就不药而愈了。除了这个明显的好处以外,ipchains 并能结合本身的端口对应功能和 redir 程式的封包转送机制,模拟出网址转译的能力,而满足 NAT 的完整需求,堪称为一套成熟的防火墙作品。
防火墙软件的出现,确实曾让骇客们晚上睡不着觉,因为防火墙的阻隔能够有效让内部网络不设防的单机不致于暴露在外,也能有效降低服务器的能见度,减少被攻击的机会,骇客过去所用的网络探测技术因此受到严格的挑战,越来越多的攻击对象躲藏在防火墙后方,让骇客难以接近,因此必须针对新的情势,研究出新的探测技术,藉以规避防火墙的检查,达到发现目标并进而攻击入侵的目的,新的技术很多,本文并不拟进一步讨论,请自行参考 CERT 组织的技术文档,网址是 www.cert.org ,想看中文请连到 www.cert.org.tw。
iptables 作为 ipchains 的新一代继承人,当然也针对骇客不断推陈出新的探测技术拟出一些因应之道,那就是对封包的联机状态,作出更周详的分析,例如:是否为新联机或响应封包、是否为转向联机、联机是否失去响应,联机时间是否过长......等等,透过这样的分析能对一些可能被骇客利用的弱点加以阻隔(请详见后文的说明),另外也研发出真正的封包改写能力,无需透过其他程式的协助来仿真网址转译,除此之外,iptables 也获得系统核心的直接支持,无需像 ipchains 那样需要自行重新编译核心。
iptables 优越的性能使他取代了 ipchains,成为网络防火墙的主流,而 ipchains 并未被淘汰,现在 ipchains 已转型成单机防火墙,在安装新版 Linux 时,会自动被安装启用,以保护单机上未被使用的通讯端口。
三、iptables 防火墙概论
iptables 防火墙的指令很类似于 ipchains,使用过 ipchains 的人应该很容易上手,但是 iptables 的机制和 ipchains 有很大的不同,使用 ipchains 的概念来设定规则,将会使防火墙无法正常运作。ipchains 跟 iptables 最大的不同在于对 INPUT、FORWARD 、OUTPUT 三个网络函式的定义不同,这三个网络函式是 TCP/IP 驱动程式的一部分,结构如下图所示,是介于网卡驱动程式和应用程式的中间,Linux 核心预设会启用 INPUT、OUTPUT 和 LOOPBACK,而 FORWARD 函式则必须自行启用,能够使用下面指令,或直接修改 /etc/sysconfig/network 组态档:
echo "1" > /proc/sys/net/ipv4/ip_forward
左图为 ipchains 概念下的运作图
从上图能够知道 ipchains 如何处理封包的流动,分述如下:
• IP INPUT:任何封包都由 IP INPUT 函式负责处理,所以设定过滤规则时,几乎都是设定在 INPUT 规则炼上。
• IP FORWARD:目的 IP 非本机的 IP,这些封包需要进一步作转送处理,此函式用来处理 IP 伪装和 Port 转送。
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!



