CentOS 7 配置管理 Firewalld 防火墙

Firewalld 提供了一个动态管理的防火墙,用以支持网络区域,以分配对一个网络及其相关链接和界面一定程度的信任。它具备对 IPv4IPv6 防火墙设置的支持。它支持以太网桥,并有分离运行时间和永久性配置选择。它还具备一个通向服务或者应用程序以直接增加防火墙规则的接口。

配置防火墙

更新防火墙

更新 yum 源:

yum -y update

CentOS 7 自带了 firewalld 防火墙,只需更新防火墙:

yum -y upgrade firewalld

开启防火墙服务

开启防火墙服务:

systemctl start firewalld

设置防火墙服务开机启动:

systemctl enable firewalld

查看防火墙服务状态:

systemctl status firewalld

● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: active (running) since Mon 2017-08-14 16:08:24 CST; 1min 2s ago

Docs: man:firewalld(1)

Main PID: 9874 (firewalld)
CGroup: /system.slice/firewalld.service

​ └─9874 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

Aug 14 16:08:24 web systemd[1]: Starting firewalld - dynamic firewall daemon...
Aug 14 16:08:24 web systemd[1]: Started firewalld - dynamic firewall daemon.

设置防火墙规则

命令行工具 firewall-cmd 是 firewalld 的一部分,可使用 firewall-cmd 来设置 firewalld。

检查 firewall-cmd 是否可以通过输入以下命令来连接后台程序:

firewall-cmd --state

running

查看当前默认的 zone(firewalld 默认 zone 就是 public):

firewall-cmd --get-default-zone

public

如果不是 public,设置默认 zone 为 public(立即生效,无需重启):

firewall-cmd --set-default-zone=public

查看默认区域启用的服务:

firewall-cmd --list-service

dhcpv6-client ssh

移除除了 ssh 之外的服务:

firewall-cmd --permanent --remove-service=dhcpv6-client

查看下次重启(防火墙重新加载、服务器重启或者系统重启)之后永久生效的服务:

firewall-cmd --permanent --list-service

ssh

重新加载防火墙规则:

firewall-cmd --reload

管理防火墙服务

查看防火墙服务状态:

systemctl status firewalld

打开、关闭、重启防火墙服务:

# 打开
systemctl start firewalld
# 关闭
systemctl stop firewalld
# 重启
systemctl restart firewalld

打开、关闭防火墙服务开机启动:

# 查看防火墙服务是否开机启动
systemctl is-enabled firewalld
# 打开防火墙服务开机启动
systemctl enable firewalld
# 关闭防火墙服务开机启动
systemctl disable firewalld

管理防火墙规则

查看信息

# 查看帮助
firewall-cmd -h
firewall-cmd --help
# 查看版本号
firewall-cmd -V
firewall-cmd --version
# 查看防火墙当前状态
firewall-cmd --state

规则重载

重新加载防火墙规则(在修改配置文件,或者使用 --permanent 参数的命令后需要重新加载):

# 重新加载防火墙规则,不中断用户连接(不丢失状态信息)
firewall-cmd --reload
# 重新加载防火墙规则,并中断用户连接(丢弃状态信息)
firewall-cmd --complete-reload

区域设置

查看区域:

# 查看所有预定义区域名称
firewall-cmd --get-zones
# 列出当前所有区域名称及区域信息
firewall-cmd --list-all-zones
# 查看指定区域设置
firewall-cmd --info-zone=<zone>
# 查看默认(指定)区域设置
firewall-cmd [--permanent] [--zone=<zone>] --list-all

默认区域设置:

# 获取当前默认区域名称
firewall-cmd --get-default-zone
# 修改默认区域(public 为 firewalld 默认区域)
firewall-cmd --set-default-zone=<zone>

活动区域:

# 获取当前活动区域名称
firewall-cmd --get-active-zones

服务设置

查看服务:

# 查看所有预定义服务名称
firewall-cmd --get-services
# 查看指定服务的详细信息
firewall-cmd --info-service=<service>

