获取所有可用区域:
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"
推荐本站淘宝优惠价购买喜欢的宝贝:
本文链接:https://hqyman.cn/post/4622.html 非本站原创文章欢迎转载,原创文章需保留本站地址!
休息一下~~