如何在CentOS 8中配置和管理防火墙

防火墙是一种监视和筛选传入和传出网络流量的方法。它通过定义一组确定是否允许或禁止某些流量的安全规则来工作。正确配置的防火墙是整个系统安全的最重要方面之一。

CentOS 8附带了一个名为firewalld的防火墙守护程序。具有D-Bus接口的完整解决方案,可以动态管理系统的防火墙。

本教程描述了如何在CentOS 8上配置和管理防火墙。它还说明了FirewallD的基本概念。

先决条件

要配置防火墙服务,您必须以具有root或sudo特权的用户身份登录。

基本防火墙概念

Firewalld使用区域和服务的概念。您可以根据您配置的区域和服务来控制允许或阻止来自系统的流量。

可以使用以下方法配置和管理Firewalld: firewall-cmd 命令行实用程序。

在CentOS 8中,iptables已被nftables替换为firewalld守护程序的默认防火墙后端。

防火墙区

区域是预定义的规则集,用于指定计算机连接到的网络的信任级别。您可以将网络接口和源分配给区域。

以下是FirewallD根据不受信任区域中受信任区域的信任级别提供的区域列表。

  • 下降:所有传入的连接将被丢弃,恕不另行通知。仅允许传出连接。
  • :所有传入的连接均被拒绝, icmp-host-prohibited 留言内容 IPv4icmp6-adm-prohibited 对于IPv6n。仅允许传出连接。
  • 公开的:用于不可靠的公共区域。您不信任网络上的其他计算机,但是可以允许选择的传入连接。
  • 外面:在系统充当网关或路由器时,在启用了NAT伪装的外部网络上使用。仅允许选择的传入连接。
  • 里面:当系统用作网关或路由器时,在内部网络上使用。网络上的其他系统通常是受信任的。仅允许选择的传入连接。
  • dmz:用于非军事区且对网络其余部分的访问受到限制的计算机。仅允许选择的传入连接。
  • 工作时间:用于工作机。网络上的其他计算机通常是受信任的。仅允许选择的传入连接。
  • 首页:用于家用机械。网络上的其他计算机通常是受信任的。仅允许选择的传入连接。
  • 可靠的:接受所有网络连接。信任网络中的所有计算机。

防火墙服务

防火墙服务是在区域内应用的预定义规则,它定义允许特定服务的传入流量所需的设置。使用此服务,您可以轻松地一步执行多个任务。

例如,服务可以包括端口打开,流量转发等的定义。

防火墙运行时和持久配置

Firewalld使用两个单独的配置集:运行时配置和持久性配置。

运行时配置是实际的运行配置,并且在重新启动时不会保留。当firewalld守护程序启动时,它将读取持久配置并成为运行时配置。

默认情况下,如果使用 firewall-cmd 对于实用程序,更改将应用​​于运行时配置。为使更改永久生效, --permanent 命令选项。

要在两个配置集中应用更改,可以使用以下两种方法之一:

  1. 更改运行时配置以使其永久不变。

    sudo firewall-cmd 
    sudo firewall-cmd --runtime-to-permanent
  2. 更改永久配置并重新加载firewald守护程序。

    sudo firewall-cmd --permanent 
    sudo firewall-cmd --reload

启用防火墙D

在CentOS 8中,默认情况下已安装并启用firewalld。如果由于某种原因未在系统上安装它,则可以通过键入以下内容来安装并启动守护程序:

sudo dnf install firewalld
sudo systemctl enable firewalld --now

您可以按照以下方式检查防火墙服务的状态:

sudo firewall-cmd --state

如果启用了防火墙,则必须打印命令 running。否则,它将显示 not running

防火墙区

如果未更改,则默认区域为 public所有网络接口都分配给该区域。

默认区域是用于所有未明确分配给另一个区域的区域。

您可以通过键入以下内容显示默认区域:

sudo firewall-cmd --get-default-zone
public

要获取所有可用区域的列表,请输入:

sudo firewall-cmd --get-zones
block dmz drop external home internal public trusted work

要查看活动区域和分配给它们的网络接口,请执行以下操作:

sudo firewall-cmd --get-active-zones

以下输出显示了界面 eth0eth1 分配给 public 区域:

public
  interfaces: eth0 eth1

您可以通过以下方式打印区域配置设置:

sudo firewall-cmd --zone=public --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0 eth1
  sources:
  services: ssh dhcpv6-client
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

从上面的输出中,您可以看到公共区域处于活动状态并使用默认目标。 REJECT。输出还显示该区域正在被使用 eth0eth1 接口并允许DHCP客户端和SSH通信。

要检查所有可用区域类型的配置:

sudo firewall-cmd --list-all-zones

此命令将打印一个巨大的列表,其中包含所有可用区域的设置。

变更区域目标

目标为未指定的传入流量定义区域的默认行为。可以设置为以下选项之一: defaultACCEPTREJECTDROP

要设置区域目标,请在 --zone 选择和目标 --set-target 可选的。

例如改变 public 区域目标 DROP 您运行:

sudo firewall-cmd --zone=public --set-target=DROP

将接口分配给其他区域

您可以为每个区域创建特定的规则集,并为它们分配不同的接口。在机器上使用多个接口时,这特别有用。

要将接口分配给另一个区域,请指定区域 --zone 与选项接口 --change-interface 可选的。

例如,命令 eth1 介面 work 区域:

