6.4 防火墙设置 —— Linux教程 命令指令 运维 服务器 项目上线 CentOS 从入门到精通
目录:
- 先决条件
- 基本防火墙概念
- 防火墙区域
- 防火墙服务
- 防火墙运行时和永久设置
- 安装和启用FirewallD
- 使用防火墙区域
- 更改接口区域
- 更改默认区域
- 打开端口或服务
- 创建一个新的FirewallD服务
- 带防火墙的转发端口
- 使用FirewallD创建规则集
- 结论
正确配置的防火墙是整个系统安全的最重要方面之一。
FirewallD是一个完整的防火墙解决方案,可以管理系统的iptables规则并提供D-Bus接口以对其进行操作。 从CentOS 7开始,FirewallD取代iptables作为默认的防火墙管理工具。
在本教程中,我们向您展示如何在CentOS 7系统上使用FirewallD设置防火墙,并向您说明基本的FirewallD概念。
先决条件
在开始本教程之前,请确保您使用具有sudo特权的用户帐户或root用户登录到服务器。 最佳实践是以sudo用户而不是root用户身份运行管理命令。 如果您的CentOS系统上没有sudo用户,则可以按照以下说明创建一个。
基本防火墙概念
FirewallD使用区域和服务的概念,而不是iptables链和规则。 根据您将要配置的区域和服务,您可以控制允许或禁止往返系统的流量。
可以使用
firewall-cmd
命令行实用工具配置和管理FirewallD。
防火墙区域
区域是预定义的规则集,用于基于计算机所连接的网络上的信任级别来指定应允许的流量。 您可以将网络接口和源分配给区域。
以下是FirewallD提供的区域,根据区域的信任级别从不信任到信任:
- drop : 删除所有传入连接,而无任何通知。 仅允许传出连接。 block :所有传入连接均被拒绝,其中
icmp-host-prohibited消息用于IPv4,icmp6-adm-prohibited用于IPv6n。 仅允许传出连接。 public :用于不受信任的公共区域。 您不信任网络上的其他计算机,但是可以允许选择的传入连接。 external :用于在系统充当网关或路由器时启用NAT伪装的外部网络。 仅允许选择的传入连接。 internal :当系统充当网关或路由器时,用于内部网络。 网络上的其他系统通常是受信任的。 仅允许选择的传入连接。 dmz :用于非军事区中访问网络其余部分的计算机。 仅允许选择的传入连接。 work :用于工作机。 网络上的其他计算机通常是受信任的。 仅允许选择的传入连接。 home :用于家用机器。 网络上的其他计算机通常是受信任的。 仅允许选择的传入连接。 Trusted :接受所有网络连接。 信任网络中的所有计算机。
防火墙服务
防火墙服务是预定义的规则,适用于区域,并定义必要的设置以允许特定服务的传入流量。
防火墙运行时和永久设置
Firewalld使用两个单独的配置集,即运行时配置和永久配置。
运行时配置是实际的运行配置,并且在重新启动时不是持久的。 当防火墙服务启动时,它将加载永久配置,该配置将成为运行时配置。
默认情况下,使用
firewall-cmd
实用程序对Firewalld配置进行更改时,更改将应用于运行时配置。 要使更改永久
--permanent
您需要使用
--permanent
选项。
安装和启用FirewallD
-
默认情况下,Firewalld已安装在CentOS 7上,但是如果您的系统上未安装Firewalld,则可以通过输入以下内容安装软件包:
sudo yum install firewalld默认情况下禁用防火墙服务。 您可以使用以下方法检查防火墙状态:
sudo firewall-cmd --state要启动FirewallD服务并在启动时启用它:
sudo systemctl start firewalldsudo systemctl enable firewalld
使用防火墙区域
首次启用FirewallD服务后,将
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
public interfaces: eth0 eth1
上面的输出告诉我们,接口
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:
从上面的输出中,我们可以看到
eth0
和
eth1
接口都使用了公共区域,并将其设置为默认区域。 另外,允许与DHCP客户端和SSH相关的连接。
sudo firewall-cmd --list-all-zones
该命令将显示包含所有可用区域设置的巨大列表。
更改接口区域
通过结合使用
--zone
选项和
--change-interface
选项,可以轻松更改Interface Zone。 以下命令将
eth1
接口分配给工作区:
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
打开端口或服务
使用FirewallD,您可以基于称为服务的预定义规则允许特定端口的通信。
要获取所有默认可用服务的列表,请输入:
sudo firewall-cmd --get-services

