什么是Firewalld
当前很多linux系统中都默认使用 firewalld(Dynamic Firewall Manager of Linux systems,Linux系统的动态防火墙管理器)服务作为防火墙配置管理工具。
“firewalld”是firewall daemon。它提供了一个动态管理的防火墙,带有一个非常强大的过滤系统,称为 Netfilter,由 Linux 内核提供。有命令行界面(CLI)和图形界面(GUI).
这里主要讲解CLI方式。
“Firewalld”提供了一种非常灵活的方式来处理防火墙管理,有了区域(zone)的概念,用户根据使用场景选择不同域(zone),为每个域设置好策略,切换办公场所只要用鼠标去选择不同的区域即可,区域如同进入主机的安全门, 每个区域都具有不同限制程度的规则, 只会允许符合规则的流量传入,默认public区域(默认情况下,public区域是默认区域,包含所有接口 (网卡))。
firewalld域分为9个域
(1)丢弃区域(Drop Zone):如果使用丢弃区域,任何进入的数据包将被丢弃,这个类似于Centos6上的 iptables -j drop ,使用丢弃规则意味着将不存在相应。
(2)阻塞区域(Block Zone):阻塞区域会拒绝进入的网络连接,返回icmp-host-prohibited,只有服务器已经建立的连接会被通过,即只允许由该系统初始化的网络连接。
(3)公共区域(Public Zone):只接受那些被选中的连接,默认只允许ssh和dhcpv6-client,这个zone是缺省zone(缺省就是默认的意思,所以公共区域也是默认区域,在没有任何配置的情况下走的是公共区域)。
(4)外部区域(External Zone):这个区域相当于路由器的启动伪装(masquerading)选项,只有指定的连接会被接受,即ssh,而其他的连接将被丢弃或者不被接受。
(5)隔离区域(DMZ Zone):如果想要只允许给部分服务能被外部访问,可以在DMZ区域中定义,它也拥有只通过被选中连接的特性,即ssh, 这个区域又叫做非军事化区域。
(6)工作区域(Work Zone):在这个区域中,我们只能定义内部网络,比如私有网络通信才被允许, 只允许ssh、ipp-client和dhcpv6-client。
(7)家庭区域(Home Zone):这个区域专门用于家庭环境,它同样只允许被选中的连接, 即ssh、ipp-client、mdns、samba-client和dhcpv6-client。
(8)内部区域(Internal Zone):这个区域和 工作区域(Work Zone) 类似,只允许通过被选中的连接,与 家庭区域(Home Zone) 相同。
(9)信任区域(Trusted Zone):信任区域允许所有网络通信通过,因为 信任区域(Trusted Zone)是最被信任的,即使没有设置任何的服务,那么也是被允许的,因为 信任区域(Trusted Zone)是允许所有连接的。
以上是系统定义的所有的区域(Zone),但是,不是所有的区域(Zone)都在使用,只有活跃的区域(Zone)才有实际操作意义,活跃域是当前使用的域。
firewalld-cmd 是firewalld防火墙的命令行管理工具。
firewalld-cmd的参数及作用
参数 | 作用 |
---|---|
–get-default-zone | 查询默认的区域名称 |
–set-default-zone=<区域名称> | 设置默认的区域,使其永久生效 |
–get-zones | 显示可用的区域 |
–get-services | 显示预先定义的服务 |
–get-active-zones | 显示当前正在使用的区域与网卡名称 |
–add-source= | 将源自此IP或子网的流量导向指定的区域 |
–remove-source= | 不再将源自此IP或子网的流量导向某个指定区域 |
–add-interface=<网卡名称> | 将源自该网卡的所有流量都导向某个指定区域 |
–change-interface=<网卡名称> | 将某个网卡与区域进行关联 |
–list-all | 显示当前区域的网卡配置参数、资源、端口以及服务等信息 |
–list-all-zones | 显示所有区域的网卡配置参数、资源、端口以及服务等信息 |
–add-service=<服务名> | 设置默认区域允许该服务的流量 |
–add-port=<端口号/协议> | 设置默认区域允许该端口的流量 |
–remove-service=<服务名> | 设置默认区域不再允许该服务的流量 |
–remove-port=<端口号/协议> | 设置默认区域不再允许该端口的流量 |
–reload | 让“永久生效”的配置规则立即生效,并覆盖当前的配置规则 |
–panic-on | 开启应急状况模式 |
–panic-off | 关闭应急状况模式 |
–add-rich-rule | 防火墙富规则,具体用户也可以参见https://blog.51cto.com/u_3823536/2552274 |
–zoon | 制定设置域,用法–zoon=work |
firewalld中的过滤规则
参数 | 参数作用 |
---|---|
target | 目标区域 |
icmp-block-inversion | ICMP协议类型黑白名单开关(yes/no) |
Interfaces | 关联的网卡接口 |
sources | 来源,可以是IP地址,也可以是mac地址 |
services | 允许的服务 |
ports | 允许的目标端口,即本地开放的端口 |
protocols | 允许通过的协议 |
masquerade | 是否允许伪装(yes/no),可改写来源IP地址及mac地址 |
forward-ports | 允许转发的端口 |
source-ports | 允许的来源端口 |
icmp-blocks | 可添加ICMP类型,当icmp-block-inversion为no时,这些ICMP类型被拒绝;当icmp-block-inversion为yes时,这些ICMP类型被允许。 |
rich rules | 富规则,即更细致、更详细的防火墙规则策略,它的优先级在所有的防火墙策略中也是最高的。 |
对于一个接受到的请求具体使用哪个zone,firewalld是通过三种方法来判断的:
1、source,也就是源地址 优先级最高
2、interface,接收请求的网卡 优先级第二
3、firewalld.conf中配置的默认zone 优先级最低
firewalld防火墙的作用模式
Runtime模式:firewalld默认模式,当前生效模式,重启后失效;
Permanent模式:永久模式,需要系统重启或手动执行firewalld-cmd reload后生效。
firewalld-cmd操作实例
把原本访问本机8000端口的流量转发到7000端口,且长期有效
流量转发命令格式为:
firewall-cmd --permanent --zone=<区域> --add-forward-port=port= <源端口号>:proto=<协议>:toport=<目标端口号>:toaddr=<目标IP地址>
[root@linux ~]# firewall-cmd --permanent --zone=public --add-forward port=8000:proto=tcp:toport=7000:toaddr=192.168.1.100
success
[root@linux ~]# firewall-cmd --reload
success
查询eno16777728网卡在firewalld服务中的区域:
[root@linux ~]# firewall-cmd --get-zone-of-interface=eno16777728 public
firewalld服务中请求HTTP协议的流量设置为永久拒绝:
[root@linux ~]# firewall-cmd --permanent --zone=public --remove-service=http
success
实例:添加开发端口重载后生效
[root@MiWiFi-R4AC-srv ~]# firewall-cmd --state #查询firewalld防火墙状态
running
[root@MiWiFi-R4AC-srv ~]# firewall-cmd --list-ports #列出防火墙开放端口
80/tcp
[root@MiWiFi-R4AC-srv ~]# firewall-cmd --permanent --add-port=8090/tcp #添加8090开放端口
success
[root@MiWiFi-R4AC-srv ~]# firewall-cmd --list-ports #列出防火墙开放端口
80/tcp
[root@MiWiFi-R4AC-srv ~]# firewall-cmd --reload #重载firewalld防火墙
success
[root@MiWiFi-R4AC-srv ~]# firewall-cmd --list-ports #列出防火墙开放端口
80/tcp 8090/tcp
[root@MiWiFi-R4AC-srv ~]# firewall-cmd --query-port=8090/tcp #查询8090端口是否开放
success
[root@MiWiFi-R4AC-srv ~]# firewall-cmd --permanent --remove-port=8090/tcp #已出8090开发端口
success
[root@MiWiFi-R4AC-srv ~]# firewall-cmd --reload #重载firewalld防火墙
success
[root@MiWiFi-R4AC-srv ~]# firewall-cmd --permanent --list-ports #列出防火墙开放端口
80/tcp
[root@MiWiFi-R4AC-srv ~]#
实例: 开启某个端口(指定IP可访问)
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="10.1.1.14/32" port protocol="tcp" port="80" accept"
实例:删除某个端口(指定IP可访问)策略
firewall-cmd --permanent --zone=public --remove-rich-rule="rule family="ipv4" source address="10.1.1.14/32" port protocol="tcp" port="80" accept"
实例:防火墙配置文件路径
[root@MiWiFi-R4AC-srv ~]# firewall-cmd --list-all-zones #查看9个域
[root@MiWiFi-R4AC-srv ~]#cd /etc/firewalld/zones
[root@MiWiFi-R4AC-srv zones]# ls
block.xml dmz.xml drop.xml external.xml home.xml internal.xml public.xml trusted.xml work.xml
实例:firewall-cmd --list-all #默认查看的是public
[root@MiWiFi-R4AC-srv ~]# firewall-cmd --list-all #默认查看的是public
public (active)
target: default
icmp-block-inversion: no
interfaces: eno1
sources:
services: dhcpv6-client ssh
ports: 80/tcp 8090/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
实例:查询9个域
#[root@MiWiFi-R4AC-srv zones]# firewall-cmd --get-zones #查询防火墙9个域,配置文件位于/etc/firewalld/zones
block dmz drop external home internal public trusted work
对Firewalld服务的简单操作
查看本机使用哪种服务的防火墙
systemctl list-unit-files |grep firewalld #查看是否安装了firewalld防火墙
systemctl status firewalld #查看firewalld防火墙状态
查看开机是否启动防火墙
systemctl is-enabled firewalld.service
重新加载防火墙
systemctl reload firewalld.service
firewall-cmd --reload
启动firewalld防火墙
systemctl start firewalld
service firewalld.service start
重启firewalld服务
systemctl restart firewalld
service firewalld.service restart
关闭防火墙
systemctl stop firewalld
开机启动防火墙
systemctl enable firewalld.service
chkconfig firewalld on #开机启动firewalld
开机不启动firewalld防火墙
systemctl disable firewalld.service
or
chkconfig firewalld.service off #永久关闭firewalld.service
新版系统上已自带firewalld防火墙还可以使用iptables吗?
CentOS7 默认使用firewalld防火墙,如果想换回iptables防火墙,可关闭firewalld并安装iptables,启用iptables后即可使用iptalbes防火墙。
yum install iptables.service #安装iptables
firewalld 和iptables的关系
截图一张
Linux防火墙配置
/etc/firewalld/firewalld.conf