防火墙概述
Firewalld
是一种提供了支持网络/防火墙区域(zone)定义网络链接以及接口安全等级的动态防火墙管理工具,它自身并不具备防火墙的功能,而是和iptables
一样需要通过内核的netfilter来实现。
也就是说firewalld和iptables一样,他们的作用都是用于维护规则,而真正使用规则干活的是内核的netfilter
,只不过firewalld和iptables的结构以及使用方法不一样罢了。
-
从逻辑上可分为:主机防火墙和网络防火墙
-
从物理上可分为:硬件防火墙和软件防火墙
防火墙主要通过Netfilter
与TCP Wrappers
两个机制来管理的。
-
Netfilter
:数据包过滤机制 -
TCP Wrappers
:程序管理机制
在RHEL7系列中,默认使用firewalld作为防火墙。在RHEL7版本已经默认没有iptables服务了,当然iptables 命令还是可以用的。
Firewalld原理架构
1) Firewalld区域管理
通过将网络划分成不同的区域,制定出不同区域之间的访问控制策略来控制不同程序区域间传送的数据流。
互联网是不可信任的区域,而内部网络是高度信任的区域,网络安全模型可以在安装、初次启动和首次建立网络连接时选择初始化。
该模型描述了主机所连接的整个网络环境的可信级别,并定义了新连接的处理方式。
2) Firewalld域
网络区名称 | 默认配置 |
---|---|
trusted(信任) | 可接受所有的网络连接 |
home(家庭) | 用于家庭网络,仅接受ssh,mdns,gp-client,samba-client,dhcpv6-client连接 |
internal( 内部) | 用于内部网络,仅接受ssh,mdns,gp-client,samba-client,dhcpv6-client连接 |
work(工作) | 用于工作区,仅接受sshjpp-client,dhcpv6-client服务连接 |
public(工作) | 用于工作区,仅接受ssh,ipp-client,dhcpv6-client服务连接,在公共区域内使用,仅接受ssh或dhcpv6-client服务连接,是firewalld的默认区域 |
external( 外部) | 出去的ipv4网络连接通过此区域为伪装或转发,仅接受ssh服务的连接 |
dmz(非军事区) | 仅接受ssh服务的连接 |
block(限制) | 拒绝所有网络的连接 |
drop (丢弃) | 任何接收的网络数据包都被丢弃,没有任何回复 |
firewalld的默认区域是
public
3) Firewalld配置文件
firewalld默认提供了九个zone配置文件:block.xml
、dmz.xml
、drop.xml
、external.xml
、 home.xml
、internal.xml
、public.xml
、trusted.xml
、work.xml
,都保存在/usr/lib/firewalld/zones/
目录下。
Firewalld 和 Iptables 的异同
1) 相同点
firewalld
与iptables
都是linux中防火墙的管理程序,但其实其角色主要为对于防火墙策略的管理,真正的防火墙执行者是位于内核中的netfilter
。
2) 不同点
-
iptables 仅能通过命令行进行配置;而 firewalld 提供了图形接口,类似windows防火墙的操作方式;
-
iptables 每一个单独更改意味着清除所有旧的规则,并从 /etc/sysconfig/iptables 中读取所有新的规;则;而 firewalld 在有规则变动后,可以仅仅运行规则中的不同之处,即在 firewalld 运行时间内,改变设置时可以不丢失现行链接;
-
iptables 的配置文件在 /etc/sysconfig/iptables 中;而 firewalld 的配置文件在 /usr/lib/firewalld/ 和 /etc/firewalld/ 中的各种 XML 文件中;
-
iptables 没有守护进程,并不能算是真正意义上的服务;而 firewalld 有守护进程;
-
iptables 通过控制端口来控制服务,而 firewalld 则是通过控制协议来控制端口;
-
【firewalld】默认是拒绝;而【iptables】默认是允许。
service说明:在
/usr/lib/firewalld/services/
目录中,还保存了另外一类配置文件,每个文件对应一项具体的网络服务,如 ssh 服务等。这个目录下的服务配置默认是放通的,不受firewalld-cmd 规则控制,除非把这个目录下的服务配置文件删掉,就恢复了默认了(默认拒绝),当然也可以添加一些服务配置文件。
验证默认拒绝规则
# 这里用到nc工具去监听端口
# 安装nc
yum install -y nc
# 监听端口
nc -l 8888
# 查询端口
ss -tnlp|grep :8888
用另外一台机器telnet端口 telnet 192.168.182.149 8888
Firewalld实战操作
只有firewalld服务启动了,才能使用相关工具:firewall-config(图形界面), firewall-cmd,这里主要介绍命令行方式的。
1)Firewalld有规则两种状态
-
运行时
(runtime)
:修改规则马上生效,但是临时生效 -
持久配置
(permanent)
:修改后需要重载才会生效
firewall-cmd --permanent [RULE]
firewall-cmd --reload
一旦使用了
--permanent
会将配置写入到/etc/firewalld/{services,zones}/*.xml
对应的文件中,配置完成后一定要reload,否则只能待防火墙重启后这些配置才能生效。
2)Firewalld配置文件
/etc/firewalld/{services,zones}/*.xml 优先级最高,permanent模式生效的策略会放到这里
/lib/firewalld/{services,zones}/*.xml 优先级要低些,是一些默认配置,可以当做模板使用
以下options是可以组合使用的,具体见