NETFILTER/IPTABLES详解

NETFILTER/IPTABLES详解自己的一些总结NETFILTER/IPTABLES详解伴随着linux操作系统的发展,网络防火墙软件已由2.0x支持的ipfwadm,到2.2x

欢迎大家来到IT世界,在知识的湖畔探索吧!

自己的一些总结
NETFILTER/IPTABLES详解伴随着linux操作系统的发展,网络防火墙软件已由2.0x支持的ipfwadm,到2.2x支持的 ipchains,发展为当今流行的iptables。作为公司网络构架的一个重要部分,iptables软件的应用价值得到了充分的体现,对数据包过 滤、NAT转发的功能非常强大。相对ipchains而言,更利于创建合理的规则链,概念的把握也更清晰。
要讲iptables,必须先说一下netfilter构架。Netfilter是内置于linux2.4x及linux2.5x的一套构架,它是通过在 kernel中内嵌5个(仅ipv4)钩子函数(hook)发挥作用。这些钩子函数在数据报流过协议栈的几个关键点被调用。通过设置,Kernel会注册 一些使用到这些hook函数的模块,并在必要时调用模块的回调函数,由这些回调函数来处理相应数据,丢弃无用的、保留有用的或者也可更改源数据包的ip包 头。而iptables只是建立在Netfilter下的一套数据匹配、过滤规则集合,一旦符合某一规则,立即执行相应的行动(action)。
以下是netfilter在ipv4中的构架:(极为重要)
(不好意思,以后再加…)
数据进入系统后,首先使用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表用于防火墙设置,对匹配条件的数据包可以选择access,drop,reject等的处理方式。Nat表用于网络地址转发,可以将源、目 的ip地址转变为指定的ip地址。Mangle表可以实现对数据报头的修改或给数据报附上一些带外数据,当前mangle表支持修改TOS位及设置skb 的nfmard字段。但由于某些中间层设备会忽略tos位的值,因此实际应用较少。
Iptables中的每个默认表都有相应的系统缺省规则链,分别对应于以上所说的hook函数。Filter表中有 input,forward,output链;nat表中有prerouting,forward,postrouting链;mangle表中有 prerouting,output链。
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表。
Nat:Network Address Translation 网络地址转换
linux以前的内核仅仅支持有限的NAT功能,被称为伪装(masquerade)。Netfilter则支持任何一种NAT。一般来讲NAT可以分为源NAT和目的NAT。
源NAT在数据报经过postrouting时修改数据报的源地址。伪装是一个特殊的SNAT。
目的NAT在数据报经过output或prerouting 时修改数据报目的地址。端口转发和透明代理都是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使用还包括:masquerade及redirect。
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文件中。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/31628.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信