【firewalld】通过firewalld放行、限制ip port 的访问

安装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 并不严格遵循“匹配即停止”的原则,而是结合了不同的匹配机制来实现复杂的防火墙策略。

© 版权声明

相关文章

暂无评论

none
暂无评论...