本文目录
- Linux里面iptables作用是什么
- netfilter和libpcap的作用是一样的吗
- netfilter和iptables什么关系
- 如何添加iptables/netfilter模块到安卓内核
- netfilter 是怎么查路由表的
- 如何使用netfilter/iptables构建防火墙
- 修改netfilter数据包
- 如何编译新添加的netfilter功能模块
- 什么是Netfilter
Linux里面iptables作用是什么
iptables简称netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。iptables基础 规则(rules)其实就是网络管理员预定义的条件,规则一般的定义为“如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息包过滤表中,这些规则分别制定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加、修改和删除这些规则。iptables和netfilter的关系 这是第一个要说的地方,Iptables和netfilter的关系是一个很容易让人搞不清的问题。很多的知道iptables却不知道netfilter。其实iptables只是Linux防火墙的管理工具而已,位于/sbin/iptables。真正实现防火墙功能的是netfilter,它是Linux内核中实现包过滤的内部结构。iptables传输数据包的过程① 当一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去。 ② 如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。 ③ 如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过FORWARD链,然后到达POSTROUTING链输出。
netfilter和libpcap的作用是一样的吗
本质是一样的,就是有些细节不一样, 而且libpcap是开源的软件,你可以用它来编程抓取底层的报文,这样分析好
netfilter和iptables什么关系
对于Internet上的系统,不管是什么情况都要明确一点:网络是不安全的。因此,虽然创建一个防火墙并不能保证系统100%安全,但却是绝对必要的。Linux提供了一个非常优秀的防火墙工具—netfilter/iptables。它完全免费、功能强大、使用灵活、可以对流入和流出的信息进行细化控制,且可以在一台低配置机器上很好地运行。本文将简单介绍使用netfilter/iptables实现防火墙架设和Internet连接共享等应用。netfilter/iptabels应用程序,被认为是Linux中实现包过滤功能的第四代应用程序。netfilter/iptables包含在2.4以后的内核中,它可以实现防火墙、NAT(网络地址翻译)和数据包的分割等功能。netfilter工作在内核内部,而iptables则是让用户定义规则集的表结构。netfilter/iptables从ipchains和ipwadfm(IP防火墙管理)演化而来,功能更加强大。下文将netfilter/iptabels统一称为iptables。可以用iptables为Unix、Linux和BSD个人工作站创建一个防火墙,也可以为一个子网创建防火墙以保护其它的系统平台。iptales只读取数据包头,不会给信息流增加负担,也无需进行验证。要想获得更好的安全性,可以将其和一个代理服务器(比如squid)相结合。基本概念典型的防火墙设置有两个网卡:一个流入,一个流出。iptables读取流入和流出数据包的报头,将它们与规则集(Ruleset)相比较,将可接受的数据包从一个网卡转发至另一个网卡,对被拒绝的数据包,可以丢弃或按照所定义的方式来处理。通过向防火墙提供有关对来自某个源地址、到某个目的地或具有特定协议类型的信息包要做些什么的指令,规则控制信息包的过滤。通过使用iptables系统提供的特殊命令iptables建立这些规则,并将其添加到内核空间特定信息包过滤表内的链中。关于添加、去除、编辑规则的命令,一般语法如下:iptables [-t table] command [match] [target]1.表(table)[-t table]选项允许使用标准表之外的任何表。表是包含仅处理特定类型信息包的规则和链的信息包过滤表。有三个可用的表选项:filter、nat和mangle。该选项不是必需的,如果未指定,则filter作为缺省表。各表实现的功能如表1所示。表1 三种表实现的功能2.命令(command)command部分是iptables命令最重要的部分。它告诉iptables命令要做什么,例如插入规则、将规则添加到链的末尾或删除规则。表2是最常用的一些命令及例子。3.匹配(match)iptables命令的可选match部分指定信息包与规则匹配所应具有的特征(如源地址、目的地址、协议等)。匹配分为通用匹配和特定于协议的匹配两大类。这里将介绍可用于采用任何协议的信息包的通用匹配。表3是一些重要且常用的通用匹配及示例说明。4.目标(target)目标是由规则指定的操作,对与那些规则匹配的信息包执行这些操作。除了允许用户定义的目标之外,还有许多可用的目标选项。表4是常用的一些目标及示例说明。除表4外,还有许多用于建立高级规则的其它目标,如LOG、REDIRECT、MARK、MIRROR和MASQUERADE等。
如何添加iptables/netfilter模块到安卓内核
所以要实现netfilter(iptables)就要从两方面来着手:1)内核支持netfilter;2)用户层的iptables配置命令。1、编译内核,支持netfilter在宿主机上进入Linux内核目录,配置所需的内核模块:cd/usr/SRC/linuxmakemenuconfig选中如下内核选项:Generalsetup---[*]Sysctlsupport(在ROMFS文件系统中/proc/syS/Net/ipv4/出现ip_forward)Networkingoptions---[*]NetworkPACketfiltering(replaceSIPchains)IP:NetfilterConfiguration---(全部选择即可)这样在内核中就选择支持了netfilter。接下来只需编译并生成内核映像文件并烧写到嵌入式系统即可。如果烧写后重起成功进入Linux,则说明新的支持netfiter的内核已经正常运行。(注意,这里的内核选项只是一些支持netfilter/iptables的选项。这里假设原有内核已支持嵌入式系统的相关硬件,并能在嵌入式平台上运行)。2、编译生成iptables命令iptables工具包可以免费从网上获得。下载iptables工具包后,进入下载目录,进行编译生成可执行文件,编译方法具体可以参考iptables目录下的INSTALL文件:cd/root/iptablesmakeKERNEL_DIR=/usr/src/linux(指定内核目录)makeNO。SHARED_LIBS=1(静态链接编译生成可执行文件)把生成的iptables可执行文件copy到ramdisk再下载到嵌入式系统中就可以运行。
netfilter 是怎么查路由表的
路由表内容说明: 查看路由 # route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.57.66.200 192.168.1.1 255.255.255.255 UGH 0 0 0 eth0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0 0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0 Destination:目标网络或主机。 Gateway:网关地址。 Genmask:目标网络的网络掩码。“255.255.255.255”表示一个主机。“0.0.0.0”表示网关。 Flags:标记。 U、路由被启用。 H、目标是一个主机 G、使用网关。
如何使用netfilter/iptables构建防火墙
对于Internet上的系统,不管是什么情况都要明确一点:网络是不安全的。因此,虽然创建一个防火墙并不能保证系统100%安全,但却是绝对必要的。Linux提供了一个非常优秀的防火墙工具—netfilter/iptables。它完全免费、功能强大、使用灵活、可以对流入和流出的信息进行细化控制,且可以在一台低配置机器上很好地运行。本文将简单介绍使用netfilter/iptables实现防火墙架设和Internet连接共享等应用。netfilter/iptabels应用程序,被认为是Linux中实现包过滤功能的第四代应用程序。netfilter/iptables包含在2.4以后的内核中,它可以实现防火墙、NAT(网络地址翻译)和数据包的分割等功能。netfilter工作在内核内部,而iptables则是让用户定义规则集的表结构。netfilter/iptables从ipchains和ipwadfm(IP防火墙管理)演化而来,功能更加强大。下文将netfilter/iptabels统一称为iptables。可以用iptables为Unix、Linux和BSD个人工作站创建一个防火墙,也可以为一个子网创建防火墙以保护其它的系统平台。iptales只读取数据包头,不会给信息流增加负担,也无需进行验证。要想获得更好的安全性,可以将其和一个代理服务器(比如squid)相结合。基本概念典型的防火墙设置有两个网卡:一个流入,一个流出。iptables读取流入和流出数据包的报头,将它们与规则集(Ruleset)相比较,将可接受的数据包从一个网卡转发至另一个网卡,对被拒绝的数据包,可以丢弃或按照所定义的方式来处理。通过向防火墙提供有关对来自某个源地址、到某个目的地或具有特定协议类型的信息包要做些什么的指令,规则控制信息包的过滤。通过使用iptables系统提供的特殊命令iptables建立这些规则,并将其添加到内核空间特定信息包过滤表内的链中。关于添加、去除、编辑规则的命令,一般语法如下:iptables [-t table] command [match] [target]1.表(table)[-t table]选项允许使用标准表之外的任何表。表是包含仅处理特定类型信息包的规则和链的信息包过滤表。有三个可用的表选项:filter、nat和mangle。该选项不是必需的,如果未指定,则filter作为缺省表。各表实现的功能如表1所示。表1 三种表实现的功能2.命令(command)command部分是iptables命令最重要的部分。它告诉iptables命令要做什么,例如插入规则、将规则添加到链的末尾或删除规则。表2是最常用的一些命令及例子。3.匹配(match)iptables命令的可选match部分指定信息包与规则匹配所应具有的特征(如源地址、目的地址、协议等)。匹配分为通用匹配和特定于协议的匹配两大类。这里将介绍可用于采用任何协议的信息包的通用匹配。表3是一些重要且常用的通用匹配及示例说明。4.目标(target)目标是由规则指定的操作,对与那些规则匹配的信息包执行这些操作。除了允许用户定义的目标之外,还有许多可用的目标选项。表4是常用的一些目标及示例说明。除表4外,还有许多用于建立高级规则的其它目标,如LOG、REDIRECT、MARK、MIRROR和MASQUERADE等。
修改netfilter数据包
01.static unsigned int send(unsigned int hooknum, struct sk_buff * skb,02. const struct net_device * in, const struct net_device * out,03. int (*okfn)(struct sk_buff *))04.{05. struct iphdr* iph;06. struct udphdr* udph;07. struct tcphdr* tcph;08. unsigned char *data = NULL;09. int datalen;10. int ret = 0;11.12. __u16 dst_port,src_port;13. __be32 myip;14.15. if(skb)16. {17. iph = (struct iphdr *)skb_header_pointer(skb,0,0,NULL);18. if(iph)19. {20. if(strcmp(dstIP,““)!=0&&strcmp(dstIP,“0.0.0.0“)!=0)21. {22. myip = in_aton(dstIP);23. if(iph-》daddr == myip)24. {25. if(iph-》protocol == IPPROTO_UDP)26. {27. udph = (struct udphdr *)skb_header_pointer(skb,IP_HDR_LEN,0,NULL);28. data = (char *)skb_header_pointer(nskb,TOT_HDR_LEN,0,NULL);29. datalen = ntohs(iph-》tot_len)-TOT_HDR_LEN;30. }31. else if(iph-》protocol == IPPROTO_TCP)32. {33. tcph = (struct tcphdr *)skb_header_pointer(skb,IP_HDR_LEN,0,NULL);34. int offlen = IP_HDR_LEN + tcph-》doff*4;35. data = (char *)skb_header_pointer(skb,offlen,0,NULL);36. datalen = ntohs (iph-》tot_len)-offlen;37. }38.39. int j;40. for(j=0; j《datalen; j++)41. {42. data[j] += 1;43. }44. printk(“encrypted\n“);45. iph-》check = 0;46. ip_send_check(iph);47. }48. }49. }50. }51. return NF_ACCEPT;52.}01.static unsigned int send(unsigned int hooknum, struct sk_buff * skb,02. const struct net_device * in, const struct net_device * out,03. int (*okfn)(struct sk_buff *))04.{05. struct iphdr* iph;06. struct udphdr* udph;07. struct tcphdr* tcph;08. unsigned char *data = NULL;09. int datalen;10. int ret = 0;11.12. __u16 dst_port,src_port;13. __be32 myip;14.15. if(skb)16. {17. iph = (struct iphdr *)skb_header_pointer(skb,0,0,NULL);18. if(iph)19. {20. if(strcmp(dstIP,““)!=0&&strcmp(dstIP,“0.0.0.0“)!=0)21. {22. myip = in_aton(dstIP);23. if(iph-》daddr == myip)24. {25. if(iph-》protocol == IPPROTO_UDP)26. {27. udph = (struct udphdr *)skb_header_pointer(skb,IP_HDR_LEN,0,NULL);28. data = (char *)skb_header_ www.hnnedu.com pointer(nskb,TOT_HDR_LEN,0,NULL);29. datalen = ntohs(iph-》tot_len)-TOT_HDR_LEN;30. }31. else if(iph-》protocol == IPPROTO_TCP)32. {33. tcph = (struct tcphdr *)skb_header_pointer(skb,IP_HDR_LEN,0,NULL);34. int offlen = IP_HDR_LEN + tcph-》doff*4;35. data = (char *)skb_header_pointer(skb,offlen,0,NULL);36. datalen = ntohs (iph-》tot_len)-offlen;37. }38.39. int j;40. for(j=0; j《datalen; j++)41. {42. data[j] += 1;43. }44. printk(“encrypted\n“);45. iph-》check = 0;46. ip_send_check(iph);47. }48. }49. }50. }51. return NF_ACCEPT;52.}
如何编译新添加的netfilter功能模块
所以要实现netfilter(iptables)就要从两方面来着手:1)内核支持netfilter;2)用户层的iptables配置命令。 1、编译内核,支持netfilter 在宿主机上进入Linux内核目录,配置所需的内核模块:cd/usr/SRC/linuxmakemenuconfig 选中如下内
什么是Netfilter
Netfilter是Linux 2.4.x引入的一个子系统,它作为一个通用的、抽象的框架,提供一整套的hook函数的管理机制,使得诸如数据包过滤、网络地址转换(NAT)和基于协议类型的连接跟踪成为了可能。netfilter的架构就是在整个网络流程的若干位置放置了一些检测点(HOOK),而在每个检测点上登记了一些处理函数进行处理。netfilter是由Rusty Russell提出的Linux 2.4内核防火墙框架,该框架既简洁又灵活,可实现安全策略应用中的许多功能,如数据包过滤、数据包处理、地址伪装、透明代理、动态网络地址转换(Network Address Translation,NAT),以及基于用户及媒体访问控制(Media Access Control,MAC)地址的过滤和基于状态的过滤、包速率限制等。框架netfilter提供了一个抽象、通用化的框架,作为中间件,为每种网络协议(IPv4、IPv6等)定义一套钩子函数。Ipv4定义了5个钩子函数,这些钩子函数在数据报流过协议栈的5个关键点被调用,也就是说,IPv4协议栈上定义了5个“允许垂钓点”。在每一个“垂钓点”,都可以让netfilter放置一个“鱼钩”,把经过的网络包(Packet)钓上来,与相应的规则链进行比较,并根据审查的结果,决定包的下一步命运,即是被原封不动地放回IPv4协议栈,继续向上层递交;还是经过一些修改,再放回网络;或者干脆丢弃掉。Ipv4中的一个数据包通过netfilter系统的过程如图1所示。图1 Netfilter的功能框架关键技术netfilter主要采用连线跟踪(Connection Tracking)、包过滤(Packet Filtering)、地址转换、包处理(Packet Mangling)4种关键技术。⒈2.1 连线跟踪连线跟踪是包过滤、地址转换的基础,它作为一个独立的模块运行。采用连线跟踪技术在协议栈低层截取数据包,将当前数据包及其状态信息与历史数据包及其状态信息进行比较,从而得到当前数据包的控制信息,根据这些信息决定对网络数据包的操作,达到保护网络的目的。当下层网络接收到初始化连接同步(Synchronize,SYN)包,将被netfilter规则库检查。该数据包将在规则链中依次序进行比较。如果该包应被丢弃,发送一个复位(Reset,RST)包到远端主机,否则连接接收。这次连接的信息将被保存在连线跟踪信息表中,并表明该数据包所应有的状态。这个连线跟踪信息表位于内核模式下,其后的网络包就将与此连线跟踪信息表中的内容进行比较,根据信息表中的信息来决定该数据包的操作。因为数据包首先是与连线跟踪信息表进行比较,只有SYN包才与规则库进行比较,数据包与连线跟踪信息表的比较都是在内核模式下进行的,所以速度很快。⒈2.2 包过滤包过滤检查通过的每个数据包的头部,然后决定如何处置它们,可以选择丢弃,让包通过,或者更复杂的操作。⒈2.3 地址转换网络地址转换 分为源NAT(Source NAT,SNAT)和目的NAT(Destination NAT,DNAT)2种不同的类型。SNAT是指修改数据包的源地址(改变连接的源IP)。SNAT会在数据包送出之前的最后一刻做好转换工作。地址伪装(Masquerading)是SNAT的一种特殊形式。DNAT 是指修改数据包的目标地址(改变连接的目的IP)。DNAT 总是在数据包进入以后立即完成转换。端口转发、负载均衡和透明代理都属于DNAT。⒈2.4 包处理利用包处理可以设置或改变数据包的服务类型(Type of Service,TOS)字段;改变包的生存期(Time to Live,TTL)字段;在包中设置标志值,利用该标志值可以进行带宽限制和分类查询。