我是CentOSEnterpriseLinux8系统管理员。如何在CentOS8上使用FirwallD设置防火墙?简介Linux防火墙可用于保护您的工作站或服务器免受不需要的流量的侵害。您可以设置规则来阻止或允许流量。CentOS8带有一个动态的、可定制的基于主机的防火墙和一个D-Bus接口。您可以添加、删除或更新防火墙规则,而无需重新启动防火墙守护程序或服务。firewall-cmd充当nftables的前端。在CentOS8中,nftables已经取代iptables成为默认的Linux网络包过滤框架。本页展示了如何为您的CentOS8设置防火墙并借助firewall-cmd工具对其进行管理。FirewallD的基本概念firewalld简化了网络流量管理的概念。谈到CentOS8上的firewalld,我们主要有以下两个概念。1.区域Firewalld区域(Zone)只不过是一组预定义的规则。你可以通过运行ls命令查看所有区域:$ls-l/usr/lib/firewalld/zones/使用cat命令查看公共区域:$cat/usr/lib/firewalld/zones/public.xml了解预定义区域块:拒绝所有传入的网络连接。网络连接只能从系统内部启动。dmz:一个经典的非军事区(DMZ)区域,它提供对LAN的有限访问并且只允许指定的传入端口。drop:丢弃所有传入网络连接,只允许传出网络连接。外部:对于路由器类型的连接很有用。您还需要LAN和WAN接口来伪装NAT才能工作。home:适用于您信任其他计算机(例如笔记本电脑和台式机)的LAN上的家用计算机。仅允许指定的TCP/IP端口。internal:对于内部网络,当您非常信任LAN上的其他服务器或计算机时。public:您不信任网络上的任何其他计算机和服务器。您只允许您需要的端口和服务。对于云服务器或在您所在位置托管的服务器,请始终使用公共区域。trusted:接受所有网络连接。我不建议将此区域用于连接到WAN的专用服务器或虚拟机。工作:工作场所为您信任的同事和其他服务器。运行以下命令以查看CentOS8上的所有区域:$firewall-cmd--get-zones如何找出您的默认区域您可以将网络接口和源分配给区域。这些区域之一可以设置为默认区域。以下命令将使您的默认区域运行:$firewall-cmd--get-default-zone要查看您的网络接口名称,请运行ip命令或nmcli命令:$iplinkshow$nmclidevicestatus当添加新的接口连接时(例如eth0或ens3)到NetworkManager,它们将附加到默认区域。通过运行验证:$firewall-cmd--get-active-zonesservice该服务只不过是本地端口、协议、源端口、目标端口和防火墙帮助程序模块的列表。一些示例:端口:443、25或110服务:SSH、HTTP协议:ICMP如何查看与公共(公共)区域相关的防火墙规则或服务运行$sudofirewall-cmd--list-all或$sudofirewall-cmd--list-all--zone=public上面的命令显示我的默认区域是公共的,我允许传入的SSH连接(端口22)、dhcpv6-client和CentOS8/RHEL8cockpit服务端口。默认情况下丢弃所有其他流量。如果我在CentOS8上配置Apache或Nginx,我需要使用firewall-cmd打开80/443端口。假设您不想要cockpit或dhcpv6-client等不必要的服务,您可以通过修改规则来删除它们。例如,删除服务dhcpv6-client和cockpit:$sudofirewall-cmd--list-services如何查看当前区域允许的服务$sudofirewall-cmd--list-services或者$sudofirewall-cmd--list-services--zone=public$sudofirewall-cmd--list-services--zone=home或像这样使用bashfor循环:##orjustuse'sudofirewall-cmd--list-all-zones'##forzin$(firewall-cmd--get-zones)doecho"Servicesallowedin$zzone:$(sudofirewall-cmd--list-services--zone=$z)"done如何在CentOS8上启动、停止、重新启动firewalld服务到目前为止,您已经了解了firewalld区域、服务以及如何查看默认值。是时候在我们的CentOS8Linux机器上激活和配置我们的防火墙了。启动并启用firewalld$sudosystemctl启动firewalld$sudosystemctlenablefirewalld停止并禁用firewalld$sudosystemctl停止firewalld$sudosystemctldisablefirewalld检查firewalld状态$sudofirewall-cmd--statereloadfirewalld更改规则时配置命令$sudofirewall-cmd--reload获取状态firewalldservice$sudosystemctlstatusfirewalld了解运行时和永久防火墙规则集对firewalld配置的运行时更改是临时的。当您重新启动CetnOS8服务器时,这些配置将消失。例如,以下命令将为Nginx/ApacheWeb服务器临时打开80/443(https)TCP端口:$sudofirewall-cmd--zone=public--add-service=http$sudofirewall-cmd--zone=public--add-service=https当您重新启动Linux机器或重新启动防火墙服务本身时,上述规则将不会保留。如何向永久规则集添加规则并重新加载firewalld让我们永久添加规则(HTTPS/443和HTTP/80)并重新加载firewalld:$sudofirewall-cmd--zone=public--add-service=http--permanent$sudofirewall-cmd--zone=public--add-service=https--permanent$sudofirewall-cmd--reloadverify$sudofirewall-cmd--list-services$sudofirewall-cmd--list-services--permanentFirewalldruntimewithapermanentrulesetexample如何使用以下语法在您的系统上查找firewalld支持的服务列表:$sudofirewall-cmd--get-services$sudofirewall-cmd--get-servicesgrepmysql$ls-l/usr/lib/firewalld/services/$cat/usr/lib/firewalld/services/ssh.xml获取可以使用firewalld从规则集中添加或删除的服务列表示例Firewalld规则集让我们看一下默认区域一些常见的firewalld示例。如何向您的区域添加服务添加dns服务(TCP/UDP端口53):sudofirewall-cmd--zone=public--add-service=dns--permanent如何从您的区域删除(删除)服务deletevnc服务器服务(TCP端口范围5900-5903):sudofirewall-cmd--zone=public--remove-service=vnc-server--permanent如何允许/打开TCP/UDP端口/协议打开TCP端口#9009:sudofirewall-cmd--zone=public--add-port=9009/tcp--permanent要查看添加的端口,请运行:$sudofirewall-cmd--zone=internal--list-ports如何拒绝/阻止TCP/UDP端口/协议OpenTCP端口#23:sudofirewall-cmd--zone=public--remove-port=23/tcp--permanent如何编写端口转发firewalld规则以在同一台服务器上将TCP端口443转发到8080:$sudofirewall-cmd--zone=public--add-forward-port=port=80:proto=tcp:toport=8080--permanent要删除上述端口转发,请运行$sudofirewall-cmd--zone=public--remove-forward-port=port=80:proto=tcp:toport=8080如果需要将流量(443端口)转发到本机的443端口lxd服务器/容器托管在192.168.2.42,启用伪装:$sudofirewall-cmd--zone=public--add-masquerade$sudofirewall-cmd--zone=public--add-forward-port=port=443:proto=tcp:toport=443:toaddr=192.168.2.42--永久删除以上伪装规则请运行$sudofirewall-cmd--zone=public--remove-masquerade$firewall-cmd--zone=public--remove-forward-port=port=443:proto=tcp:toport=443:toaddr=192.168.2.42--permanent使用以下命令照常列出规则:$firewall-cmd--zone=public--list-all--permanentRich规则示例假设你只想允许从10.8.0.8IP地址访问SSH端口22,运行:sudofirewall-cmd--permanent--zone=public--add-rich-rule'rulefamily="ipv4"sourceaddress="10.8.0.8"portport=22protocol=tcpaccept'要验证新规则,请运行:$sudofirewall-cmd--list-rich-rules--permanentin下面的例子中,允许192.168.1.0/24子网访问tcp端口11211:sudofirewall-cmd--permanent--zone=public--add-rich-rule='rulefamily="ipv4"sourceaddress="192.168.1.0/24"portprotocol="tcp"port="11211"accept'再次验证:$sudofirewall-cmd--list-rich-rules--permanent输出示例:rulefamily="ipv4"sourceaddress="10.8.0.8"portport="22"协议="tcp"acceptrulefamily="ipv4"sourceaddress="192.168.1.0/24"portport="11211"protocol="tcp"accept您可以删除富规则,如下所示:$sudofirewall-cmd--remove-rich-rule'rulefamily="ipv4"sourceaddress="10.8.0.8"portport=22protocol=tcpaccept'--permanent$须藤firewall-cmd--remove-rich-rule'rulefamily="ipv4"sourceaddress="192.168.1.0/24"portport="11211"protocol="tcp"accept'--permanent结论你已经理解了基本概念和一些常见的CentOS8服务器示例有关更多信息,请参阅官方(https://firewalld.org/documentation/)firewalld文档。
