一、IPTABLES概念
iptables是隔离主机以及网络的工具,通过自己设定的规则以及处理动作对数据报文进行检测以及处理。从设备上分类,防火墙分为软件防火墙、硬件防火墙、芯片级防火墙。从技术上分类,防火墙分为数据包过滤型防火墙、应用代理型防火墙。这是因为四层模型的每一层都可以应用防火墙。 防火墙的发展史就是从墙到链再到表的过程,也即是从简单到复杂的过程。为什么规则越来越多,因为互联网越来越不安全了,所有防火墙的的规则也越来越复杂。防火的工具变化如下: ipfirewall(墙)-->ipchains(链条)--iptables(表) 2.0版内核中,包过滤机制是ipfw,管理工具是ipfwadm; 2.2 版内核中,包过滤机制ipchain,管理工具是ipchains; 2.4版及以后的内核中,包过滤机制是netfilter,管理工具iptables |
二、IPTABLES原理
iptables 是 Linux 中比较底层的网络服务,它控制了 Linux 系统中的网络操作,firewalld不仅仅是对 iptables 上层封装那么简单,还 有 ipv6 支持等功能。同时,iptables 不仅仅是防火墙这么简单,它基本上能实现你在 linux 上对于网络的所有需求。 linux的防火墙由netfilter和iptables组成。用户空间的iptables制定防火墙规则,内核空间的netfilter实现防火墙功能。 |
|||||||||||||||||||||
iptables(用户空间) | 位于/sbin/iptables,是用来管理防火墙的命令的工具,为防火墙体系提供过滤规则/策略,决定如何过滤或 处理到达防火墙主机的数据包,称为Linux防火墙的“用户态 | ||||||||||||||||||||
netfilter | Linux是一个极其模块化的内核。 netfilter也是以模块化的形式存在于Linux中,所以每添加一个和netfilter相关的模块,代表着netfilter就多一个功能。 有些模块是使用netfilter所必须的,所以这些模块已经默认编译到内核中而非需要时加载。 存放netfilter模块的目录有三个: /lib/modules/$kernel_ver/net/{netfilter,ipv4/netfilter,ipv6/netfilter}。$kernel_ver代表内核版本号。 其中:ipv4/netfilter/存放的ipv4的netfilter ipv6/netfilter/存放的ipv6的netfilter, /lib/modules/$kernel_net/kernel/netnetfilter/存放的是同时满足ipv4和ipv6的netfilter。 在最后一个目录中放入更多的模块,是netfilter团队发展的目标,因为要维护ipv4和ipv6两个版本挺累的。 要使netfilter能够工作,就需要将所有的规则读入内存中。netfilter自己维护一个内存块,在此内存块中有4个表:filter表、NAT表、mangle表和raw表。在每个表中有相应的链,链中存放的是一条条的规则,规则就是过滤防火的语句或者其他功能的语句。也就是说表是链的容器,链是规则的容器。实际上,每个链都只是一个hook函数(钩子函数)而已。 说到这里,需要纠正一个概念,Linux上的防火墙是由netfilter实现的,但是netfilter的功能不仅仅只有"防火",一般可以认为"防火"的功能只是filter表的功能。
|