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 --list-ports

不需要的服务可以删除:

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规则执行逻辑如下:

  1. 日志规则
  2. drop/reject规则
  3. 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"

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值