美文网首页linux
【firewalld】通过firewalld放行、限制ip po

【firewalld】通过firewalld放行、限制ip po

作者: Bogon | 来源:发表于2024-08-28 00:12 被阅读0次

    安装fiirewalld

    # yum  -y install  firewalld
    
    # rpm -qa | grep firewalld
    
    firewalld-0.6.3-13.el7_9.noarch
    firewalld-filesystem-0.6.3-13.el7_9.noarch
    
    # yum info firewalld
    已加载插件:fastestmirror
    Loading mirror speeds from cached hostfile
     * epel: repo.jing.rocks
    已安装的软件包
    名称    :firewalld
    架构    :noarch
    版本    :0.6.3
    发布    :13.el7_9
    大小    :1.9 M
    源    :installed
    来自源:anaconda
    简介    : A firewall daemon with D-Bus interface providing a dynamic firewall
    网址    :http://www.firewalld.org
    协议    : GPLv2+
    描述    : firewalld is a firewall service daemon that provides a dynamic customizable
             : firewall with a D-Bus interface.
    

    firewalld的匹配规则是什么?

    firewalld 的匹配规则用于定义哪些流量被允许或拒绝。

    以下是一些常见的匹配规则类型和概念:

    1. 端口匹配

    • --add-port=PORT/PROTOCOL: 允许指定端口和协议的流量。例如,--add-port=22/tcp 允许 TCP 端口 22 的流量。

    2. 服务匹配

    • --add-service=SERVICE: 允许指定服务的流量,例如,--add-service=ssh 允许 SSH 服务的流量,这通常对应于端口 22。

    3. IP 地址匹配

    • --add-source=SOURCE_IP: 允许来自指定 IP 地址的流量。例如,--add-source=192.168.1.100 允许来自 192.168.1.100 的所有流量。

    4. 丰富规则(Rich Rules)

    • 使用 --add-rich-rule 添加复杂的规则,可以匹配源地址、目标地址、端口、协议等。示例:
      sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.1.100 port port=22 protocol=tcp accept'
      

    5. 协议匹配

    • --protocol=PROTOCOL: 匹配指定的协议,如 tcpudp 等。例如,--protocol=tcp

    6. 链(Chains)

    • firewalld 中,流量匹配规则是应用于默认的链,如 INPUT、FORWARD 和 OUTPUT。你可以在自定义链中定义规则,但这通常涉及到更复杂的配置。

    7. 区域(Zones)

    • firewalld 使用区域来应用不同的规则集。每个区域都可以有不同的规则。例如,publicdmzhome 等。

    示例命令

    • 允许所有来自某个 IP 的流量:
      sudo firewall-cmd --permanent --zone=public --add-source=192.168.1.100
      
    • 允许所有 TCP 流量通过端口 22:
      sudo firewall-cmd --permanent --zone=public --add-port=22/tcp
      
    • 允许来自某个 IP 地址的特定端口和协议的流量:
      sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.1.100 port port=22 protocol=tcp accept'
      

    应用更改

    在修改了 firewalld 配置后,必须重新加载配置才能生效:

    sudo firewall-cmd --reload
    

    这些规则可以根据需求进行组合,以满足特定的安全和访问需求。

    cat set-firelwalld.sh

    #!/bin/bash
    
    ips="
    127.0.0.1
    xx.xx.xx.xx
    "
    
    sudo systemctl start  firewalld
    sudo systemctl enable firewalld
    
    sudo firewall-cmd --permanent --zone=public --add-port=22/tcp
    sudo firewall-cmd --permanent --zone=public --add-port=80/tcp
    sudo firewall-cmd --permanent --zone=public --add-port=443/tcp
    
    for ip in ${ips}
    do
      sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=${ip} port port=1-65355 protocol=tcp accept'
      sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=${ip} port port=1-65355 protocol=udp accept'
    done
    
    # 放行docker run 的容器默认网段
    firewall-cmd --permanent --zone=public --add-rich-rule="rule family=ipv4 source address="172.17.0.0/16" port port=1-65535 protocol=tcp accept"
    firewall-cmd --permanent --zone=public --add-rich-rule="rule family=ipv4 source address="172.17.0.0/16" port port=1-65535 protocol=udp accept"
    
    sudo firewall-cmd --reload
    
    
    # firewall-cmd  --list-all
    
    public (active)
      target: default
      icmp-block-inversion: no
      interfaces: ens33
      sources:
      services: dhcpv6-client ssh
      ports: 22/tcp 80/tcp
      protocols:
      masquerade: no
      forward-ports:
      source-ports:
      icmp-blocks:
      rich rules:
            rule family="ipv4" source address="127.0.0.1" port port="1-65355" protocol="tcp" accept
            rule family="ipv4" source address="127.0.0.1" port port="1-65355" protocol="udp" accept
            rule family="ipv4" source address="xx.xx.xx.xx" port port="1-65355" protocol="tcp" accept
            rule family="ipv4" source address="xx.xx.xx.xx" port port="1-65355" protocol="udp" accept
    
    

    firewalldiptables 的匹配规则和处理方式 有什么不同?

    firewalldiptables 的匹配规则和处理方式有一些显著的区别:

    1. 动态管理

    • firewalld: 支持动态添加、删除规则和配置区域,无需重启服务。更适合于需要频繁更改规则的环境。
    • iptables: 更改规则通常需要通过重启或重新加载配置来应用,这可能导致短暂的中断。

    2. 区域和服务

    • firewalld: 使用区域和服务的概念,可以为不同的网络接口应用不同的规则集。规则更具可读性和灵活性,例如通过 --add-service=ssh
    • iptables: 没有区域的概念,规则是逐条定义的,较为原始,需要手动管理每一条规则。

    3. 规则的顺序

    • firewalld: 使用丰富规则(rich rules)可以在特定的区域中定义规则,匹配顺序和优先级可以通过丰富规则实现。
    • iptables: 规则是基于链的,规则的匹配顺序是固定的,一旦匹配成功,规则链会立即停止检查后续规则。

    4. 规则处理

    • firewalld: 当匹配规则后,处理方式通常是直接接受或拒绝流量,动态应用更改不会中断服务。
    • iptables: 规则是基于链的,当规则匹配时,流量处理会按链的顺序进行,并且可以在链中使用 RETURNDROP 等动作,控制流量处理的流程。

    5. 配置管理

    • firewalld: 使用 XML 文件和命令行工具来管理配置,配置和规则更易于理解和维护。
    • iptables: 使用命令行工具和脚本进行配置,可能需要更多的手动管理和脚本编写。

    总的来说,firewalld 提供了更高层次的抽象和动态管理功能,而 iptables 提供了更细粒度的控制,但管理起来相对复杂。

    相较于iptables的匹配即停止原则,firewalld在这点上有什么不一样?

    iptablesfirewalld 都是用于管理Linux防火墙的工具,但它们在处理数据包匹配和规则执行的方式上有些不同。

    iptables 的匹配即停止原则

    iptables 中,规则链是顺序匹配的。每个链中的规则是逐条检查的,一旦一个规则匹配了数据包,iptables 就会执行相应的操作(比如接受、拒绝或丢弃数据包),并且通常会停止进一步的规则检查。这种“匹配即停止”的原则意味着一旦数据包满足了某个规则,它将不会再被后续规则处理。

    firewalld 的处理方式

    firewalld 使用了不同于 iptables 的处理机制,主要体现在以下几个方面:

    1. 区域和服务的概念

      • firewalld 基于区域(zones)和服务(services)的概念来管理防火墙规则。每个区域定义了一组规则,服务则是预定义的规则集合。
    2. 动态规则管理

      • firewalld 提供了动态的规则管理方式。你可以在不重新加载防火墙的情况下添加、删除或修改规则。它支持运行时配置和永久配置,使得对规则的更改可以即时生效。
    3. 规则的匹配

      • firewalld 中,规则的匹配并不是“匹配即停止”的。它使用了类似 iptables 的链式规则匹配机制,但其背后的实现机制更为复杂。具体来说,firewalld 在实际操作中会根据区域和服务的定义来处理数据包,规则的应用顺序和优先级可能会有所不同。
    4. 集成化和简化

      • firewalld 提供了一个更高层次的抽象,通过使用区域和服务的概念,简化了规则的管理。这意味着用户不需要像在 iptables 中那样手动编写规则链,而是通过区域和服务来进行配置。

    总的来说,firewalld 的设计旨在提供更灵活、动态和用户友好的防火墙管理方式,相对于 iptables 的规则链式匹配,firewalld 通过区域和服务的抽象简化了规则管理过程。在实际应用中,firewalld 并不严格遵循“匹配即停止”的原则,而是结合了不同的匹配机制来实现复杂的防火墙策略。

    相关文章

      网友评论

        本文标题:【firewalld】通过firewalld放行、限制ip po

        本文链接:https://www.haomeiwen.com/subject/vtozkjtx.html