首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 操作系统 > Linux > NETFILTER/IPTABLES详解
【标  题】:NETFILTER/IPTABLES详解
【关键字】:NETFILTER/IPTABLES
【来  源】:http://blog.chinaunix.net/article.php?articleId=55807&blogId=7356

NETFILTER/IPTABLES详解

自己的一些总结

NETFILTER/IPTABLES详解

伴随着linux操作系统的发展,网络防火墙软件已由2.0x支持的ipfwadm,到2.2x支持的ipchains,发展为当今流行的iptables。作为公司网络构架的一个重要部分,iptables软件的应用价值得到了充分的体现,对数据包过滤、NAT转发的功能非常强大。相对ipchains而言,更利于创建合理的规则链,概念的把握也更清晰。

要讲iptables,必须先说一下netfilter构架。Netfilter是内置于linux2.4xlinux2.5x的一套构架,它是通过在kernel中内嵌5个(仅ipv4)钩子函数(hook)发挥作用。这些钩子函数在数据报流过协议栈的几个关键点被调用。通过设置,Kernel会注册一些使用到这些hook函数的模块,并在必要时调用模块的回调函数,由这些回调函数来处理相应数据,丢弃无用的、保留有用的或者也可更改源数据包的ip包头。而iptables只是建立在Netfilter下的一套数据匹配、过滤规则集合,一旦符合某一规则,立即执行相应的行动(action)。

以下是netfilteripv4中的构架:(极为重要)

(不好意思,以后再加...)

数据进入系统后,首先使用PREROUTING钩子函数,然后内核自动查看路由,选择forward(转发目的ip非本机)或input(目的ip为本机)。如路由forward,则调用FORWARD钩子函数;input,则调用INPUT钩子函数。注意,一旦使用FORWARD,则数据不再进入INPUTt函数中,反之亦然。若数据由服务器发出,则进入OUTPUT函数中处理,最后与FORWARD函数处理后的数据一同进入POSTROUTING钩子函数。从整体上看,凡是进入服务器网卡的数据包必定先要通过PREROUTING,凡从服务器网卡出去的数据包必定最后通过POSTROUTING

使用iptables前,先要在内核中修改配置:

以下以linux-2.4.21内核为例:

1.cd /usr/src/linux

2.make menuconfig

3.networking options->ip: Netfilter Configuration ->自选所需模块。

4.退出保存。

