Centos 8 防火墙
基本防火墙概念
Firewalld使用区域和服务的概念,根据你要配置的区域和服务,你可以控制允许或禁止与系统进行的流量。
可以使用firewall-cmd命令行实用程序配置和管理Firewalld。
在CentOS 8操作系统中,iptables被nftables替代,作为firewalld守护程序的默认防火墙后端。
1、防火墙区域
区域是预定义的规则集,用于指定计算机连接到的网络的信任级别,你可以将网络接口和源分配给区域。
以下是FirewallD提供的区域,根据区域的信任级别从不信任到信任:
drop:删除所有传入连接,而无任何通知,仅允许传出连接。
block:所有传入连接均被拒绝,其中icmp-host禁止消息用于IPv4,icmp6-adm禁止用于IPv6n,仅允许传出连接。
public:用于不受信任的公共区域,你不信任网络上的其他计算机,但是可以允许选择的传入连接。
external:用于在系统充当网关或路由器时启用了NAT伪装的外部网络,仅允许选择的传入连接。
internal:当系统充当网关或路由器时,用于内部网络,网络上的其他系统通常是受信任的,仅允许选择的传入连接。
dmz:用于非军事区中访问网络其余部分的计算机,仅允许选择的传入连接。
work:用于工作机,网络上的其他计算机通常是受信任的,仅允许选择的传入连接。
home:用于家用机器,网络上的其他计算机通常是受信任的,仅允许选择的传入连接。
trusted:接受所有网络连接,信任网络中的所有计算机。
2、防火墙服务
防火墙服务是预定义的规则,适用于区域,并定义必要的设置以允许特定服务的传入流量,该服务使你可以轻松地在一个步骤中执行多个任务。
例如,服务可以包含有关打开端口,转发流量等的定义。
3、防火墙运行时和永久设置
Firewalld使用两个单独的配置集,即运行时配置和永久配置。
运行时配置是实际的运行配置,并且不会在重新启动后持续存在,当firewalld守护程序启动时,它将加载永久配置,该配置将成为运行时配置。
默认情况下,使用firewall-cmd实用程序对Firewalld配置进行更改时,更改将应用于运行时配置,要使更改永久生效,请在命令后附加--permanent选项。
要在两个配置集中应用更改,可以使用以下两种方法之一:
1]、更改运行时配置并将其永久化:
$ sudo firewall-cmd
$ sudo firewall-cmd --runtime-to-permanent
2]、更改永久配置并重新加载firewald守护程序:
$ sudo firewall-cmd --permanent
$ sudo firewall-cmd --reload
4.启用FirewallD
在CentOS 8操作系统上,默认情况下已安装并启用firewalld,如果由于某种原因未在系统上安装它,则可以通过键入以下命令来安装并启动守护程序:
$ sudo dnf install firewalld
$ sudo systemctl enable firewalld --now
可以使用以下方法检查防火墙服务的状态:
$ sudo firewall-cmd --state
如果启用了防火墙,该命令应显示正在运行,否则,你将看到未运行。
参考:CentOS 7下使用FirewallD构建动态防火墙。
5.防火墙区域
如果尚未更改,则默认区域设置为public,所有网络接口都分配给该区域。
默认区域是用于所有未明确分配给另一个区域的区域。
可以通过键入以下命令查看默认区域:
$ sudo firewall-cmd --get-default-zone
返回:
public
要获取所有可用区域的列表,请输入:
$ sudo firewall-cmd --get-zones
返回:
block dmz drop external home internal public trusted work(阻止dmz放下外部家庭内部公共信任的工作)
要查看活动区域和分配给它们的网络接口,请执行以下操作:
$ sudo firewall-cmd --get-active-zones
下面的输出显示接口eth0和eth1已分配给公共区域:
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,输出还显示该区域由eth0和eth1接口使用,并允许DHCP客户端和SSH通信。
如果要检查所有可用区域的配置,请输入:
$ sudo firewall-cmd --list-all-zones
该命令将显示包含所有可用区域设置的巨大列表。
1、更改区域目标
目标为未指定的传入流量定义区域的默认行为,可以将其设置为以下选项之一:默认,接受,拒绝和删除。
要设置区域的目标,请使用--zone选项指定区域,并使用--set-target选项指定目标。
例如,要将公共区域的目标更改为DROP,可以运行:
$ sudo firewall-cmd --zone=public --set-target=DROP
2、将接口分配给其他区域
你可以为不同区域创建特定的规则集,并为其分配不同的接口,当你在计算机上有多个接口时,这特别有用。
要将接口分配给其他区域,请使用--zone选项指定区域,并使用--change-interface选项指定接口。
例如,以下命令将eth1接口分配给工作区:
$ sudo firewall-cmd --zone=work --change-interface=eth1
通过键入以下命令来验证更改:
$ sudo firewall-cmd --get-active-zones
返回:
work
interfaces: eth1
public
interfaces: eth0
3、更改默认区域
要更改默认区域,请使用--set-default-zone选项,后跟要设为默认区域的名称。
例如,要将默认区域更改为home,可以运行以下命令:
$ sudo firewall-cmd --set-default-zone=home
使用以下命令验证更改:
$ sudo firewall-cmd --get-default-zone
返回:
home
防火墙服务
使用防火墙,可以基于称为服务的预定义规则允许特定端口或源的流量。
要获取所有默认可用服务的列表,请输入:
$ sudo firewall-cmd --get-services
通过打开/usr/lib/firewalld/services目录中的关联.xml文件,可以找到有关每个服务的更多信息,例如,HTTP服务的定义如下(/usr/lib/firewalld/services/http.xml文件):
<?xml version="1.0" encoding="utf-8"?>
要仅对当前会话(运行时配置)允许公共区域中的接口允许传入的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目录(该目录是用户创建的服务的位置)并修改文件设置。
例如,要为Plex Media Server创建服务定义,可以使用SSH服务文件:
$ sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/plexmediaserver.xml
打开新创建的plexmediaserver.xml文件,并在
在下面的示例中,我们打开端口1900 UDP和32400 TCP(/etc/firewalld/services/plexmediaserver.xml文件):
/etc/firewalld/services/plexmediaserver.xml
<?xml version="1.0" encoding="utf-8"?>
保存文件并重新加载FirewallD服务:
$ sudo firewall-cmd --reload
现在,可以像其他任何服务一样在你的区域中使用plexmediaserver服务。
打开端口和源IP
Firewalld还允许你快速启用来自受信任IP地址或特定端口上的所有流量,而无需创建服务定义。
1、打开源IP
要允许来自特定IP地址(或范围)的所有传入流量,请使用--zone选项指定区域,并使用--add-source选项指定源IP。
例如,要在公共区域中允许来自192.168.1.10的所有传入流量,请运行:
$ 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
2、打开源端口
要允许给定端口上的所有传入流量,请使用--zone选项指定区域,并使用--add-port选项指定端口和协议。
例如,要为当前会话打开公共区域中的8080端口,请运行:
$ sudo firewall-cmd --zone=public --add-port=8080/tcp
该协议可以是tcp、udp、sctp或dccp。
验证更改:
$ 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选项启用对所需区域的伪装,例如,要对外部区域启用伪装,请键入:
$ sudo firewall-cmd --zone=external --add-masquerade
1、将流量从一个端口转发到IP地址上的另一个端口
在以下示例中,我们将流量从80端口转发到同一服务器上的8080端口:
$ sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080
2、将流量转发到另一个IP地址
在以下示例中,我们将流量从80端口转发到IP 10.10.10.2的服务器上的80端口:
$ sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toaddr=10.10.10.2
3、将流量转发到其他端口上的另一台服务器
在下面的示例中,我们将流量从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
要使转发规则持久化,请使用:
$ sudo firewall-cmd --runtime-to-permanent
结论
通过上面的操作步骤,你已经了解了如何在CentOS 8系统上配置和管理防火墙服务。
确保允许系统正常运行所必需的所有传入连接,同时限制所有不必要的连接。