默认(指定)区域的服务设置:

# 列出默认(指定)区域所有临时(永久)启用的服务
firewall-cmd [--permanent] [--zone=<zone>] --list-services
# 查询默认(指定)区域是否临时(永久)启用了指定服务
firewall-cmd [--permanent] [--zone=<zone>] --query-service=<service>
# 给默认(指定)区域临时(永久)启用指定服务
firewall-cmd [--permanent] [--zone=<zone>] --add-service=<service>
# 给默认(指定)区域临时(永久)移除指定服务
firewall-cmd [--permanent] [--zone=<zone>] --remove-service=<service>

端口和协议设置

默认(指定)区域的端口和协议设置(不包含服务中的):

# 列出默认(指定)区域临时(永久)添加的端口和协议
firewall-cmd [--permanent] [--zone=<zone>] --list-ports
# 查询默认(指定)区域是否临时(永久)启用了指定端口和协议
firewall-cmd [--permanent] [--zone=<zone>] --query-port=<portid>[-<portid>]/<protocol>
# 给默认(指定)区域临时(永久)添加指定的端口和协议
firewall-cmd [--permanent] [--zone=<zone>] --add-port=<portid>[-<portid>]/<protocol>
# 从默认(指定)区域临时(永久)移除指定的端口和协议
firewall-cmd [--permanent] [--zone=<zone>] --remove-port=<portid>[-<portid>]/<protocol>

指定服务的端口和协议设置:

# 查看指定服务的端口信息
firewall-cmd --permanent --service=<service> --get-port
# 添加端口到指定服务
firewall-cmd --permanent --service=<service> --add-port=<portid>[-<portid>]/<protocol>
# 从指定服务移除端口
firewall-cmd --permanent --service=<service> --remove-port=<portid>[-<portid>]/<protocol>

Panic 模式设置

# 查询 panic 模式是否被启用
firewall-cmd --query-panic
# 开启 panic 模式,开始终止所有输入和输出的数据包,活动的连接在会话超时后也将被终止
firewall-cmd --panic-on
# 关闭 panic 模式,开始再次传输输入和输出的数据包
firewall-cmd --panic-off

注意事项

  • 对某一指定区域规则(接口、服务、端口、协议等)的设置,不添加 --permanent 参数,设置能立即生效,且仅仅在下次防火墙重新加载、服务器重启或者系统重启之前生效。
  • 对某一指定区域规则(接口、服务、端口、协议等)的设置,添加 --permanent 参数时,设置不能立即生效,需要在防火墙重新加载、服务器重启或者系统重启之后生效,且之后永久生效。
  • 对某一指定区域规则(接口、服务、端口、协议等)的同一设置,不添加 --permanent 参数和添加 --permanent 参数各执行一次,设置可以立即生效,且永久生效。

防火墙配置文件

常见配置文件

  • /etc/firewalld/firewalld.conf :防火墙主配置文件。
  • /usr/lib/firewalld/zones/<zone>.xml :预定义的区域配置文件,请勿编辑。
  • /etc/firewalld/zones/<zone>.xml :系统或用户创建的配置文件,优先级高于同名的预定义的区域配置文件。
  • /usr/lib/firewalld/services/<service>.xml :预先定义服务配置文件,请勿编辑。
  • /etc/firewalld/services/<service>.xml :系统或用户创建的配置文件,优先级高于同名的预定义的服务配置文件。

修改配置文件

  • 手动修改防火墙区域和服务配置文件时,应先将要修改的服务配置文件从 /usr/lib/firewalld/ 目录拷贝到 /etc/firewalld/ 目录(如果已经存在则不需要再拷贝),再编辑 /etc/firewalld/ 目录下的服务配置文件。
  • 使用 firewalld-cmd 和 firewalld-config 工具修改防火墙配置时,系统会自动完成拷贝工作(如果已经存在则不会再拷贝),然后将修改保存在 /etc/firewalld/ 目录下的配置文件中。
  • 修改完配置文件,需要重载防火墙服务,修改的规则才能生效。

参考文献