sudo firewall-cmd --zone=work --change-interface=eth1

输入以下内容以确认更改:

sudo firewall-cmd --get-active-zones
work
  interfaces: eth1
public
  interfaces: eth0

更改默认区域

更改默认区域: --set-default-zone 在选项之后,将区域名称指定为默认名称。

例如,默认区域 home 运行以下命令:

sudo firewall-cmd --set-default-zone=home

使用以下命令确认更改:

sudo firewall-cmd --get-default-zone
home

防火墙服务

firewalld允许基于称为服务的预定义规则的流量流向特定的端口或源。

要获取默认情况下所有可用服务的列表,请输入:

sudo firewall-cmd --get-services

您可以通过打开关联的.xml文件找到有关每个服务的详细信息。 /usr/lib/firewalld/services 目录。例如,HTTP服务定义如下:

/usr/lib/firewalld/services/http.xml



  WWW (HTTP)
  HTTP is the protocol used to serve Web pages. If you plan to make your Web server publicly available, enable this option. This option is not required for viewing pages locally or developing Web pages.
  

要仅允许当前会话(运行时配置)的公共区域接口的传入HTTP通信(端口80)进入,请输入:

sudo firewall-cmd --zone=public --add-service=http

如果要更改默认区域,可以省略 --zone 国旗

要验证是否已成功添加服务, --list-services 国旗:

sudo firewall-cmd --zone=public --list-services
ssh dhcpv6-client http

如果要在重启后保持端口80打开,则需要再次输入相同的命令,但这一次 --permanent 国旗:

sudo firewall-cmd --permanent --zone=public --add-service=http

使用方法 --list-services 在一起 --permanent 标记以确认更改:

sudo firewall-cmd --permanent --zone=public --list-services
ssh dhcpv6-client http

删除服务的语法与添加服务相同。只需使用 --remove-service 代替 --add-service 国旗:

sudo firewall-cmd --zone=public --remove-service=http --permanent

上面的命令 http 来自公共区域的永久配置的服务。

创建一个新的FirewallD服务

如前所述,默认服务是 /usr/lib/firewalld/services 目录。创建新服务的最简单方法是创建现有服务文件 /etc/firewalld/services 目录。用户创建的服务的位置,并更改文件设置。

例如,您可以使用SSH服务文件为Plex Media Server创建服务定义。

sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/plexmediaserver.xml

打开新创建的 plexmediaserver.xml 创建文件并更改服务的简称和描述 标签需要更改的最重要的标签是 port 标签定义要打开的端口号和协议。

以下示例打开一个端口 1900 UDP和 32400 TCP。

/etc/firewalld/services/plexmediaserver.xml



plexmediaserver
Plex is a streaming media server that brings all your video, music and photo collections together and stream them to your devices at anytime and from anywhere.


保存文件并重新加载FirewallD服务。

sudo firewall-cmd --reload

现在您可以使用 plexmediaserver 区域中的服务与其他服务相同。

开放端口和源IP

Firewalld还可以快速启用来自受信任IP地址或特定端口的所有流量,而无需创建服务定义。

开源IP

允许来自特定IP地址(或范围)的所有传入流量 --zone 选项和源IP --add-source 可选的。

例如,要允许来自192.168.1.10的所有传入流量: public 区域,运行:

sudo firewall-cmd --zone=public --add-source=192.168.1.10

使新规则永久生效。

sudo firewall-cmd --runtime-to-permanent

使用以下命令确认更改:

sudo firewall-cmd --zone=public --list-sources
192.168.1.10

删除源IP的语法与添加源IP的语法相同。只需使用 --remove-source 代替 --add-source 选项:

sudo firewall-cmd --zone=public --remove-source=192.168.1.10

开源端口

要允许特定端口上的所有传入流量,请指定一个区域 --zone 选项,端口和协议 --add-port 可选的。

例如,打开一个端口 8080 在当前会话的公共区域中运行。

sudo firewall-cmd --zone=public --add-port=8080/tcp

该协议是以下之一: tcpudpsctpdccp

确认更改。

sudo firewall-cmd --zone=public --list-ports
8080

要在重新启动后使端口保持打开状态,请运行相同的命令并将规则添加到永久配置中 --permanent 标记或运行:

sudo firewall-cmd --runtime-to-permanent

删除端口的语法与添加端口的语法相同。只需使用 --remove-port 代替 --add-port 可选的。

sudo firewall-cmd --zone=public --remove-port=8080/tcp

转发端口

要将流量从一个端口转发到另一个端口,请先为您的区域启用伪装 --add-masquerade 可选的。例如,启用伪装 external 区域,类型:

sudo firewall-cmd --zone=external --add-masquerade

将流量从一个端口转发到另一个端口

以下示例从端口转发流量 80 移植 8080 在同一台服务器上:

sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080

将流量转发到另一个IP地址

以下示例从端口转发流量 80 移植 80 在具有IP的服务器上 10.10.10.2

sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toaddr=10.10.10.2

将流量转发到另一个端口上的另一个服务器

以下示例从端口转发流量 80 移植 8080 在具有IP的服务器上 10.10.10.2

sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=10.10.10.2

要保留转发规则,请使用:

sudo firewall-cmd --runtime-to-permanent

总结

您学习了如何在CentOS 8系统上配置和管理防火墙服务。

允许系统正常运行所需的所有传入连接,并限制所有不必要的连接。

如有任何疑问,请在下面发表评论。