云网牛站
所在位置:首页 > Linux安全 > Linux中配置Firewalld:添加、删除、启用和禁用防火墙规则和区域

Linux中配置Firewalld:添加、删除、启用和禁用防火墙规则和区域

2021-05-05 10:21:44作者:张天启稿源:云网牛站

本文介绍在Linux操作系统中使用和配置Firewalld规则的方法,将向您展示如何添加、删除、启用和禁用防火墙规则和区域。这些方法适用于CentOS 7/8、RHEL 7/8、Fedora、SUSE/openSUSE 15系统上。当前防火墙对于控制进出Linux服务器的网络流量至关重要,它使用户可以通过定义一组防火墙规则来控制主机上的传入网络流量。必须在面向Internet的生产服务器上启用它,以保护这些服务器免遭未经授权的访问,这是确保网络级别系统安全的关键。

Linux中配置Firewalld:添加、删除、启用和禁用防火墙规则和区域

 

FirewallD介绍

“firewalld”是防火墙守护程序。它提供了一个动态管理的防火墙,该防火墙带有Linux内核提供的称为Netfilter的极其强大的过滤系统。

它提供了用于数据包筛选、网络地址转换和端口转换的各种功能,并提供了控制网络数据包的功能,如传入、传出或转发。

FirewallD使用区域和服务的概念,而iptables使用链和规则。与iptables相比,FirewallD提供了一种非常灵活的方式来处理防火墙管理。参考使用iptables保护Linux桌面系统安全

可以按照您指定的要求将每个区域配置为接受或拒绝某些服务或端口,并且可以将其与一个或多个网络接口关联。

默认区域将设置为公共区域,并附加了相关的网络接口。

Firewalld具有两层设计:

Core layer:核心层负责处理配置和iptables、ip6tables、ebtables和ipset等后端。

D-Bus layer:带有防火墙的D-Bus接口是更改和创建防火墙配置的主要方法。

 

防火墙区域

通常,firewalld带有一组预配置的区域。以下是FirewallD提供的区域,运行以下命令以列出区域:

$ firewall-cmd --get-zones

block dmz drop external home internal public trusted work

以下是注解:

block:任何传入连接都会被ipmp-host禁止的IPv4消息和icmp6-adm禁止的IPv6拒绝。仅允许在此系统内启动的网络连接。

dmz:用于位于非军事区的计算机,这些计算机可公开访问且对内部网络的访问受限。仅接受选定的传入连接。

drop:丢弃所有传入的连接,而无需任何通知。仅允许传出连接。

external:用于在系统充当路由器时启用NAT伪装的外部网络。仅允许选择的传入连接。

home:用于家庭网络,并且同一网络上的其他计算机通常是受信任的。仅接受选定的传入连接。

internal:用于内部网络,并且通常信任网络上的其他系统。仅接受选定的传入连接。

public:用于公共区域,但是您不应该信任网络上的其他计算机。仅接受选定的传入连接。

trusted:接受所有网络连接。

work:在工作区域中使用,大多数情况下都信任同一网络上的其他计算机。仅接受选定的传入连接。

 

防火墙服务

防火墙服务配置是预定义的服务,如果安装/启用了服务,则会自动加载这些服务。它包含防火墙服务条目的信息,例如端口、模块和目标地址。

要列出可用的服务模块,请运行以下命令:

$ firewall-cmd --get-services

RH-Satellite-6 amanda-client amanda-k5-client amqp amqps apcupsd bacula bacula-client bgp..

 

防火墙运行时和永久设置

Firewalld使用两种独立的配置,即运行时和永久配置:

Runtime Configuration:运行时配置在系统重新启动时将不会永久保存,并且firewalld服务停止。这意味着运行时配置不会自动保存到永久配置。

Permanent Configuration:永久配置存储在配置文件中,并且将在每次重新引导或服务重新加载/重新启动时被加载并成为新的运行时配置。请注意,要使更改永久生效,您需要对firewall-cmd使用–permanent选项。

 

在Linux中安装和启用FirewallD

默认情况下,Firewalld已安装在CentOS 7/8、RHEL 7/8、Fedora、SUSE/openSUSE 15上,但是如果系统中未安装Firewalld,则可以按以下方式安装:

$ sudo yum install firewalld [CentOS 7/RHEL 7]

$ sudo dnf install firewalld [CentOS 8/RHEL 8/Fedora]

$ sudo zypper install firewalld [openSUSE Leap]

