FAQ


防火墙

防火墙用来对流进节点或从节点流出的数据包进行过滤。

二层防火墙可以针对MAC地址进行过滤;三层防火墙可以针对IP地址和协议进行过滤;四层防火墙可以针对端口和TCP的控制标记进行过滤。

在Linux中,真正具有防火墙功能的是netfilter,netfilter可以过滤数据包,可以进行网络地址转换,也可以修改数据包。netfilter的工作原理是:向内核模块注册钩子函数(HOOK) ,当内核模块执行到HOOK点时,就会执行其上注册的钩子函数。

iptables(CentOS6)和firewalld(CentOS7)并不具备防火墙功能,它们只是用来在用户空间维护和管理规则的工具,这些规则会被内核的netfilter模块使用,所以,它们本质上都是基于netfilter的。

netfilter工作在网络层,它在数据包必经的五个位置(也就是,防火墙四表五链中的五链)上注册了钩子函数。钩子函数会抓取数据包,并将数据包的信息和链上的规则进行匹配,匹配之后进行相应的处理,比如ACCEPT、DROP等。

五链如下图所示:

netfilter-five-chains.png.

在iptables中,有五张表,每张表都提供了不同的功能:

因为在每个链上都可以执行多种功能,所以一个链的规则会被放到多个表中。并且,一个表会为多个链保存规则。

关于iptables的使用详情,可以参考:这篇文档

下面看一个DNAT的例子:

有两台虚拟机 192.168.10.101、192.168.10.102。其中,102上启动了一个UDP服务器,它会持续地从8082端口上接收数据报。在101上,通过iptables将所有发向192.168.10.103:8082的UDP封包的目的地址都转换成192.168.10.102:8082。这样,在101上,向103的8082端口发送UDP封包时,数据都会被发送到102的8082端口。