• IP OUTPUT:任何流出的封包都由这个函式处理,通常不需设定任何规则。
iptables 除了上述三支函式以外,还使用两个新的函式:Prerouting、Postrouting。现在来比较一下 iptables 的运作模式(loopback 接口和上图相同,所以省略不画):
从上图能够知道 iptables 如何处理封包的流动,分述如下:
• IP INPUT:只有要到达本机的封包才会 由 INPUT 函式处理,所以会让来自内部网络的封包无条件放行,来自外部网络的封包则过滤是否为 响应封包,若是则放行。
• PREROUTING:需要转送处理的封包由此函式负责处理,此函式用来做目的地 IP 的转译动作(DNAT)。
• IP FORWARD:任何转送封包都在这里处理,这部分的过滤规则最复杂。
• POSTROUTING:转送封包送出之前,先透过这个函式进行来源 IP 的转译动作(SNAT)。
• IP OUTPUT:从本机送出去的封包由这个函式处理,通常会放行任何封包。
iptables 和 ipchains 都能够自行定义规则群组(rule-set),规则群组被称为规则炼(chains),前面所描述的函式,也都有相对应的规则炼(INPUT、FORWARD、OUTPUT、Prerouting、Postrouting),为了有别于自行定义的规则炼,这些规则炼我们就称为内建规则炼,其运作流程仿真如下图:
从上面两张假想图,学员们不难了解 ipchains 为什么要叫做 chains,因为他是将任何规则串接成一个序列逐一检查过滤,就像一条铁链相同一个环接一个环,在过滤过程中只要符合其中一条规则就会立即进行处理,假如处理动作是跳到某个规则群组,则继续检查群组内之规则设定,但假如处理动作是 ACCEPT、REJECT、DROP、REDIRECT 或 MASQUERADE,则会中断过滤程式,而不再继续检查后面的规则设定,在这样的结构之下,有时候规则顺序的对调会产生完全相反的结果,这一点在设定防火墙时不能不谨慎。
而 iptables 是采用规则堆栈的方式来进行过滤,当一个封包进入网卡,会先检查 Prerouting,然后检查目的 IP 判断是否需要转送出去,接着就会跳到 INPUT 或 Forward 进行过滤,假如封包需转送处理则检查 Postrouting,假如是来自本机封包,则检查 OUTPUT 连同 Postrouting。过程中假如符合某条规则将会进行处理,处理动作除了 ACCEPT、REJECT、DROP、REDIRECT 和 MASQUERADE 以外,还多出 LOG、ULOG、DNAT、SNAT、MIRROR、QUEUE、RETURN、TOS、TTL、MARK 等,其中某些处理动作不会中断过滤程式,某些处理动作则会中断同一规则炼的过滤,并依照前述流程继续进行下一个规则炼的过滤(注意:这一点和 ipchains 不同),一直到堆栈中的规则检查完毕为止。透过这种机制所带来的好处是,我们能够进行复杂、多重的封包过滤,简单的说,iptables 能够进行纵横交错式的过滤(tables)而非炼状过滤(chains)。
虽然 iptables 为了扩充防火墙功能,而必须采用比较复杂的过滤流程,但在实际应用时,同一规则炼下的规则设定还是有先后顺序的关系,因此在设定规则时还是必须注意其中的逻辑。
四、订定校园网络安全政策
在实际设定防火墙之前,我们必须根据校园网络的安全需求,先拟定一份安全政策,拟定安全政策前必须搜集以下资料:
1. 找出需要过滤保护的服务器
2. 条列出被保护的服务器将提供何种网络服务
3. 一般工作站,需要何种等级的保护
4. 了解网络架构和服务器摆放位置
根据这些数据,我们能够决定安全政策,以石牌国小为例:
1. 校内使用 NAT 虚拟网络,IP 数量需要两组 C,任何 IP 均需作 IP 伪装
2. 校园内安全需求不高,服务器和工作站摆在同一网段,不需采用 DMZ 设计
3. 由于服务器功能经常扩充,任何服务器均采用一对一对应,不使用 port 转送功能
4. 任何工作站均能自由使用网络资源,不限制只能看网页
5. 服务器提供之服务包含:dns、web、mail、ftp、wam、webmin、ssh、rdp、pcaw,不提供 proxy 及其他网络服务
6. 为增进校园网络之安全性,采用正面表列方式进行封包过滤(定义想放行之封包,其余封包一律阻挡)
更有一些网络安全须注意的事项,则是每所学校都应防范的,没有等差之别,例如:联机被绑架、阻断式攻击、连接端口扫描......等。
五、iptables 指令
语法:
iptables [-t table] command [match] [-j target/jump]
-t 参数用来指定规则表,内建的规则表有三个,分别是:nat、mangle 和 filter,当未指定规则表时,则一律视为是 filter。各个规则表的功能如下:
nat 此规则表拥有 Prerouting 和 postrouting 两个规则炼,主要功能为进行一对一、一对多、多对多等网址转译工作(SNAT、DNAT),由于转译工作的特性,需进行目的地网址转译的封包,就无需进行来源网址转译,反之亦然,因此为了提升改写封包的效率,在防火墙运作时,每个封包只会经过这个规则表一次。假如我们把封包过滤的规则定义在这个数据表里,将会造成无法对同一封包进行多次比对,因此这个规则表除了作网址转译外,请不要做其他用途。
mangle 此规则表拥有 Prerouting、FORWARD 和 postrouting 三个规则炼。
除了进行网址转译工作会改写封包外,在某些特别应用可能也必须去改写封包(TTL、TOS)或是设定 MARK(将封包作记号,以便进行后续的过滤),这时就必须将这些工作定义在 mangle 规则表中,由于使用率不高,我们不打算在这里讨论 mangle 的用法。
filter 这个规则表是预设规则表,拥有 INPUT、FORWARD 和 OUTPUT 三个规则炼,这个规则表顾名思义是用来进行封包过滤的处理动作(例如:DROP、 LOG、 ACCEPT 或 REJECT),我们会将基本规则都建立在此规则表中。
常用命令列表:
命令 -A, --append
范例 iptables -A INPUT ...
说明 新增规则到某个规则炼中,该规则将会成为规则炼中的最后一条规则。
命令 -D, --delete
范例 iptables -D INPUT --dport 80 -j DROP
iptables -D INPUT 1
说明 从某个规则炼中删除一条规则,能够输入完整规则,或直接指定规则编号加以删除。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




