安装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
: 匹配指定的协议,如tcp
、udp
等。例如,--protocol=tcp
。
6. 链(Chains)
- 在
firewalld
中,流量匹配规则是应用于默认的链,如 INPUT、FORWARD 和 OUTPUT。你可以在自定义链中定义规则,但这通常涉及到更复杂的配置。
7. 区域(Zones)
-
firewalld
使用区域来应用不同的规则集。每个区域都可以有不同的规则。例如,public
、dmz
、home
等。
示例命令
- 允许所有来自某个 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
firewalld
和iptables
的匹配规则和处理方式 有什么不同?
firewalld
和 iptables
的匹配规则和处理方式有一些显著的区别:
1. 动态管理
- firewalld: 支持动态添加、删除规则和配置区域,无需重启服务。更适合于需要频繁更改规则的环境。
- iptables: 更改规则通常需要通过重启或重新加载配置来应用,这可能导致短暂的中断。
2. 区域和服务
-
firewalld: 使用区域和服务的概念,可以为不同的网络接口应用不同的规则集。规则更具可读性和灵活性,例如通过
--add-service=ssh
。 - iptables: 没有区域的概念,规则是逐条定义的,较为原始,需要手动管理每一条规则。
3. 规则的顺序
- firewalld: 使用丰富规则(rich rules)可以在特定的区域中定义规则,匹配顺序和优先级可以通过丰富规则实现。
- iptables: 规则是基于链的,规则的匹配顺序是固定的,一旦匹配成功,规则链会立即停止检查后续规则。
4. 规则处理
- firewalld: 当匹配规则后,处理方式通常是直接接受或拒绝流量,动态应用更改不会中断服务。
-
iptables: 规则是基于链的,当规则匹配时,流量处理会按链的顺序进行,并且可以在链中使用
RETURN
、DROP
等动作,控制流量处理的流程。
5. 配置管理
- firewalld: 使用 XML 文件和命令行工具来管理配置,配置和规则更易于理解和维护。
- iptables: 使用命令行工具和脚本进行配置,可能需要更多的手动管理和脚本编写。
总的来说,firewalld
提供了更高层次的抽象和动态管理功能,而 iptables
提供了更细粒度的控制,但管理起来相对复杂。
相较于iptables的匹配即停止原则,firewalld在这点上有什么不一样?
iptables
和 firewalld
都是用于管理Linux防火墙的工具,但它们在处理数据包匹配和规则执行的方式上有些不同。
iptables
的匹配即停止原则
在 iptables
中,规则链是顺序匹配的。每个链中的规则是逐条检查的,一旦一个规则匹配了数据包,iptables
就会执行相应的操作(比如接受、拒绝或丢弃数据包),并且通常会停止进一步的规则检查。这种“匹配即停止”的原则意味着一旦数据包满足了某个规则,它将不会再被后续规则处理。
firewalld
的处理方式
firewalld
使用了不同于 iptables
的处理机制,主要体现在以下几个方面:
-
区域和服务的概念:
-
firewalld
基于区域(zones)和服务(services)的概念来管理防火墙规则。每个区域定义了一组规则,服务则是预定义的规则集合。
-
-
动态规则管理:
-
firewalld
提供了动态的规则管理方式。你可以在不重新加载防火墙的情况下添加、删除或修改规则。它支持运行时配置和永久配置,使得对规则的更改可以即时生效。
-
-
规则的匹配:
- 在
firewalld
中,规则的匹配并不是“匹配即停止”的。它使用了类似iptables
的链式规则匹配机制,但其背后的实现机制更为复杂。具体来说,firewalld
在实际操作中会根据区域和服务的定义来处理数据包,规则的应用顺序和优先级可能会有所不同。
- 在
-
集成化和简化:
-
firewalld
提供了一个更高层次的抽象,通过使用区域和服务的概念,简化了规则的管理。这意味着用户不需要像在iptables
中那样手动编写规则链,而是通过区域和服务来进行配置。
-
总的来说,firewalld
的设计旨在提供更灵活、动态和用户友好的防火墙管理方式,相对于 iptables
的规则链式匹配,firewalld
通过区域和服务的抽象简化了规则管理过程。在实际应用中,firewalld
并不严格遵循“匹配即停止”的原则,而是结合了不同的匹配机制来实现复杂的防火墙策略。
网友评论