Linux firewalld防火墙使用教程
前面学习了 iptables 的概念及其用法(阅读《Linux iptables命令详解》一节),那么在本节中将学习 firewalld 的使用方法。
firewalld 是配置和监控防火墙规则的系统守护进程。firewalld 通过“zones”来管理防火墙规则。每一个进入系统的数据包,都会首先检查它的源 IP 地址和接口(进出的网卡接口),如果地址与某个 zone 匹配,则该 zone 中的规则将生效。而每个 zone 都会有开启或关闭的服务和端口的列表,以实现允许或拒绝连接服务和端口。
如果数据包的源IP地址和网卡接口都不能和任何 zone 匹配,则该数据包将匹配默认 zone,一般情况下是一个名称为 public 的默认 zone。firewalld 会提供 block、dmz、drop、external、home、internal、public、trusted、work 这 9 个zone。
大部分 zone 都定义有自己的允许规则,规则通过端口/协议(631/udp)或者预定义的服务(ssh)这种形式设置,如果数据包没有匹配这些允许的规则,则该数据包会被防火墙拒绝。但有一个名称为 trusted 的 zone,默认会运行所有的数据流量,如果有一个数据包进入了该 zone,则被允许访问所有的资源。
firewalld 预定义的 zone 名称及其功能如表 1 所示。
一般情况下,CentOS7 中已经安装 firewalld;如果系统中没有的话,需要安装 firewalld 软件包,系统就会提供该命令工具。安装 firewalld 软件包的命令如下:
firewalld-cmd 命令的基本格式如下:
systemctl 是 CentOS 7 的服务管理工具中主要的工具,它把 service 和 chkconfig 的功能融为一体。firewalld 的使用包括以下几个方面:
例如:
1) 查看默认的zone。命令以及输出结果如下所示:
2) 设置默认 zone 为 trusted。命令以及输出结果如下所示:
3) 显示系统预定义的 zone,默认为 9 个 zone,如下所示:
4) 显示所有的 zone 以及对应的规则信息,显示的部分结果如下所示:
5) 向 public 的 zone 中添加允许访问 FTP 服务的规则,添加之后的结果如下所示:
声明:《Linux系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。
firewalld简介
firewalld 是 CentOS7 中的特性之一,它不仅支持动态的更新,不需要重新启动服务,而且引入了防火墙的“zone”概念。firewalld 是配置和监控防火墙规则的系统守护进程。firewalld 通过“zones”来管理防火墙规则。每一个进入系统的数据包,都会首先检查它的源 IP 地址和接口(进出的网卡接口),如果地址与某个 zone 匹配,则该 zone 中的规则将生效。而每个 zone 都会有开启或关闭的服务和端口的列表,以实现允许或拒绝连接服务和端口。
如果数据包的源IP地址和网卡接口都不能和任何 zone 匹配,则该数据包将匹配默认 zone,一般情况下是一个名称为 public 的默认 zone。firewalld 会提供 block、dmz、drop、external、home、internal、public、trusted、work 这 9 个zone。
大部分 zone 都定义有自己的允许规则,规则通过端口/协议(631/udp)或者预定义的服务(ssh)这种形式设置,如果数据包没有匹配这些允许的规则,则该数据包会被防火墙拒绝。但有一个名称为 trusted 的 zone,默认会运行所有的数据流量,如果有一个数据包进入了该 zone,则被允许访问所有的资源。
firewalld 预定义的 zone 名称及其功能如表 1 所示。
zone名称 | 功 能 |
---|---|
trusted | 允许所有的数据包 |
home | 允许其他主机入站访问本机的 ssh, mdns, ipp-client, samba-client 或者 dhcpv6-client 这些预定义的服务;本机访问其他主机后,对方返回的入站数据,都将被允许;拒绝其他所有入站的数据包 |
internal | 允许其他主机入站访问本机的ssh, mdns, ipp-client, samba-client 或者 dhcpv6-client 这些预定义的服务;本机访问其他主机后,对方返回的入站数据,都将被允许;拒绝其他所有入站的数据包 |
work | 允许其他主机入站访问本机的 ssh 或 dhcpv6-client 这些预定义的服务;本机访问其他主机后,对方返回的入站数据,都将被允许;拒绝其他所有入站的数据包 |
public | 允许其他主机入站访问本机的 ssh 或 dhcpv6-client 这些预定义的服务;本机访问其他主机后,对方返回的入站数据,都将被允许;拒绝其他所有入站的数据包 |
external | 允许其他主机入站访问本机的 ssh 服务;本机访问其他主机后,对方返回的入站数据,都将被允许; 拒绝其他所有入站的数据包;通过本 zone 进行转发的 IPv4 数据包,都将会进行 NAT 后再转发出去 |
dmz | 允许其他主机入站访问本机的 ssh 服务;本机访问其他主机后,对方返回的入站数据,都将被允许; 拒绝其他所有入站的数据包 |
block | 本机访问其他主机后,对方返回的入站数据,都将被允许;拒绝其他所有入站的数据包 |
drop | 本机访问其他主机后,对方返回的入站数据,都将被允许;丢弃掉所有其他入站的数据包 |
firewalld的管理工具
对于系统的管理员来说,可以使用 firewalld-cmd 命令来管理防火墙规则。一般情况下,CentOS7 中已经安装 firewalld;如果系统中没有的话,需要安装 firewalld 软件包,系统就会提供该命令工具。安装 firewalld 软件包的命令如下:
[root@bogon ~] # yum install firewalld firewall-config
firewalld-cmd 命令的基本格式如下:
[root@bogon ~] # firewalld-cmd [选项]
firewalld-cmd 命令的常用选项及功能如表 2 所示。选 项 | 功 能 |
---|---|
--get-default-zone | 获取默认的 zone 信息 |
--set-default-zone <zone> | 设置默认的 zone |
--get-active-zones | 显示当前正在使用的 zone 信息 |
--get-zones | 显示系统预定义的zone |
--get-services | 显示系统预定义的服务名称 |
--get-zones-of-interface=<interface> | 查询某个接口与哪个zone匹配 |
--get-zones-of-source=<source>[/<mask>] | 查询某个源地址与哪个zone匹配 |
--list-all-zones | 显示所有的zone信息的所有规则 |
--add-service=<service> | 向zone中添加允许访问的服务 |
--add-port=<portid>[-<portid>]/<protocol> | 向zone中添加允许访问的端口 |
--add-interface=<interface> | 将接口与zone绑定 |
--add-source=<source>[/<mask>] | 将源地址与zone绑定 |
--list-all | 列出某个zone的所有规则 |
--remove-service=<service> | 从zone中移除允许某个服务的规则 |
--remove-port=<portid>[-<portid>]/<protocol> | 从zone中移除允许某个端口的规则 |
--remove-source=<source>[/<mask>] | 将源地址与zone解除绑定 |
--remove-interface=<interface> | 将网卡接口与zone解除绑定 |
--permanent | 设置永久的有效规则,默认规则都是临时的 |
--reload | 重新加载防火墙规则 |
systemctl 是 CentOS 7 的服务管理工具中主要的工具,它把 service 和 chkconfig 的功能融为一体。firewalld 的使用包括以下几个方面:
- 启动服务:systemctl start firewalld.service。
- 关闭服务:systemctl stop firewalld.service。
- 重启服务:systemctl restart firewalld.service。
- 显示服务的状态:systemctl status firewalld.service。
- 在开机时启用服务:systemctl enable firewalld.service。
- 在开机时禁用服务:systemctl disable firewalld.service。
- 查看服务是否开机启动:systemctl is-enabled firewalld.service。
- 查看已启动的服务列表:systemctl list-unit-files|grep enabled。
- 查看启动失败的服务列表:systemctl --failed。
例如:
1) 查看默认的zone。命令以及输出结果如下所示:
[root@bogon ~] # firewalld-cmd --get-default-zone
public
2) 设置默认 zone 为 trusted。命令以及输出结果如下所示:
[root@bogon ~] # firewalld-cmd --set-default-zone=trusted
success
3) 显示系统预定义的 zone,默认为 9 个 zone,如下所示:
[root@bogon ~] # firewalld-cmd --get-zones
block dmz drop external home internal public trusted work
4) 显示所有的 zone 以及对应的规则信息,显示的部分结果如下所示:
[root@bogon ~] # firewalld-cmd --list-all-zones
block
.......
dmz
.......
读者可自行运行该命令,查看输出结果,这里不再展示。
5) 向 public 的 zone 中添加允许访问 FTP 服务的规则,添加之后的结果如下所示:
[root@bogon ~] # firewalld-cmd --add-service=ftp--zone=public
success
声明:《Linux系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。