- 1、本文档共15页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
iptables功能介绍及源码分析
iptables功能说明
一、Netfilter介绍:
netfilter是由Rusty Russell提出的Linux 2.4内核防火墙框架,该框架既简洁又灵活,可实现安全策略应用中的许多功能,如数据包过滤、数据包处理、地址伪装、透明代理、动态网络地址转换(Network Address Translation,NAT),以及基于用户及媒体访问控制(Media Access Control,MAC)地址的过滤和基于状态的过滤、包速率限制等。
Netfilter
Hook1: NF_IP_PREROUTING 、 Hook2: NF_IP_LOCAL_IN
Hook3 :NF_IP_FORWARD 、 Hook4 :NF_IP_POST_ROUTING
Hook5 :LOCAL_OUT
数据从左边进入系统,经过ip校验后,数据经过第一个钩子函数hook1进行处理;然后就进入路由代码,起决定该数据包是需要转发还是发给本机;如果发给本机经过hook2处理后传递给上层协议,如果被转发经过hook3处理,经过转发发的数据包经过最后一个钩子hook4处理后在输入到网络上,本地产生的包经过hook5处理后再惊醒路由选择处理,然后经过hook4处理后发送到网络上。
二、iptables的介绍:
Iptables 是与 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。
netfilter/iptables IP 信息包过滤系统是一种功能强大的工具,可用于添加、编辑和除去规则,这些规则是在做信息包过滤决定时,防火墙所遵循和组成的规则。这些规则存储在专用的信息包过滤表中,而这些表集成在 Linux 内核中。在信息包过滤表中,规则被分组放在我们所谓的链(chain)中。
虽然 netfilter/iptables IP 信息包过滤系统被称为单个实体,但它实际上由两个组件netfilter 和 iptables 组成。
netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。
Filter表:
Filter表不会对数据报进行修改,而是对数据进行过滤。它是通过钩子函数NF_IP_POSTROUTING 、NF_IP_PREROUTING、NF_IP_LOCALOUT 接入netfilter框架。因此对于任何一个数据报只有一个地方对其进行过滤。
Nat表:
Nat 表监听三个netfilte钩子函数:NF_IP_PREROUTING、NF_IP_POSTROUTING、NF_IP_LOCALOUT 。NF_IP_PREROUTING实现对需要转发的数据报的源地址进行地址转换,NF_IP_POSTROUTING则对需要转发的数据报的目的地址进行转换,NF_IP_LOCALOUT实现对于本地数据报的目的地址的转换。Nat表与filter表不同,只有新连接的第一个数据报将遍历表格,而随后的数据报将根据第一个数据报的结果进行同样的转换处理。
Mangle表:
Mangle表在NF_IP_PREROUTING、NF_IP_LOCALOUT钩子中进行注册。使用mangle表可以实现对数据报的修改或给数据报附上一些带外数据报。如mangle表支持修改TOS位及设置skb的nfmard字段。
数据包在iptables中的路径图:
三、Iptables原理分析:
Iptables的主要函数:
int main(int argc, char *argv[]) //主函数rgv为名利行参数数组,argc为命令行参数的数目,即argv数据的长度
//命令行处理
int do_command(int argc, char *argv[], char **table, struct iptc_handle **handle)//命令行处理
*handle = iptc_init(*table); //从内核获取表的规则快照
以一条iptabls命令来分析Iptables的代码假设要下的规则为:iptabls –A INPUT –i eth0 –p tcp --syn –s 10.0.0.0/8 –d 10.1.28.184 –j ACCEPT该规则是将源地址段在10.0.0.0/8范围之内的主机发送的SYN包,接受的网口为
文档评论(0)