Iptables使用语法:(见man iptables

       iptables [-t table] -[ADC] chain rule-specification [options]

       iptables [-t table] -I chain [rulenum] rule-specification [options]

       iptables [-t table] -R chain rulenum rule-specification [options]

       iptables [-t table] -D chain rulenum [options]

       iptables [-t table] -[LFZ] [chain] [options]

       iptables [-t table] -N chain

       iptables [-t table] -X [chain]

       iptables [-t table] -P chain target [options]

iptables [-t table] -E old-chain-name new-chain-name

iptables使用3个默认表:filter,nat,mangle。其中filter为系统缺省操作表。

Filter表用于防火墙设置,对匹配条件的数据包可以选择accessdropreject等的处理方式。Nat表用于网络地址转发,可以将源、目的ip地址转变为指定的ip地址。Mangle表可以实现对数据报头的修改或给数据报附上一些带外数据,当前mangle表支持修改TOS位及设置skbnfmard字段。但由于某些中间层设备会忽略tos位的值,因此实际应用较少。

Iptables中的每个默认表都有相应的系统缺省规则链,分别对应于以上所说的hook函数。Filter表中有inputforwardoutput链;nat表中有preroutingforwardpostrouting链;mangle表中有preroutingoutput链。

Iptables可以创建自定义链,实际上他必须建立在系统默认的链的基础上才能发挥作用,主要将相关联的规则集集中描述到同一个自定义链中,使管理者日常维护的条理更清晰。

常用语法解释:

iptables –t 表名 –A/I/D/R/ 链名 【匹配条件】 -j 行为

表名、链名不再重复,介绍一下“匹配条件”:

-p 指定协议(tcp/icmp/udp/...)              etc. –p icmp  (可以视为加载了相应的处理模块)

-s 源地址(ip address/masklen)              etc. –s 10.1.2.0/24

-d 目的地址(ip address/masklen) etc. –d 10.1.2.3/32

-i 数据报输入接口                       etc. –I eth0

-o 数据报输出接口                       etc. –o eth1

一些模块加载后,还可以进一步指定模块所支持的子选项,如:

iptables …… -p tcp –sport 80 …… j ……

iptables   …… -m mac –mac-source 00:11:22:33:44:55 …… -j ……

鉴于filter表的表述比较简单,故不再敷述。以下介绍nat表。

NatNetwork Address Translation 网络地址转换

linux以前的内核仅仅支持有限的NAT功能,被称为伪装(masquerade)。Netfilter则支持任何一种NAT。一般来讲NAT可以分为源NAT和目的NAT

NAT在数据报经过postrouting时修改数据报的源地址。伪装是一个特殊的SNAT

目的NAT在数据报经过outputprerouting 时修改数据报目的地址。端口转发和透明代理都是DNAT

可以举例说明:

iptables -t nat -A POSTROUTING –s 10.0.0.1/32 -j SNAT --to-source 1.2.3.4

iptables –t nat –A PREROUTING –d 1.2.3.4 –j DNAT –to-destination 10.0.0.1

公司对iptables使用还包括:masqueraderedirect

MASQUERADE

用于具有动态IP地址的拨号连接的SNAT,类似于SNAT,但是如果连接断开,所有的连接跟踪信息将被丢弃,而去使用重新连接以后的IP地址进行IP伪装。我认为与常用路由器的PAT 功能相类似。

Etc. iptables -t nat -A POSTROUTING -j MASQUERADE -o ppp0

REDIRECT

重定向数据报为目的为本地,和DNAT将目的地址修改为接到数据报的接口地址情况完全一样。

Etc. iptables –t nat –A PREROUTING –s 10.0.0.0/24 –d ! localhost –dport 80 –j REDIRECT –to-port 3128

以上指定了到达非本机ip的其他http包,在刚进入服务器时,更改数据包的目的ip为服务器的ip,目的端口改为3128。我们配合squid的使用,可以实现用户上网的透明代理。

Mangle表到目前的应用不很普遍,暂不介绍。

任何时候在任何nefilter规则链中,数据报都可以被排队转发到用户空间去。实际的排队是由内核模块来完成的(ip_queue.o)

数据报被发送给用户空间进程。该进程能对数据报进行任何处理。处理结束以后,用户进程可以将该数据报重新注入内核或者设置一个对数据报的目标动作(如丢弃等)

这是netfilter的一个关键技术,使用户进程可以进行复杂的数据报操作。从而减轻了内核空间的复杂度。用户空间的数据报操作进程能很容易的适用ntfilter提供的称为libipq的库来进行开发。

最后,提醒诸位,最好将每一条iptables规则统一写到/etc/sysconfig/iptables文件中,iptables每次启动时将读取其中的脚本,并一次性同时生效。单一的加入iptables规则将逐一生效,并刷新整个规则链,处理多条规则时极不合理。

可以有命令:iptables-save 将当前激活的所有规则写入/etc/sysconfig/iptables文件中。

                                                                                                       

                                                                                                    12/15/2003

 

 

 

 

 

 

 

 

 

 

 

 

 

 

新 Netfilter 目标使用方法:【上一篇】
Netfilter 扩展模块使用方法:【下一篇】
【相关文章】
没有相关文章
【随机文章】
  • Photoshop 7.0 艺术效果滤镜(1)
  • PHP拥有序列化方法
  • 浅析C#中的图形编程
  • 在PL/SQL Developer复制一条记录,快速提交这条记录,而不用使用insert into.
  • VSS2005 安装疑难解惑-----东南融通实习之1
  • 指针未指向有效地址,造成运行时刻出错
  • 如何通过RamDisk的方法加速小型数据库的访问速度
  • 《给初学者的Windows Vista的补遗手册》之071
  • 病毒类型浅释 ZT
  • PHP安全配置(2)
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.