Firewalld 简介

在某些方面,systemd 系统上的 firewalld 比 iptables 更易于管理和配置。 在大多数情况下,您不需要记住一长串链、跳转、接受和拒绝,以便在基本配置中启动和运行 firewalld。 规则简单明了,但是您没有理由仍然无法拥有 iptables 提供的所有功能。

firewalld 使用命令行实用程序 防火墙-cmd 配置和操作规则。 在我们开始配置之前,我们需要确保服务正在运行。 使用 系统控制 命令,您可以启用、禁用、启动、停止和重新启动 firewalld 服务。 对于这些命令中的大多数,没有有意义的输出 系统控制, 要验证每一个,您应该始终检查 firewalld 的状态。

Systemctl 和防火墙

启用防火墙

这确保 firewalld 将随服务器自动启动。

systemctl enable firewalld

启动防火墙

启用 firewalld 服务后,您第一次需要手动启动它。 如果 firewalld 尚未运行,您将如何手动启动它。

systemctl start firewalld

停止防火墙

在排除规则和连接问题时,您可能需要暂时停止 fireawlld 服务。 您可以使用以下命令停止该服务。

systemctl stop firewalld

重启firewalld

如果由于某种原因,您需要重新启动服务,您可以使用 系统控制 重启命令。

systemctl restart firewalld

防火墙状态

检查服务的状态为我们提供了最有意义和信息量最大的输出。 您可以在此处查看服务是否已启用、正在运行、失败或其他任何内容。

systemctl status firewalld

在此示例输出中,您可以看到该服务已启用、处于活动状态并在服务器上运行。 如果它没有运行或处于失败状态,则会显示此信息。

