【Redhat系列linux防火墙工具】firewalld与iptables防火墙工具的激烈碰撞

iptables与firewalld防火墙管理工具在linux发行版Redhat7系列使用较为广泛。
UFW则是在linux发行版Ubuntu下进行管理防火墙的一款管理工具。

在选用防火墙工具的时候,运维或者是开发人员往往会纠结使用哪个。这里给出建议,使用iptables工具管理就禁用firewalld,使用firewalld工具管理就禁用iptables,二者选其一即可,避免产生混乱。

此篇文章不会在原理上做深究,主要以实用性为主,原理可以阅读相关书籍慢慢品味。

正文 一、Netfilter内核模块

无论是使用iptables还是firewalld,不妨先了解一下Netfilter内核模块
什么是Netfilter:linux操作系统核心层内部的一个数据包处理模块。
Hook point:数据包在Netfilter中的挂载点。(PRE_ROUTING INPUT OUTPUT FORWORD POST_ROUTING)

1、netfilter的体系结构

网络数据包的的统信主要通过以下相关步骤,对应netfilter定义的钩子函数,具体可以参考源码介绍。

NF_IP_PRE_ROUTING

网络数据包进入系统,经过简单检测后,数据包转交给改函数进行处理,然后根据系统设置的规则对数据包进行处理,如果数据包不被丢弃则交给路由函数进行处理。在该函数中可以替换IP包的目的地址,及DNAT

NF_IP_LOCAL_IN:

所有发送给本机的数据包都要通过该函数进行处理,该函数根据系统设置的系统规则对数据包进行处理,如果数据包不被丢弃则交给本地的应用程序。

NF_IP_FORWARD:

所有不是发送给本机的数据包都要通过该函数进行处理,该函数会根据系统设置的规则对数据包进行处理,如数据包不被丢弃则转给

NF_IP_POST_ROUTING处理。

NF_IP_LOCAL_OUT:

所有从本地应用程序出来的数据包必须通过该函数进行处理,该函数会根据系统设置的规则对数据包进行处理,如数据包不被丢弃则交给路由函数进行处理。

NF_IP_POST_ROUTING

所有数据包在发送给其它主机之前需要通过该函数进行处理,该函数会根据系统设置的规则对数据包进行处理,如数据包不被丢弃,将数据包发给数据链路层。在该函数中可以替换IP包的源地址,即SNAT

数据包通过linux防火墙的处理过程如下图

2、包过滤

每个函数都可以对数据包进行处理,最基本的操作是对数据包进行过滤。系统管理员可以通过iptables工具来向内核模块注册多个过滤规则,并且指明过滤规则的优先权。设置完以后每个钩子按照规则进行匹配。如果规则匹配,函数就会进行一些过滤操作,这些操作主要如下:

NF_ACCEPT:继续正常的传递包。

NF_DROP:丢弃包,阻止传送。

SF_STOLEN:已经接管了包,不需要继续传送。

NF_QUEUE:排列包。

NF_REPEAT:再次使用钩子。

篇幅受限,介绍过多反而不好。关于包过滤就介绍这么多,后续会进一步完善。

二、firewalld防火墙工具

以Redhat系列为例子做简单的介绍,熟悉centos的基本上可以套用。

firewalld简介

​ 在RHEL7之前的版本中,iptables和ip6tables作为防火墙配置管理工具。在RHEL7中防火墙管理工具变成了firewalld,它是一个支持自定义网络区域(zone)及接口安全等级的动态防火墙管理工具。利用firewalld,用户可以实现许多强大的网络功能,例如防火墙、代理服务器以及网络地址转换。

​ 之前版本的system-config-firewall和lokkit防火墙模型是静态的,每次修改防火墙规则都需要完全重启。在此过程中包括提供防火墙的内核模块netfilter需要卸载和重新加载。而卸载会破坏已建立的连接和状态防火墙。与之前的静态模型有区别,firewalld将动态地管理防火墙,不需要重新启动防火墙,也不需重新加载内核模块。但firewalld服务要求所有关于防火墙的变更都要通过守护进程来完成,从而确保守护进程中的状态与内核防火墙之间的一致性。

​ 许多不了解的人,认为RHEL7中的防火墙从iptables变成了firewalld。其实不然,无论是iptables还是firewalld都无法提供防火墙功能。他们都只是linux系统中的一个防火墙管理工具,负责生成防火墙规则与内核模块netfilter进行“交流”,真正实现防火墙功能的是内核模块netfilter。

​ firewalld提供了两种管理模式:其一是firewall-cmd命令管理工具,其二是firewall-config图形化管理工具。在之前版本中的
iptables将规则保存在文件/etc/sysconfig/iptables中,现在firewalld将配置文件保存在/usr/lib/firewalld和/etc/firewalld
目录的xml文件中。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zggzpw.html