firewalld的底层是通过iptables来实现的,,firewalld 和 iptables 都不是防火墙,它们只是防火墙的管理程序,真正的防火墙是内核的netfilter。CentOs 6 中使用iptables来管理防火墙,到了CentOs 7 默认使用firewalld来管理防火墙, firewalld 的底层还是调用 iptables 的,firewalld在iptables的基础上加了许多很好用的功能。总的来说,firewalld 是系统服务,有守护进程。iptables 也只是一个工具,不是服务。firewall的包过滤机制也是通过iptables来实现的,
firewalld 的设计者认识到大多数的 iptables 使用案例仅涉及到几个单播源 IP,仅让每个符合白名单的服务通过,而其它的会被拒绝。这种模式的好处是,firewalld 可以通过定义的源 IP 和/或网络接口将入站流量分类到不同区域zone。每个区域基于指定的准则按自己配置去通过或拒绝包。
firewall对比iptables有什么变化:
firewall基于iptables 进行语法简化。firewalld 通过使用服务名而不是它的端口和协议去指定服务,使它更易于使用,例如,是使用 samba 而不是使用 UDP 端口 137 和 138 和 TCP 端口 139 和 445。它进一步简化语法,消除了 iptables 中对语句顺序的依赖。可以认为firewall就是iptables的管理工具,并且firewall中加入了防火墙的“zone”的概念 ,zone可以理解为 firewalld 的单位、规则集:
默认的规则集有:
drop(丢弃),任何接受的网络数据包都被丢弃,没有任何回复。仅能有发送出去的网路连接。
block(限制),任何接收的网络连接都被IPv4的icmp-host-prohibited信息和IPv6的icmp6-adm-prohibited信息所拒绝。
public(公共),在公共区域内使用,不能相信网络内的其他计算机不会对你的计算机造成危害,只能接收经过选取的连接。
external(外部),特别是为路由器启动了伪装功能的外部网。你不能相信来自网络的其他计算机,不能相信他们不会对你的计算机造成危害,只能接收经过选择的连接。
dmz(非军事区),用于你的非军事区内的电脑,此区域内可公开访问,可以有限的进入你的内部网络,仅仅接收经过选择的连接。
work(工作),用于工作区。你可以基本相信网络内的其他计算机不会危害到你。仅仅接收经过选择的连接。
home(家庭),用于家庭网络。你可以基本相信网络内的其他计算机不会危害到你。仅仅接收经过选择的连接。
internal(内部),用于内部网络。你可以基本相信网络内的其他计算机不会危害到你。仅仅接收经过选择的连接。
trusted(信任),可接受所有的网络连接。
firewall的默认zone是public,默认只开放ssh服务和ipv6-client服务
首先,我们来看看一个规则集中都包含了什么:
[root@localhost opt]# firewall-cmd --zone=public --list-allpublictarget: defaulticmp-block-inversion: no interfaces: sources: services: ssh dhcpv6-client ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
public 表示 public 区域
target: default
默认可以取四个值:default、ACCEPT、%%REJECT%%、DROP
ACCEPT:除了被明确写好的规则,会接受所有流入的数据包。
%%REJECT%%:除了被明确写好允许的规则,会拒绝所有流入的数据包, 会给发起连接的机器回复被拒绝的消息。
DROP:除了被明确写好允许的规则,会拒绝所有流入的数据包, 不会给发起连接的机器回复任何消息。
default:不做任何事情。
icmp-block-inversion: no
interfaces: 划归本规则集管理的硬件设备,如网卡等
sources: 信任区域的源ip
services: ssh dhcpv6-client 开放的服务
ports: 开放的端口
protocols:
masquerade: no表示这个区域是否允许 IP 伪装。如果允许,它将允许 IP 转发,它可以让你的计算机作为一个路由器。
forward-ports: 列出转发的端口。
source-ports: 信任区域的源ip及端口
icmp-blocks: 阻塞的 icmp 流量的黑名单。
rich rules: 在一个区域中优先处理的高级配置。
活动区域中扮演两个不同的角色。关联接口行为的区域作为接口区域,并且,关联源行为的区域作为源区域(一个区域能够扮演两个角色)。firewalld 按下列顺序处理一个包:
相应的源区域。可以存在零个或一个这样的区域。如果这个包满足一个富规则rich rule、服务是白名单中的、或者目标没有定义,那么源区域处理这个包,并且在这里结束。否则,向上传递这个包。
相应的接口区域。肯定有一个这样的区域。如果接口处理这个包,那么到这里结束。否则,向上传递这个包。
firewalld 默认动作。接受 icmp 包并拒绝其它的一切。
这里的关键信息是,源区域优先于接口区域。因此,对于多区域的 firewalld 配置的一般设计模式是,创建一个优先源区域来允许指定的 IP 对系统服务的提升访问,并在一个限制性接口区域限制其它访问。