安装完成后,您需要使用以下命令启动并启用firewalld:

$ sudo systemctl start firewalld

$ sudo systemctl enable firewalld

要检查firewalld的状态,请运行以下命令:

$ sudo firewall-cmd --state

 

使用和配置Firewalld

注:内容有:区域管理、打开和关闭端口、在Firewalld中添加和删除服务、使用Firewalld进行端口转发、带防火墙的丰富规则、防火墙的直接规则。

1、区域管理

Firewalld为每个区域提供不同级别的安全性,并将公共区域设置为默认区域。

要查看默认区域,请运行以下命令:

$ sudo firewall-cmd --get-default-zone

public

要查看默认区域的区域配置,请运行以下命令,您无需提及区域名称,因为它是默认区域。以下输出显示公共区域处于活动状态并设置为默认区域,该区域与wlan0 & eth0接口相关联。当前允许ssh和dhcp客户端服务进行通信。

注意:默认情况下,所有活动接口都将分配给默认区域。

$ firewall-cmd --list-all

public (active)

  target: default

  icmp-block-inversion: no

  interfaces: eth0 wlan0

  sources:

  services: ssh dhcpv6-client

  ports:

  protocols:

  masquerade: no

  forward-ports:

  source-ports:

  icmp-blocks:

  rich rules:

通过使用选项“–zone”和“–change-interface”的组合,可以轻松更改区域界面。例如,要将“eth0”界面分配给“home”区域,请运行以下命令:

$ sudo firewall-cmd --zone=home --change-interface=eth0

要查看所有活动区域,请运行以下命令,它显示活动区域和关联的接口:

$ sudo firewall-cmd --get-active-zones

home

interfaces: eth0

public

interfaces: wlan0

要更改默认区域,请使用以下格式。例如,要将默认区域更改为home,请运行以下命令:

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

要打印特定的区域配置,请运行以下命令,此输出显示允许的规则、端口和服务的列表:

$ firewall-cmd --zone=home --list-all

home (active)

  target: default

  icmp-block-inversion: no

  interfaces: eth0

  sources:

  services: ssh mdns samba-client dhcpv6-client

  ports:

  protocols:

  masquerade: no

  forward-ports:

  source-ports:

  icmp-blocks:

  rich rules:

要获取所有可用区域的列表,请运行以下命令:

$ sudo firewall-cmd --get-zones

要找出与eth0接口关联的区域,请运行以下命令:

$ firewall-cmd --get-zone-of-interface=eth0

home

要创建新区域,请使用以下命令。例如,要创建一个名为“ywnz”的新区域,请运行:

$ sudo firewall-cmd --permanent --new-zone=ywnz

success

要将运行时设置迁移到永久设置,请运行:

$ sudo firewall-cmd --runtime-to-permanent

2、打开和关闭端口

端口是使操作系统能够接收和发送网络流量以及将其转发到与其关联的特定系统服务的逻辑设备。打开特定端口可使用户从外部访问系统,这存在安全风险。因此,仅在必要时才打开某些服务所需的端口。

要获取当前区域中允许的端口的列表,请运行以下命令:

$ sudo firewall-cmd --list-ports

将端口添加到允许的端口中以打开它以接收传入流量:

$ sudo firewall-cmd --add-port=port_number/port_type

例如,以下命令将打开当前区域的端口80:

$ sudo firewall-cmd --permanent --add-port=80/tcp

success

同样,要从允许的端口中删除特定端口,请运行以下命令:

$ sudo firewall-cmd --remove-port=80/tcp

您可以每次使用以下命令确认是否已添加或删除端口:

$ sudo firewall-cmd --list-ports

如果要打开特定区域的端口,请运行以下命令。例如,以下命令将打开本地区域的端口80:

$ sudo firewall-cmd --permanent --zone=home --add-port=80/tcp

同样,要从允许的端口中删除特定区域的特定端口,请运行:

$ sudo firewall-cmd --zone=home --remove-port=80/tcp

您可以使用以下命令来确认是否已为特定区域每次添加或删除端口:

$ sudo firewall-cmd --zone=home --list-ports

3、在Firewalld中添加和删除服务

防火墙服务配置是预定义的服务,如果启用了服务,则会自动加载这些服务。预定义服务的使用使用户更容易启用和禁用对服务的访问。它包含防火墙服务条目的信息,例如端口、模块和目标地址。

预定义的服务位于“/usr/lib/firewalld/services”目录中。

