Firewalld-“防闺蜜神器”

396 阅读11分钟

Firewalld 提供动态管理的防火墙,支持定义网络连接或接口的信任级别的网络/防火墙区域。它支持 IPv4、IPv6 防火墙设置、以太网桥和 IP 集。运行时和永久配置选项是分开的。它还为服务或应用程序提供直接添加防火墙规则的接口,在RHEL7中取代了iptables的地位,今天我们就来gangk一下吧!

1、firewalld和iptables的恩爱情仇

1-1关系图

1ebf6039c2e665b0ec329e3aaa53108.jpg

1-2 iptables概述

  • iptables是 RHEL7 之前的主战力,使用 iptables 可以添加、删除具体的过滤规则,iptables 默认维护着 4 个表和 5 个链,所有的防火墙策略规则都被分别写入这些表与链中。

1-2-1 :四表是指 iptables 的功能,默认的 iptables 规则表有 filter 表(过滤规则表)、nat 表(地址转换规则表)、mangle(修改数据标记位规则表)、raw(跟踪数据表规则表):

    1. filter 表:控制数据包是否允许进出及转发,可以控制的链路有 INPUT、FORWARD 和 OUTPUT。
    1. nat 表:控制数据包中地址转换,可以控制的链路有PREROUTING、INPUT、OUTPUT、POSTROUTING。
    1. mangle:修改数据包中的原数据,可以控制的链路有PREROUTING、INPUT、OUTPUT、FORWARD 和 POSTROUTING。
    1. raw:控制 nat 表中连接追踪机制的启用状况,可以控制的链路有 PREROUTING、OUTPUT。

image.png

1-2-2 :五链是指内核中控制网络的 NetFilter 定义的 5 个规则链。每个规则表中包含多个数据链:INPUT(入站数据过滤)、OUTPUT(出站数据过滤)、FORWARD(转发数据过滤)、PREROUTING(路由前过滤)和POSTROUTING(路由后过滤),防火墙规则需要写入到这些具体的数据链中:

image.png

1-2-3 : 报文流向

image.png

1-2-3 iptables总结

  • iptables是一个命令工具,本身没有守护进程,是源于内核的Netfilter。在命令工具中具有四表五连的特性来控制数据转发

image.png

1-3 firewalld概述

  • firewalld是自 RHEL 7以来带有一个动态的、可定制而无需重新启动防火墙守护程序或服务。firewall-cmd就是iptables/nftable的前端。在 RHEL 8中,nftables取代iptables成为默认的Linux网络包过滤框架。

1-3-1 firewalld的区域(zone)和服务(service)

  • 在正式学习之前,烧饼带各位老爷们了解一下firewalld两个主要特性!

1. -zone:区域:firewalld相较于iptables的链表,定义规则。数据包过来匹配规则,要么就是允许通过,或者拒绝。运行机制固化,firewlld提出区域的概念将传入的流量分类到由源IP和/或网络接口定义的区域中。每个区域都有的配置,可以根据指定的标准接受或拒绝数据包。

  • 区域如同进入主机的安全门,每个区域都具有不同限制程度的规则;
  • 可以使用一个或多个区域,但是任何一个活跃区域至少需要关联源地址或接口;
  • 默认区域是public(公共区域),包含所有的网卡和接口、服务等;
  • 若网络接口未关联到特定的区域,则使用默认区域并执行该区域所指定的规则。
区域描述
drop(丢弃)任何接收的网络数据包都会被丢弃,没有任何回复。仅能有发送出去的网络连接。
block(限制)任何接收的网络连接都被IPv4的icmp-host-prohibited信息和IPv6的icmp6-adm-prohibited信息所拒绝。
public(公共)在公共区域内使用,不能相信网络内的其他计算机不会对您的计算机造成危害,只能接收经过选取的链接。
external(外部)特别是为路由器启动了伪装功能的外部网。您不能信任来自网络的其他计算,不能相信他们不会对您的计算机造成危害,只能接收经过选择的连接。
dmz(非军事区)用于您的非军事区内的电脑,此区域内可公开访问,可以有限的进入您的内部网络,仅仅接收经过选择的连接。
work(工作)用于工作区,您可以基本相信网络内的其他电脑不会危害您的电脑,仅仅接收经过选择的连接。
home(家庭)用于家庭网络,您可以基本信任网络内的其他计算器不会危害您的计算机,仅仅接收经过选择的连接。
internal(内部)用于内部网络,您可以基本上信任网络内的其他计算机不会威胁您的计算机,仅仅接受经过选择的连接。
trusted(信任)可接收所有的网络连接。

简单总结理解一下区域的概念:为了更精细化的控制流量出入和系统安全。我们开发者划分了不同的范围去定义检查流量是宽容还是强制衍生出了区域,对各种内置服务预分组的集合。我们可以查看一下所有区域在以XML文档内容存在于linux系统中。

  • [root@kvm01 ~]# ll   /usr/lib/firewalld/zones/
     total 40
     -rw-r--r--. 1 root root 299 Nov  9  2021 block.xml
     -rw-r--r--. 1 root root 293 Nov  9  2021 dmz.xml
     -rw-r--r--. 1 root root 291 Nov  9  2021 drop.xml
     -rw-r--r--. 1 root root 304 Nov  9  2021 external.xml
     -rw-r--r--. 1 root root 397 Nov  9  2021 home.xml
     -rw-r--r--. 1 root root 412 Nov  9  2021 internal.xml
     -rw-r--r--. 1 root root 729 Aug 18  2021 nm-shared.xml
     -rw-r--r--. 1 root root 343 Nov  9  2021 public.xml
     -rw-r--r--. 1 root root 162 Nov  9  2021 trusted.xml
     -rw-r--r--. 1 root root 339 Nov  9  2021 work.xml
    

