在上一篇文章中,我们探讨了如何在Fedora中使用命令行控制防火墙。现在您将了解如何“添加”、“删除”和“列出”服务、协议和端口,以便“阻止”或“允许”它们。简短回顾首先,检查防火墙的状态以查看它是否正在运行是个好主意。正如我们之前了解到的,您可以使用状态选项(firewall-cmd-state)来获取它。下一步是获取网络接口适用的域区域。例如,我使用的桌面有两个网络接口:物理接口(enp0s3),代表我实际的网卡,以及虚拟接口(virbr0),用于KVM等虚拟化软件。要查看哪些区域处于活动状态,请运行firewall-cmd-get-active-zones。现在您知道了您感兴趣的域,您可以使用类似firewall-cmd‐info-zone=FedoraWorkstation的命令来列出该域的规则。读取区域信息要显示特定域的信息,请运行firewall-cmd‐‐zone=ZoneName‐‐list-all,或使用以下命令显示默认域的信息:[dan@localhost~]$firewall-cmd--list-allFedoraWorkstation(active)target:defaulticmp-block-inversion:nointerfaces:enp0s3sources:services:dhcpv6-clientmdnssamba-clientsshports:1025-65535/udp1025-65535/tcpprotocols:masquerade:noforward-ports:source-ports:ic-blocks:richrules:现在,让我们看看输出。第一行指示以下信息与哪个域相关联以及该域当前是否正在使用中。target:default:告诉我们这是默认域。可以通过-set-default-zone=ZoneName和-get-default-zone设置或获取。icmp-block-inversion指示是否阻止ICMP请求。例如,如果一台机器响应来自网络上其他机器的ping请求。interfaces字段显示接受该域的所有接口。处理服务、端口和协议现在,关注服务、端口和协议行。默认情况下,防火墙将阻止所有端口、服务和协议,只允许列出的端口、服务和协议。在这里,您可以看到允许的服务是非常基本的客户端服务。例如,访问网络上的共享文件夹(samba-client)、与DNS服务器通信或通过SSH连接到计算机(ssh-service)。您可以将服务视为结合了端口的协议,例如ssh服务使用SSH协议并且按照惯例使用端口22。通过允许ssh服务,您实际上是在允许传入连接使用SSH协议在默认端口22上。请注意,根据经验,名称中带有client一词的服务是传出连接,即连接到您使用IP作为源的外部世界,而不是ssh服务,例如,它将接受传入连接(侦听来自外部的连接)。您可以在文件/etc/services中找到服务。例如,如果您想知道这些服务使用的端口和协议:[dan@localhost~]$cat/etc/services|grepsshssh22/tcp#TheSecureShell(SSH)Protocolssh22/udp#TheSecureShell(SSH)Protocol您可以看到SSH同时使用TCP和UDP端口22。此外,如果您想查看所有可用服务,只需使用firewall-cmd--get-services。打开端口如果您想阻止端口、服务或协议,请确保它们未在此处列出。扩展一下,如果要允许某个服务,则需要将其添加到列表中。假设您要为TCP连接打开端口5000。为此,请运行:sudofirewall-cmd--zone=FedorwaWorkstation--permanent--add-port=5000/tcp请注意,您需要指定规则适用的域。添加规则时,还需要像上面一样指定是tcp还是udp端口。--permanent参数将规则设置为即使在系统重新启动后仍然存在。再次检查您所在地区的信息:[dan@localhost~]$firewall-cmd--list-allFedoraWorkstation(active)target:defaulticmp-block-inversion:nointerfaces:enp0s3sources:services:dhcpv6-clientmdnssamba-clientsshports:1025-65535/udp1025-65535/tcp5000/tcpprotocols:masquerade:noforward-ports:source-ports:icmp-blocks:richrules:同样,如果你想从列表中删除这个端口,运行:sudofirewall-cmd--zone=FedorwaWorkstation--permanent--remove-port=5000/tcp相同的删除(--remove-protocol,--remove-service)和添加(--add-protocol,--add-service)选项也适用关于服务和协议。
