29
2023
11
15:34:54

firewalld

获取所有可用区域:


firewall-cmd --get-zones

block–拒绝所有传入的网络连接。仅从系统内部启动的网络连接是可能的。

dmz –经典非军事区(DMZ)区域,它提供对LAN的有限访问,并且仅允许选定的传入端口。

drop –丢弃所有传入网络连接,并且仅允许传出网络连接。

external-对于路由器连接类型很有用。您还需要LAN和WAN接口,以使伪装(NAT)正常工作。

home –适用于您信任其他计算机的局域网内的家用计算机,例如笔记本电脑和台式机。仅允许选择的TCP / IP端口。

internal–当您主要信任LAN上的其他服务器或计算机时,用于内部网络。

public–您不信任网络上的任何其他计算机和服务器。您仅允许所需的端口和服务。对于云服务器或您所托管的服务器,请始终使用公共区域。(默认区域)

trust–接受所有网络连接。我不建议将该区域用于连接到WAN的专用服务器或VM。

work–在信任同事和其他服务器的工作场所中使用。

查找您的默认区域:


firewall-cmd --get-default-zone

查看您当前的活动区域:


firewall-cmd --get-active-zones

当区域由于其源网络或接口而处理数据包时,但是没有明确处理该数据包的规则,则区域的目标确定行为:


区域的target

如果你对iptable熟悉的话,那么下面关于target的概念就不用多解析,target是就是对该区域内流经的数据包作最终的处理动作,target为未指定的传入流量定义区域的default行为。它可以设置为以下选项之一:


default:不做任何事情

ACCEPT:接受数据包

REJECT 拒绝数据包,返回拒绝的信息

DROP:丢弃数据包,并且不做任何答应

要设置区域的target,请使用--zone选项指定区域,并使用--set-target选项指定目标。例如,要将公共区域的目标更改为DROP,您可以运行:


firewall-cmd --zone=public --set-target=DROP

将接口分配给不同的区域

您可以为不同的区域创建特定的规则集,并为其分配不同的接口。当您的计算机上有多个接口时,这尤其有用。


要将接口分配给不同的分区,请使用--zone选项指定分区,并使用--change-interface选项指定接口。例如,以下命令将ens32接口分配给internal区域:


firewall-cmd --permanent --zone=internal --change-interface=ens32

创建新的区域

firewalld还允许您创建自己的区域。当您想要创建每个应用程序的规则时,这很方便。在以下示例中,我们将创建一个名为visitors的新分区,打开端口11211,并仅允许从IP地址192.168.100.30进行访问:


firewall-cmd --permanent --new-zone=vistors

firewall-cmd --permanent --zone=visitors --add-port=1111/tcp

firewall-cmd --reload

服务(services)

服务只不过是本地端口、协议、源端口、目的地和防火墙助手模块的列表。举个例子,服务器就是包含一组tcp/ip协议细节的集合:


端口: 443,21或22

服务: ssh,http或https

协议: tcp/udp/icmp

我们可以查看一下防火墙所支持的服务类型


firewall-cmd --get-services

列出当前运行的服务:


firewall-cmd --list-services

不需要的服务可以删除:


firewall-cmd --permanent --remove-service=dhcpv6

打开端口和源IP

Firewalld还允许您快速启用来自可信IP地址或特定端口的所有流量,而无需创建服务定义


开放源IP


要允许来自特定IP地址(或范围)的所有传入流量,请使用--zone选项指定区域,并使用--add-source选项指定源IP。例如,要允许公共区域中来自192.168.172.32的所有传入流量,请运行:


firewall-cmd --permanent --zone=zonename --add-source=10.0.0.2

实验室:开启NAT功能

firewall-cmd --zone=zonename --add-masquerade

二、rich rule规则详解:

防止外部区域的10.0.0.5 SSH 我们的服务器:


firewall-cmd --permanent --zone=external --add-rich-rule="rule \

family=ipv4 source address=10.0.0.5 \

service name=ssh reject"

family:我们指定该规则仅应用于IPv4数据包:如果未提供此关键字,则该规则将同时应用于IPv4和IPv6。

source address:我们提供数据包必须具有的源地址,才能使用源地址触发规则。

service,我们指定了规则的服务类型,在本例中为ssh。

reject/drop/accept,我们提供了数据包与规则匹配时要执行的操作,在本例中为reject.

Rich规则的优先级

如下例:


规则1:允许来自192.168.50.17的主机(accept)

规则2:拒绝来自192.168.50.0/24网络的所有主机(drop/reject)

规则精确度越高的放在规则列表的最前,逻辑上应该是先设定accept行为的规则,然后再设定drop/reject行为的规则,这样的逻辑在iptables是正确,甚至其他传统的防火墙也是这样行为逻辑的。但你要搞清楚,到了firewalld的rich规则就不适用了。


当前的rich规则的一个问题是,它们是基于规则操作来组织的。 日志规则始终在拒绝规则之前发生。 拒绝规则总是发生在允许规则之前。 这导致用户感到困惑,因为它隐式地对规则进行了重新排序。 这也使得不可能添加全面的rich规则来拒绝流量。


因此firewalld的rich规则执行逻辑如下:


日志规则

drop/reject规则

accept规则

如:我们要允许10.0.0.5/24可以SSH到我们的服务器,但拒绝其他的10.0.0.0/24 SSH 到我们的服务器,我们下面的规则是无效的,我们发现即使第一条允许5来SSH,但它仍然被拒了:


firewall-cmd --zone=zonename --add-rich-rule="rule \

source address=10.0.0.5 service name=ssh accept"

 

firewall-cmd --zone=zonename --add-rich-rule="rule \

source address=10.0.0.0/24 service name=ssh reject"

幸好:


新版的firewalld添加了新的priority字段。它可以是-32768到32767之间的任何数字,其中数字越小,优先级越高。此范围足够大,以允许从脚本或其他实体自动生成规则。


那么就非常简单:只需在你想优先执行的rich规则中给priority字段定义一个足够小的负数,就能确保能优先于其他drop/reject规则被firewalld匹配。


查看当前ssh版本:


ssh -V

如果小于7.4则需要升级到最新版


三、firewalld与ICMP控制

firewall-cmd --get-icmptypes

查看当前是否被阻止:


firewall-cmd --query-icmp-block=echo=request

添加规则丢弃ping包,这样对方就根本连获取到你在拒绝他的信息都没有了:


firewall-cmd --permanent --add-rich-rule="rule protocol value=icmp drop"




推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

本文链接:https://hqyman.cn/post/4622.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

请先 登录 再评论,若不是会员请先 注册

您的IP地址是: