防火墙是一种监测和过滤传入和传出网络流量的方法。它通过定义一套安全规则来确定是否允许或阻止特定的流量。一个正确配置的防火墙是整个系统安全的最重要方面之一。
CentOS 8提供了一个名为firewalld的防火墙守护程序。它是一个完整的解决方案,有一个D-Bus接口,允许你动态地管理系统的防火墙。
在本教程中,我们将讨论如何配置和管理CentOS 8的防火墙。我们还将解释FirewallD的基本概念。
$ sudo firewall-cmd <options>
$ sudo firewall-cmd --runtime-to-permanent
$sudo firewall-cmd --permanent <options>
$ sudo firewall-cmd --reload
$ sudo dnf install firewalld
$ sudo systemctl enable firewalld --now
你可以用以下方法检查防火墙服务的状态。
$ sudo firewall-cmd --state
如果防火墙被启用,该命令应该打印正在运行。否则,你将看到未运行。
$ 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
下面的输出显示,接口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
该命令会打印出一个包含所有可用区域设置的巨大列表。
$ sudo firewall-cmd --zone=public --set-target=DROP
$ sudo firewall-cmd --zone=work --change-interface=eth1
通过键入来验证这些变化。
$ sudo firewall-cmd --get-active-zones
work
interfaces: eth1
public
interfaces: eth0
$ sudo firewall-cmd --set-default-zone=home
用以下方法验证这些变化。
$ sudo firewall-cmd --get-default-zone
home
$ sudo firewall-cmd --new-zone=memcached --permanent
向该区域添加规则。
$ sudo firewall-cmd --zone=memcached --add-port=11211/udp --permanent
$ sudo firewall-cmd --zone=memcached --add-port=11211/tcp --permanent
$ sudo firewall-cmd --zone=memcached --add-source=192.168.100.30/32 --permanent
重新加载firewalld守护进程以激活这些变化。
$ sudo firewall-cmd --reload
$ sudo firewall-cmd --get-services
你可以通过打开/usr/lib/firewalld/services目录下的相关.xml文件,找到关于每个服务的更多信息。例如,HTTP服务是这样定义的。
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>WWW (HTTP)</short>
<description>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.</description>
<port protocol="tcp" port="80"/>
</service>
要允许公共区的接口有传入的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 --runtime-to-permanent
使用-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服务。
$ sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/plexmediaserver.xml
打开新创建的plexmediaserver.xml文件,在
在下面的例子中,我们要开放1900 UDP端口和32400 TCP端口。
<?xml version="1.0" encoding="utf-8"?>
<service version="1.0">
<short>plexmediaserver</short>
<description>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.</description>
<port protocol="udp" port="1900"/>
<port protocol="tcp" port="32400"/>
</service>
$ sudo firewall-cmd --reload
$ 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
$ sudo firewall-cmd --zone=public --remove-source=192.168.1.10
$ 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
$ sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080
$ sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toaddr=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
下一条: 如何在Linux上挂载ISO文件