正确配置的防火墙是整个系统安全性中最重要的方面之一。
FirewallD是一个完整的防火墙解决方案,用于管理系统的iptables规则,并提供用于对其进行操作的D-Bus接口。 从CentOS 7开始,FirewallD将替换iptables为默认的防火墙管理工具。
在本教程中,我们将向您展示如何在CentOS 7系统上使用FirewallD设置防火墙,并向您解释基本的FirewallD概念。
必要条件
在开始本教程之前,请确保使用具有sudo权限的用户帐户或root用户登录服务器。最佳做法是将管理命令作为sudo用户而不是root用户运行,如果您的CentOS系统上没有sudo用户,则可以按照这些说明创建一个。
Firewalld基本概念
FirewallD使用区域和服务的概念,而不是iptables链和规则。根据您要配置的区域和服务,您可以控制允许或禁止进出系统的流量。
可以使用firewall-cmd命令行实用程序配置和管理FirewallD。
Firewalld区域
区域是预定义的规则集,用于根据计算机连接到的网络上的信任级别指定应允许的流量。您可以将网络接口和源分配给区域。
Bellow是FirewallD提供的区域,根据区域的信任级别从不信任到可信:
drop:删除所有传入连接而不发出任何通知。仅允许传出连接。
block:所有传入连接都被拒绝,其中包含用于IPv4的icmp-host-prohibited消息和用于IPv6n的icmp6-adm-prohibited。仅允许传出连接。
公众:用于不受信任的公共场所。您不信任网络上的其他计算机,但您可以允许选定的传入连接。
external:用于在系统充当网关或路由器时启用NAT伪装的外部网络。仅允许选定的传入连接。
internal:用于在系统充当网关或路由器时在内部网络上使用。网络上的其他系统通常是可信的。仅允许选定的传入连接。
dmz:用于位于非军事区的计算机,该计算机对网络其余部分的访问权限有限。仅允许选定的传入连接。
工作:用于工作机器。网络上的其他计算机通常是可信的。仅允许选定的传入连接。
home:用于家用机器。网络上的其他计算机通常是可信的。仅允许选定的传入连接。
trusted:接受所有网络连接。信任网络中的所有计算机。
防火墙服务
Firewalld服务是在区域内应用的预定义规则,并定义必要的设置以允许特定服务的传入流量。
Firewalld运行时和永久设置
Firewalld使用两个独立的配置集,运行时和永久配置。
运行时配置是实际运行的配置,并且在重新启动时不会持久。 当Firewalld服务启动时,它会加载永久配置,从而成为运行时配置。
默认情况下,使用firewall-cmd实用程序更改Firewalld配置时,更改将应用于运行时配置,以使更改成为永久性,您需要使用--permanent标志。
安装并启用FirewallD
01、安装FirewallD
默认情况下,Firewalld安装在CentOS 7上,但如果系统上未安装,则可以通过键入以下命令安装软件包:
sudo yum install firewalld
02、检查防火墙状态。
默认情况下禁用Firewalld服务。 您可以使用以下命令检查防火墙状态
sudo firewall-cmd --state
如果您刚刚安装或从未激活过,则该命令将打印不运行,否则您将看到正在运行。
03、启用FirewallD
要启动FirewallD服务并在引导类型上启用它:
sudo systemctl start firewalld
sudo systemctl enable firewalld
如下图:
使用Firewalld区域
首次启用FirewallD服务后,公共区域将设置为默认区域。 您可以键入以下内容来查看默认区域:
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: ens33
上面的输出告诉我们,接口ens33分配给public区域。
您可以使用以下方式打印区域配置设置:
sudo firewall-cmd --zone=public --list-all
输出:
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: ssh dhcpv6-client
ports: 3389/tcp 21/tcp 60000-65535/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
以上命令截图如下:
从上面的输出中,我们可以看到公共区域处于活动状态并设置为默认值,由ens33接口使用。还允许与DHCP客户端和SSH相关的连接。
如果要检查所有可用区域的配置,请键入:
sudo firewall-cmd --list-all-zones
该命令将打印一个巨大的列表,将所有可用区域的设置。
如下图:
更改接口区域
您可以使用--zone标志结合--change-interface标志轻松更改接口区域。 以下命令将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
输出
home
开放端口或服务
使用FirewallD,您可以根据称为服务的预定义规则允许特定端口的流量。
要获取所有默认可用服务类型的列表:
sudo firewall-cmd --get-services
您可以通过在/usr/lib/firewalld/services目录中打开关联的.xml文件来查找有关每个服务的更多信息。 例如,HTTP服务定义如下:
/usr/lib/firewalld/services/http.xml