通过打开
/usr/lib/firewalld/services
目录中的关联.xml文件,可以找到有关每个服务的更多信息。 例如,HTTP服务的定义如下:
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.
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
sudo firewall-cmd --permanent --zone=public --add-service=http
使用
--list-services
和
--permanent
选项来验证您的更改:
sudo firewall-cmd --permanent --zone=public --list-services
ssh dhcpv6-client
删除服务的语法与添加服务时的语法相同。 只需使用
--remove-service
而不是
--add-service
选项即可:
sudo firewall-cmd --zone=public --remove-service=http --permanent
上面的命令从公共区域永久配置中删除http服务。
如果您正在运行没有适当服务的应用程序(例如Plex Media Server),该怎么办?
在这种情况下,您有两种选择。 您可以打开适当的端口,也可以定义新的FirewallD服务。
例如,Plex服务器侦听端口32400并使用TCP,使用
--add-port=
选项为当前会话在公共区域中打开该端口:
sudo firewall-cmd --zone=public --add-port=32400/tcp
协议可以是
tcp
或
udp
。
要验证是否已成功添加端口,请使用
--list-ports
选项:
sudo firewall-cmd --zone=public --list-ports
32400/tcp
要在重新引导后使端口
32400
保持打开状态,请使用
--permanent
选项运行同一命令,将规则添加到永久设置中。
删除端口的语法与添加端口时的语法相同。 只需使用
--remove-port
而不是
--add-port
选项即可。
sudo firewall-cmd --zone=public --remove-port=32400/tcp
创建一个新的FirewallD服务
正如我们已经提到的,默认服务存储在
/usr/lib/firewalld/services
目录中。 创建新服务的最简单方法是将现有服务文件复制到
/etc/firewalld/services
目录(该目录是用户创建的服务的位置)并修改文件设置。
例如,要为Plex Media Server创建服务定义,我们可以使用SSH服务文件:
sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/plexmediaserver.xml
打开新创建的
plexmediaserver.xml
文件,然后在其中更改服务的简称和描述。
port
标签,它定义了您要打开的端口号和协议。
在下面的示例中,我们打开端口
1900
UDP和
32400
TCP。
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.
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
服务。
带防火墙的转发端口
要将流量从一个端口转发到另一个端口或地址,请首先使用
--add-masquerade
开关启用对所需区域
--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
- 将流量转发到另一台服务器
在下面的示例中,我们将流量从端口
80
转发到IP
10.10.10.2
的服务器上的端口
80
:
sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toaddr=10.10.10.2
- 将流量转发到其他端口上的另一台服务器
在以下示例中,我们将流量从端口
80
转发到IP
10.10.10.2
的服务器上的端口
8080
:
sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=10.10.10.2
使用FirewallD创建规则集
在以下示例中,我们将显示如果您正在运行Web服务器,则如何配置防火墙。 我们假设您的服务器只有一个接口
eth0
,并且您只想允许SSH,HTTP和HTTPS端口上的传入流量。
-
将默认区域更改为dmz
我们将使用dmz(非军事化)区域,因为默认情况下它仅允许SSH通信。 要将默认区域更改为dmz并将其分配给
eth0接口,请运行以下命令:sudo firewall-cmd --set-default-zone=dmzsudo firewall-cmd --zone=dmz --add-interface=eth0打开HTTP和HTTPS端口:
要打开HTTP和HTTPS端口,请将永久服务规则添加到dmz区域:
sudo firewall-cmd --permanent --zone=dmz --add-service=httpsudo firewall-cmd --permanent --zone=dmz --add-service=https通过重新加载防火墙,使更改立即生效:
sudo firewall-cmd --reload验证更改
要检查dmz区域配置设置,请输入:
sudo firewall-cmd --zone=dmz --list-alldmz (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: ssh http https ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:上面的输出告诉我们dmz是默认区域,应用于
eth0接口,并且ssh(22)http(80)和https(443)端口已打开。
结论
您已经了解了如何在CentOS系统上配置和管理FirewallD服务。
确保限制系统正常运行所必需的所有传入连接,同时限制所有不必要的连接。
防火墙iptables centos安全性如何在centos 7上添加和删除用户
知道如何添加和删除用户是Linux用户应该知道的基本技能之一。 在本教程中,我们将说明如何在CentOS 7系统上添加和删除用户。
如何在centos 7上添加交换空间
交换是物理RAM内存已满时使用的磁盘空间。 本教程说明了如何在CentOS 7系统上添加交换文件。
如何在centos 8上添加交换空间
交换是物理RAM内存已满时使用的磁盘空间。 本文介绍了在CentOS 8系统上添加交换文件的步骤。







