Netfilter
Netfilter是Linux2.4内核引入的一个子系统,是坐落Linux内核中的包过滤引擎,基于Netfilter可以实现防火墙的相关策略。
Netfilter的构架就是在网路流程中数据包必须经过的位置放置了5个检查点(hook),在每位检查点上登记了一些处理函数进行处理,即钩子函数(hookfunction)。钩子函数实现了每位hook的检测规则链。
这5个hook就是数据包传输路径中的5个控制关卡,任何一个数据包,必然经过其中的一个或某几个。每位hook都对应了一条规则链。
Netfilter的5个检测点
这5个检测点分别是:
PREROUTING
数据包刚步入网路插口以后linux中tcp/ip协议实现及嵌入式应用,在路由处理之前
INPUT
假如数据包是本机的,则从内核流入用户空间
FORWARD
假如数据包是要转发的,在内核空间中进行路由转发处理,从一个网路插口到另一个网路插口。
OUTPUT
数据包从用户空间流出到内核空间
POSTROUTING
路由处理过后,数据包离开网路插口前
数据包的传输过程是这样的:
iptables
iptables是拿来管理防火墙的的工具,通过iptables将过滤规则写入内核,Netfilter再按照规则对数据包进行过滤。
实际上iptables是通过调用Netfilter来实现防火墙管理的linux 命令,本身并不具备过滤数据包的功能。iptables程序坐落/sbin/iptables,配置文件坐落/etc/sysconfig/iptables。
不仅Netfilter的5种hook规则链,iptables还有4个规则表。规则表的作用就是容纳各类规则,并与netfilter的5个hook规则链产生一定的对应关系。
规则表
作用
raw表
确定是否对该数据包进行状态跟踪kernel2.6然后加进去的
mangle表
为数据包设置标记
nat表
更改数据包中的源ip、目标ip或端口
filter表
确定是否放行该数据包
规则表与规则链的示意图
iptables的包处理流程如右图所示。
iptables包处理流程
Firewalld
在Linux发行版Rhel7中,默认将防火墙从iptables升级为firewalld。Firewalld自身并不具备防火墙的功能,和iptables一样,也是通过内核的Netfilter来实现。
Firewalld和iptables的作用都是用于维护规则,真正使用规则干活的是内核的Netfilterlinux嵌入式开发,不过Firewalld和iptables的结构以及使用方式不太一样。Firewalld底层一直基于iptables的命令。
Firewall与iptables的区别
Firewalld将规则定义为zone,一个zone就是一套过滤规则,数据包必需要经过某个zone能够入站或出站。
Firewalld一共定义了9个zone:
总结
Firewalld相对于iptables的主要优点是更人性化,虽然不明白“四张表五条链”,或则对TCP/IP合同也不理解的人,也可以通过配置实现大部份功能。
在Linux发行版中既有iptables防火墙,又有firewalld防火墙。并且同一时刻只能开一个,所以必须得关掉其中一个,通常都是关掉iptables防火墙,打开Firewalld防火墙。
我会持续更新关于物联网、云原生、数字化技术方面的文章,用简单的语言描述复杂的技术,也会时常发表一下对IT产业的想法,请你们多多关注,欢迎留言和转发,希望与你们互动交流linux中tcp/ip协议实现及嵌入式应用,多谢。