[[email protected] ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2019-01-22 22:50:32 EST; 1h 0min ago
Main PID: 808 (firewalld)
CGroup: /system.slice/firewalld.service
└─808 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

管理防火墙和配置规则

现在我们已经运行了 firewalld,我们可以开始设置配置了。 我们可以打开端口、允许服务、将 IP 列入白名单以进行访问等等。 在所有这些例子中,我们包括 – 永恒的 旗帜。 这对于确保即使在重新启动 firewalld 或重新启动服务器后仍保存规则很重要。 完成添加新规则后,您需要重新加载防火墙以使新规则处于活动状态。

为 TCP 或 UDP 添加端口

您必须指定 TCP 或 UDP 并为两者打开一个端口。 您需要为每个协议添加规则。

firewall-cmd --permanent --add-port=22/TCP
firewall-cmd --permanent --add-port=53/UDP

删除 TCP 或 UDP 的端口

对上述结构稍作修改,您可以删除当前打开的端口,从而有效地关闭该端口。

firewall-cmd --permanent --remove-port=444/tcp

添加服务

这些服务假定默认端口配置在 /etc/服务 配置文件; 如果您希望在非标准端口上使用服务,则必须打开特定端口,如上例所示。

firewall-cmd --permanent --add-service=ssh
firewall-cmd --permanent --add-service=http

删除服务

如上,指定remove-service选项,即可 close 关闭为该服务定义的端口。

firewall-cmd --permanent --remove-service=mysql

将 IP 地址列入白名单

要将某个 IP 或 IP 范围列入白名单或允许访问,您可以告诉防火墙添加可信来源。

firewall-cmd --permanent --add-source=192.168.1.100

您还可以使用所谓的 CIDR 表示法允许一系列 IP。 CIDR 不在本文的讨论范围内,但它是可用于记录 IP 地址范围的速记。

firewall-cmd --permanent --add-source=192.168.1.0/24

删除列入白名单的 IP 地址

要删除列入白名单的 IP 或 IP 范围,您可以使用 –remove-source 选项。

firewall-cmd --permanent --remove-source=192.168.1.100

阻止 IP 地址

由于firewall-cmd工具主要用于打开或允许访问,因此需要丰富的规则来阻止IP。 富规则在形式上类似于iptables规则的编写方式。

firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address="192.168.1.100" reject"

您可以再次使用 CIDR 表示法来阻止 IP 地址范围。

firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address="192.168.1.0/24" reject"

将特定端口的 IP 地址列入白名单(更丰富的规则)

我们必须回到 iptables 并创建另一个丰富的规则; 但是,我们在末尾使用了 accept 语句来允许 IP 访问,而不是拒绝其访问。

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="3306" accept"

删除丰富的规则

要删除丰富的规则,请使用选项 —删除丰富规则,但您必须完全指定要删除的规则,因此最好复制并粘贴完整规则,而不是尝试从内存中全部输入。

firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="3306" accept"

保存防火墙规则

在您完成所有规则的增减后,您需要重新加载防火墙规则以使其处于活动状态。 为此,您再次使用 防火墙-cmd 工具但使用选项 –重新加载.

firewall-cmd --reload

查看防火墙规则

重新加载规则后,您可以通过以下内容确认新规则是否正确到位。

firewall-cmd --list-all

下面是一个示例输出 –list-all 选项,您可以看到此服务器有许多端口,并且防火墙中打开了服务以及丰富的规则(将一个端口转发到另一个端口)。

[[email protected] ~]# firewall-cmd --list-all
public (default, active)
interfaces: enp1s0
sources: 192.168.1.0/24
services: dhcpv6-client dns http https mysql nfs samba smtp ssh
ports: 443/tcp 80/tcp 5900-5902/tcp 83/tcp 444/tcp 3260/tcp
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="192.168.1.0/24" forward-port port="5423" protocol="tcp" to-port="80"

奖励 #1 :: Firewalld GUI 配置

虽然本文主要关注命令行实用程序 firewall-cmd 的使用,但也有用于处理 firewalld 规则的图形工具。 你可以在下面找到这些 应用 > 杂项 具有图形访问权限的 CentOS 7.x 和 RedHat 7.x 服务器上的菜单。 要安装此应用程序,您可以从命令行运行以下命令:

sudo yum install firewall-config

在防火墙实用程序中,您可以更轻松地创建和添加更复杂的“丰富规则”,否则在命令行中执行起来会更加乏味。 请注意,即使在图形实用程序中,您仍然需要使用 永恒的 选项。

丰富的规则设置
丰富的规则设置

奖励 #2 :: Firewalld 直接规则

直接规则是一个特殊的独立规则区域,旨在成为与防火墙交互的更“直接”的方式。 您可以编辑规则 /etc/firewalld/direct.xml 文件并重新加载防火墙以激活这些规则。 这些规则看起来很像丰富的规则,或者旧的 iptables 样式规则,但是以 XML 格式编写的。

直接接口主要供服务或应用程序用来添加特定的防火墙规则。 下面是来自 firewalld 手册页的规则块示例。 此特定示例说明了将一组源 IP 地址与称为“黑名单”的规则链进行匹配。 这个“黑名单”链然后说在 IP 匹配时记录日志,最后删除来自这些 IP 的连接。

<?xml version="1.0" encoding="utf-8"?>
<direct>
<chain ipv="ipv4" table="raw" chain="blacklist"/>
<rule ipv="ipv4" table="raw" chain="PREROUTING" priority="0">-s 192.168.1.0/24 -j blacklist</rule>
<rule ipv="ipv4" table="raw" chain="PREROUTING" priority="1">-s 192.168.5.0/24 -j blacklist</rule>
<rule ipv="ipv4" table="raw" chain="blacklist" priority="0">-m limit --limit 1/min -j LOG --log-prefix "blacklisted: "</rule>
<rule ipv="ipv4" table="raw" chain="blacklist" priority="1">-j DROP</rule>
</direct>

您还可以通过命令行实用程序与这些规则进行交互 防火墙-cmd,但您需要包括 – 直接的 标志以指示您正在使用直接规则集。

进一步阅读:

这里有更多 关于 firewalld 的信息 从 Fedora 并从 firewalld.org 网站.

立即预订您的位置!

给我们打电话 800.580.4985,或打开一个 聊天 或立即与我们联系,与我们知识渊博的解决方案团队之一或经验丰富的托管顾问交谈!