Netfilter与iptables的关系
我们常听说Linux防火墙叫做“iptables”,其实这样的称呼并不是很正确,什么是iptables呢?在前面我们提过Netfilter所需要的规则是存放在内存中的,但问题是防火墙管理人员该如何将规则存放到内存呢?因此,防火墙管理人员会需要一个规则编辑工具,通过这个工具来对内存中的规则执行添加、删除及修改等操作,这个工具就是iptables以及ip6tables,其中iptables是在IPV4网络环境中使用,而ip6tables是在IPV6网络环境中使用,因此,Linux防火墙比较正确的名称应该是Netfilter/iptables。
此外,对于iptables结构上的问题我们必须加以了解,前面曾提到,Netfilter的模块越多,防火墙的功能也就越多,而且我们可以通过升级内核的方式来达到一起升级Netfilter的目的。不过,防火墙的升级不是仅仅升级内核就可以解决的,也并非一味增加Netfilter的模块,就可以无限扩充Netfilter的功能。我们要知道,防火墙管理人员是通过iptables工具,将“规则”写入到Netfilter的规则数据库(就是前面所提到的链)中,而这些规则有特定的“语法”,例如:“iptables -t filter -A INPUT -p tcp -m state --state ESTABLISHED, RELATED -jACCEPT ”,因此,当我们将规则传给iptables工具时,iptables工具会先检查语法是否正确,如果不正确,则iptables工具会显示语法错误的警告信息;反之,iptables就会把这些规则写入到规则数据库中。问题是iptables工具如何得知一个“新模块”?其语法该如何下达呢?
事实上,不是只有Netfilter有模块,iptables工具也有模块,这些模块就存放在/lib/x Tables目录下,该目录包含了iptables及ip6tables两个工具的模块。表2-2即为iptables及ip6tables工具的所有模块,其中libxt开头的文件是iptables的模块,libip6t开头的文件则为ip6tables的模块;这些模块理应与Netfilter的模块是一一对应的,如/lib/modules/kernel_version/kernel/net/netfilter/目录中有一个模块称为xt_string.ko,在/lib/x Tables/目录中就会有一个叫libxt_string.so的模块,也就是说,当我们下达与xt_string.ko相关的语法时,iptables工具会根据libxt_string.so模块的指示去检查语法是否正确,并将Netfilter的libxt_string.ko模块载入到系统内存中,iptables最后将规则写入到规则数据库中。
表2-2 iptables及ip6tables工具的模块列表
从以上内容我们可以推断,如果iptables工具没有包含下达规则中所需的模块,那么iptables会说你所下达的语法不正确,又如果iptables包含了我们所下达语法的模块,但Netfilter没有对应的模块可用,iptables会告诉我们某个Netfilter的模块不存在,因此,如果升级内核或Netfilter,iptables的软件也应随之升级才行。
(责任编辑:武林网)
新闻热点
疑难解答