首页 | Linux 基础 | 资讯动态 | Linux 应用 | Linux 服务器 | Linux 开发 | Linux 安全 | 专题 | 联盟论坛
  当前位置:主页>Linux 开发>linux 内核>文章内容
Linux系统内核新型包过滤结构的使用讲解
来源:http://www.unix5.com 作者:riechelr_hl 发布时间:2007-07-25  

一、包怎么样穿过(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包)。这个命令常用于测试。

 

  # ping -c 1 127.0.0.1
  PING 127.0.0.1 (127.0.0.1): 56 data bytes
  64 bytes from 127.0.0.1: icmp_seq=0 ttl-64 time=0.2ms
  
  --- 127.0.0.1 ping statistics ---
  1 packets transmitted, 1 packets received, 0% packet loss
  round-trip min/avg/max = 0.2/0.2/0.2 ms
  # iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP
  # ping -c 1 127.0.0.1
  PING 127.0.0.1 (127.0.0.1): 56 data bytes
  
  --- 127.0.0.1 ping statistics ---
  1 packets transmitted, 0 packets received, 100% packet loss

这里可以看到第一个ping成功了(这里的参数"-c 1"是告诉ping只发送一个包)。然后为INPUT链添加一条规则,把来自127.0.0.1(-s 127.0.0.1)的ICMP协议(-p icmp)包送至目标DROP(-j DROP)。接着用第二个ping来测试规则。程序把等待一段时间,超时后放弃等待响应。删除规则有两种方法。对于上例中的唯一一条规则,可以这样删除:

共2页: 上一页 1 [2] 下一页
 
如果您对本文有任何疑问或者建议,请到论坛讨论区发表您的意见: >> 论坛入口
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
  热点文章
·使用 Linux 系统调用的内核命令
·Linux 2.6.11内核文件IO系统调用
·Linux操作系统的源代码目录树结
·Linux用户态与内核态的交互讲解
·Linux内核对I/O端口的管理实现(
·深入分析 Linux操作系统的内核链
·Linux内核可装载模块对设备驱动
·概述Linux系统的驱动框架及驱动
·详解Linux 2.6内核新文件系统变
·Linux系统可卸载内核模块完全指
·FreeBSD手册讲解(一)--配置FreeB
·编译Linux操作系统的内核讲解
  相关文章
·编译支持NTFS的Linux系统内核模
·一种内核到用户空间的高效数据传
·FreeBSD手册讲解(一)--配置FreeB
·FreeBSD手册讲解(二)—配置FreeB
·Linux操作系统动态函式库讲解(二
·Linux操作系统动态函式库讲解(
·SYN Cookie原理以及在Linux系统
·Linux系统内核网络参数意义以及
·Linux用户态与内核态的交互讲解
·Linux内核重编译常见故障及其解
·Linux 2.6新内核的设计理念及新
·编译Linux操作系统的内核讲解

本站信息源至:互联网络,均为学习,交流所用,如有版权问题,请联系我们.
站长QQ:397422079 E_mail:riechelr_hl@unix5.com
转载本站内容请注明原作者名.谢谢!