2. -firewalld不仅打破来规则列表固化的先后顺序,而且将以往iptables规则中的tcp/ip信息,使用了一个叫service(服务)来独立封装在一个xml文本中,让使用者更加容易记忆和理解.

  • 2-1 那service(服务)是什么呢?简单来说就是应用协议或者我们书面的来解答就是“计算机有关的硬件和软件相关服务和数据处理服务”。
  • 2-2这里我举一些常见的例子!我上网经常用到tcp协议的80端口和443端口,还有域名解析要用到udp协议的35端口,访问共享文件夹需要用到udp端口的137和138端口,OK,我们这些常用的应用,firewalld都已经内置了。因此在防火墙的配置和管理会变得简单以及人性化。

2、绝对男主"firewalld"正式出场

2-1 了解预定义区域

  • [root@kvm01 ~]# firewall-cmd    --get-zones 
          block dmz drop external home internal nm-shared public trusted work       ##查看所有区域
    

上面已经介绍过了我这里就不再赘述了!

2-2如何查你的默认区域

如果您没有更改它,则默认区域设置为public,并且所有网络接口都分配给此区域,用户可以将网络接口和源分 配给区域。其中一个区域设置为默认区域。要获取默认区域运行,请执行以下操作:找您如今默认区域

  • [root@kvm01 ~]# firewall-cmd   --get-default-zone 
      public
    

2-3要查看活动区域和分配给它们的网络接口,请执行以下操作:

  • [root@kvm01 ~]# firewall-cmd --get-active-zones 
      public
      interfaces: ens3
      
    

ens3 网卡接口分配给公共区域

2-4 查看当前firewalld区域所有规则和服务

  • [root@kvm01 ~]# firewall-cmd --list-all --zone=public 
        public (active)
        target: default
        icmp-block-inversion: no
        interfaces: ens3
        sources: 
        services: cockpit dhcpv6-client ssh
        ports: 
        protocols: 
        forward: no
        masquerade: no
        forward-ports: 
        source-ports: 
        icmp-blocks: 
        rich rules: 
    

从上面的输出中,我们可以看到public区域处于活动状态,并使用默认目标Reject。输出还显示该区域由ens3接口使用,并允许DHCPV6客户端和SSH流量、cockpit。 当区域由于其源网络或接口而处理数据包时,但是没有明确处理该数据包的规则,则区域的目标确定行为:

2-4区域的target

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

    • default:不做任何事情
    • ACCEPT:接受数据包
    • REJECT 拒绝数据包,返回拒绝的信息
    • DROP:丢弃数据包,并且不做任何答应
  • 要设置区域的target,请使用--zone选项指定区域,并使用--set-target选项指定目标。例如,要将公共区域的目标更改为DROP,您可以运行:

  •  [root@kvm01 ~]# firewall-cmd  --zone=public --set-target=DROP
    

2-5将接口分配给不同的区域

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

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

  •  [root@kvm01 ~]# firewall-cmd  --zone=internal  --change-interface=ens3    --permanent 
    

2-6 创建新的区域

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

温馨提醒一下给位看官姥爷们 参数“--permanent” 是永久修改.若没有添加该参数就不用使用--reload

  •   firewall-cmd --reload           ##重新加载防火墙配置
    

2-7 服务(services)

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

    • 端口: 443,21或22
    • 服务: ssh,http或https
    • 协议: tcp/udp/icmp

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

image.png

  • 查看当前允许那些服务:
  •  [root@kvm01 ~]# firewall-cmd  --list-services 
      cockpit dhcpv6-client ssh
    

以上命令表明我的默认区域是public的,并且我允许CentOS 8/RHEL 8上的传入SSH连接(端口22)、dhcpv6-client和cockpit服务端口。默认情况下会丢弃所有其他流量。

如果CentOS 8上配置nginx,我需要使用firewall-cmd打开端口80/443。假设您不需要cockpit或dhcpv6-client等不必要的服务,可以通过修改规则将其删除。例如,删除服务```

  • firewall-cmd --remove-service=cockpit --permanent 
    
  • firewall-cmd --remove-service=dhcpv6-client --permanent
    
  • firewall-cmd --reload 
    

运行时Firewalld配置更改是临时的。当您重新启动CetnOS8服务器时,它们就消失了。例如,以下命令将临时打开Nginx/Apache Web服务器的TCP端口80/443(Https):

  • firewall-cmd --zone=public --add-service=http
    
  • firewall-cmd --zone=public --add-service=https 
    

以上演示了如何添加服务和端口,下面演示一下如何删除

  • firewall-cmd --zone=public --remove-service=dns --permanent 
    

如何允许/打开TCP/UDP端口/协议

  • [root@kvm01 ~]# firewall-cmd --zone=public --add-port=9527/tcp --permanent
    

验证结构,可以使用以下命令验证

  • firewall-cmd --list-ports 
    

如何拒绝/阻止TCP/UDP端口/协议

  •  firewall-cmd --zone=public --remove-port=9527/tcp --permanent 
    

打开端口和源IP

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

开放源IP

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

  •  firewall-cmd --zone=public --add-source=192.168.172.32 
    

3、案例演示

image.png

  • 开启NAT功能

  • firewall-cmd --permanent --zone=public --add-masquerade
    
  • [root@kvm-01 ~]# vim /etc/sysctl.conf //永久生效 net.ipv4.ip_forward = 1 
    
  • [root@kvm-01 ~]# sysctl -p //生效
    

我偷个懒,这里实例演示需要vmware加载许多虚拟网卡,这里就暂时不给大家演示了附上一条链接大家可以去参考,若有侵权请联系作者删除!

Firewalld防火墙实例配置_ML908的博客-CSDN博客](blog.csdn.net/ML908/artic…)