一、包如何穿过(traverse)过滤
内核从"filter"表格的三个列表(lists)开始,这三个列表叫做firewall chains(防火墙链)或就叫做chains(链)。这三个链分别为INPUT、OUTPUT连同FORWARD。
各链(chains)如下图所示:

其中三个圈代表前述的三个链,当一个包抵达上图其中的一个链时,相应的链就会被检验(examined)以决定如何处理这个包。假如链认为应该丢弃(DROP)这个包,则将该包丢弃;假如链认为应该接受(ACCEPT)该包,那么他将继续在图中穿越。
一个链(chain)其实就是众多规则(rules)钟的一个检查清单(checklist)。每一条规则的形式就像这样:"假如包的头是这样,就这样处理该包"。假如规则的设定和包不匹配,则交由链中的下一条规则继续处理。直到最后没有余下的规则能够参考,那么内核就会根据链的策略(policy)以决定如何处理。在一个安全性强的系统中,策略通常都会需要内核丢弃该包。
(1)当一个包进入时(假设通过Ethernet网卡),内核首先看包的目的地(destination):这被称为路由(routing)。
(2)假如目的地址为本机,这个包就按图时下行至INPUT链,假如能够通过,则进入后面的包处理过程。
(3)否则,假如内核没有启动转发功能,或他不知道如何转发这个包,那么该包就会被丢弃。假如转发功能已启动,同时包指向另一网络接口(假如连接有另一网络),那么这个包将按图示向右行至FORWARD链。假如该包未被接受,那么他将会被发送出去。
(4)最后一种情况:一个在本机运行的程式发送网络包,这时包会直接经过OUTPUT链,假如被接受,该包会继续被发送到他所指定的网络接口。
二、使用iptables
iptables很有用。上文中讲到的三个内建(built-in)链:INPUT、OUTPUT和FORWARD是不能删除的。下面看看如何管理整个链:
(1)建立一个新链(-N);
(2)删除一个空链(-X);
(3)改变一个内建链的策略(-P);
(4)列出一个链中的规则(-L);
(5)清楚一个链中的任何规则(-F)
(6)将一个链中的任何规则的包字节计数器请零(-Z)。
下面的操作用于管理链中的规则:
(1)向一个链追加(append)一条新规则(-A);
(2)在链内指定位置插入一条新规则(-I);
(3)替换链内指定位置的一条规则(-R);
(4)删除链内指定位置的一条规则(-D);
(5)删除链内第一条规则(-D)。
机器启动时的处理
iptables模块的文档名为"iptable_filter.o",第一次运行时,iptables就会被自动载入。他也能够永久性地建于内核中。
在运行任何iptables命令之前(注意,有些发布版可能会用他们的初始命令来运行iptables),内建链(INPUT、OUTPUT和FORWARD)将不带任何规则,任何链的策略都被设为ACCEPT。能够通过将iptable_filter模块选项设为"forward=0"来改变缺省的FORWARD链策略。
单一规则的操作
最常用的命令可能是append(-A)和delete(-D),其他如insert(-I)和replace(-R)命令只是他们的扩展而已。每一条规则都限定了一组条件(conditions)来于特定的包比较,还规定了当包和所设条件相匹配时的处理(指目标"target")。例如,要丢弃任何来自127.0.0.1这个IP地址的ICMP包,则条件可设为:协议必须是ICMP且源地址必须是127.0.0.1,而目标应设为"DROP"。
127.0.0.1被称为"回路(loopback)"接口,即使机器没有真正的网络连接,也会有这个接口。用户能够使用"ping"命令来产生这样的包(他只是发送一个类型为8即应答请求的ICMP包,而任何愿意应答的协作主机将回送一个类型为0即应答响应的ICMP包)。这个命令常用于测试。
|
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!