服务配置采用与端口管理相同的模型,但是您无需记住任何端口,可以一次完成所有配置。

例如,执行以下命令以允许samba服务进入“home”区域。samba服务需要启用以下端口集:“139 and 445 TCP”以及“137 and 138 UDP”。

当您添加“samba”服务时,所有端口都将同时被激活,因为所有端口信息都在samba服务配置中,通过端口管理选项允许使用samba服务时,将手动激活所有samba端口:

$ sudo firwall-cmd --permanent --zone=home --add-service=samba

succes

要删除samba服务,请运行以下命令:

$ sudo firewall-cmd --permanent --zone=home --remove-service=ftp

您可以每次使用以下命令确认是否已添加或删除该服务:

$ sudo firewall-cmd --zone=home --list-services

要获取有关samba服务的更多信息,请运行以下命令:

$ firewall-cmd --zone=home --info-service=samba

要一次添加多个服务,请执行以下命令。例如,要添加http和https服务,请运行以下命令:

$ sudo firwall-cmd --permanent --zone=home --add-service={http,https}

4、使用Firewalld进行端口转发

端口转发是一种将所有传入网络流量从一个端口转发到另一个内部端口或另一台计算机上的外部端口的方法。

在将流量从一个端口重定向到另一个端口或另一个地址之前,您应该了解以下三件事:

1]、数据包到达哪个端口。

2]、使用什么协议。

3]、您想重定向他们的地方。

注意:端口转发需要伪装。使用下面显示的命令启用所需区域的伪装。伪装充当路由器(NAT – network address translation),可用于将小型LAN与Internet连接。

要启用IP伪装,请输入以下命令:

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

要检查是否为外部区域启用了IP伪装,请运行以下命令:

$ sudo firewall-cmd --zone=external --query-masquerade

要将端口重定向到同一系统上的另一个端口,请运行以下命令,示例方案:将端口80的所有数据包重定向到端口8080:

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

要将流量转发到另一台服务器,请运行以下命令,示例方案:将端口80的所有数据包重定向到IP 10.0.0.75的服务器上的端口8080:

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

例如,要允许来自特定源(子网)的流量仅允许来自特定子网的服务器连接,请运行以下命令:

$ sudo firewall-cmd --permanent --zone=home --add-source=192.168.1.0/24

5、带防火墙的丰富规则

丰富的语言可让您以一种易于理解的方式创建更复杂的防火墙规则,但难以记住这些丰富的规则,因此请导航至“man firewalld.richlanguage”并查找示例。

Rich Rule的通用规则结构:

rule

  [source]

  [destination]

  service|port|protocol|icmp-block|icmp-type|masquerade|forward-port|source-port

  [log]

  [audit]

  [accept|reject|drop|mark]

要允许来自地址192.168.0.0/24的IPv4连接,请运行以下命令:

$ sudo firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" accept'

要允许来自地址192.168.0.0/24的ssh服务的IPv4连接,请运行以下命令:

$ sudo firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="ssh" log prefix="ssh" level="info" accept'

同样使用端口选项:

$ sudo firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" port port=22 protocol=tcp accept'

要拒绝来自主机192.0.2.0的ssh服务的IPv4流量,请运行:

$ sudo firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" port port=22 protocol=tcp reject'

注意:要删除任何丰富的规则,请使用“–remove-rich-rule”选项,而不是“–add-rich-rule”。

要在公共区域中列出丰富规则,请运行:

$ sudo firewall-cmd --zone=public --list-rich-rules

6、防火墙的直接规则

直接规则类似于iptables命令,这对熟悉iptables命令的用户很有用。或者,您可以在“/etc/firewalld/direct.xml”文件中编辑规则,然后重新加载防火墙以使这些规则处于活动状态。直接规则主要由服务或应用程序用来添加特定的防火墙规则。

以下直接规则将打开服务器上的端口8080:

$ sudo firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -p tcp --dport 8080 -j ACCEPT

$ sudo firewall-cmd --reload

要在当前区域中列出直接规则,请运行:

$ sudo firewall-cmd --direct --get-all-rules

 

结论

在本文中,您了解了firewalld的完整用法,例如区域、允许/拒绝服务和端口、端口转发、丰富规则、直接规则等。并且应用起来并不复杂,按照以上方法就可以自行操作了。

 

相关主题

在CentOS 7系统上配置Cpanel Firewalld的方法

精选文章
热门文章