当前位置: 首页 > ds >正文

Linux 防火墙(firewalld)详解与配置

Linux 防火墙(firewalld)详解与配置

在这里插入图片描述

一、防火墙的基本概念

防火墙是一种网络安全机制,通过隔离风险区域与安全区域的连接,实现以下核心目标:

  • 阻止未授权访问进入内部网络,过滤不安全的服务和非法用户
  • 构建防御屏障,防止入侵者接近核心防御设施
  • 限制用户对特殊网络资源的访问权限
  • 为监控互联网安全状态提供日志记录和审计依据

二、Linux 防火墙的底层与工具

1. netfilter 模块

netfilter 是 Linux 内核中的网络过滤模块,位于/lib/modules/(内核版本 uname -r查看)/kernel/net/netfilter目录,负责处理网络数据包的过滤、转发等核心功能。

2. 防火墙管理工具

  • iptables:CentOS 6 及更早版本的默认防火墙工具,基于命令行规则配置。
  • firewalld:CentOS 7 及以上版本的动态防火墙工具,支持实时规则更新,无需重启服务即可生效,是本文的核心内容。

三、firewalld 的核心概念与基础操作

1. 区域(Zone)

firewalld 通过 “区域” 管理不同信任级别的网络连接,内置 3 个特殊区域:

  • drop:强制拒绝所有传入流量,不返回任何响应(类似 “无声拒绝”)。
  • block:拒绝所有传入流量,但会返回拒绝响应(类似 “礼貌拒绝”)。
  • trusted:允许所有传入流量,无任何限制。

注意:drop 和 block 区域无论是否勾选服务,均默认禁止所有流量;trusted 区域则默认允许所有流量。

2. 基本命令行操作(firewall-cmd)

(1)查看防火墙状态与区域信息
# 查看当前区域的所有配置信息
firewall-cmd --list-all# 查看默认区域
firewall-cmd --get-default-zone#查看所有区域的配置信息
firewall-cmd --list-all-zones # 切换默认区域(例如设置为home)
firewall-cmd --set-default-zone=home
(2)管理服务与端口
# 临时添加http服务(当前生效,重启后失效)
firewall-cmd --add-service=http# 永久添加82/tcp端口(需重载生效)
firewall-cmd --add-port=82/tcp --permanent# 移除ftp服务(永久生效)
firewall-cmd --remove-service=ftp --permanent# 重载配置使永久规则生效
firewall-cmd --reload

说明:--permanent参数表示规则永久生效,需执行firewall-cmd --reload后应用;不带此参数则仅当前运行时生效。

四、富规则(Rich Rule)配置

富规则用于定义复杂的防火墙策略,支持基于源地址、服务、端口等多条件的精细控制,语法结构包括family(协议族)、source(源地址)、service(服务)、log(日志)、action(动作)等。

1. 基本动作说明

  • accept:允许流量通过。
  • reject:拒绝流量,并返回拒绝响应(如 “端口不可达”)。
  • drop:直接丢弃流量,不返回任何响应。

规则优先级:当拒绝规则与允许规则冲突时,拒绝规则优先生效

2. 富规则实战示例

(1)允许特定网段访问 http 服务
# 允许172.16.30.0/24网段访问http服务(永久生效)
firewall-cmd --add-rich-rule='rule family=ipv4source address=172.16.30.0/24service name=httpaccept
' --permanent
firewall-cmd --reload
(2)带日志记录的规则配置
# 允许172.16.30.0/24访问http,以notice级别记录日志(每分钟最多10条)
firewall-cmd --add-rich-rule='rule family=ipv4source address=172.16.30.0/24service name=httplog prefix="http_access" level=notice limit value=10/maccept
' --zone=public --permanent
firewall-cmd --reload
  • 日志级别:从高到低为emergalertcriterrorwarningnoticeinfodebug
  • limit 参数value=rate/duration,如10/m表示每分钟最多 10 条日志(s = 秒、m = 分、h = 时、d = 天)。
(3)临时拒绝特定网段的 ssh 连接
# 10分钟内(600秒)拒绝172.16.30.0/24的ssh连接,每分钟记录2条审计日志
firewall-cmd --add-rich-rule='rule family=ipv4source address=172.16.30.0/24service name=sshaudit limit value=2/mreject
' --timeout=600

五、高级功能:伪装与端口转发

1. IP 伪装(NAT 转发)

伪装功能允许内部网络通过防火墙的公网 IP 访问外部网络,需先开启内核 IP 转发:

# 开启IP转发(永久生效)
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p  # 立即生效# 对public区域启用伪装(允许172.16.30.0/24网段通过)
firewall-cmd --add-rich-rule='rule family=ipv4source address=172.16.30.0/24masquerade
' --zone=public --permanent# 或直接对区域启用伪装(所有源地址)
firewall-cmd --add-masquerade --zone=public --permanent
firewall-cmd --reload

2. 端口转发

将访问本地特定端口的流量转发到其他端口或主机。

(1)本地端口转发
# 临时将8000/tcp端口转发到80/tcp(目标地址为172.16.30.130)
firewall-cmd --add-forward-port=port=8000:proto=tcp:toport=80:toaddr=172.16.30.130
(2)基于富规则的跨网段转发
# 永久将12.12.12.0/24访问本地80端口的流量转发到172.16.30.30的80端口
firewall-cmd --add-rich-rule='rule family=ipv4source address=12.12.12.0/24forward-port port=80 protocol=tcp to-port=80 to-addr=172.16.30.30
' --permanent
firewall-cmd --reload
(3)特定网段访问转发
# 永久将172.16.30.0/24访问本地9527端口的流量转发到80端口
firewall-cmd --add-rich-rule='rule family=ipv4source address=172.16.30.0/24forward-port port=9527 protocol=tcp to-port=80
' --permanent
firewall-cmd --reload

六、补充:禁 Ping 配置

通过内核参数禁止 ICMP echo 请求(即禁 Ping):

# 永久禁Ping
echo "net.ipv4.icmp_echo_ignore_all = 1" >> /etc/sysctl.conf
sysctl -p  # 立即生效

总结

firewalld 通过区域、服务、富规则等机制实现了灵活的防火墙管理,核心操作包括:

  • 基础服务 / 端口的添加与移除;
  • 富规则的精细控制(含日志、源地址限制);
  • 伪装与端口转发的高级配置。

合理配置防火墙规则可有效提升系统安全性,实际使用中需根据业务场景选择 “最小权限” 原则,仅开放必要的服务和端口。

http://www.xdnf.cn/news/17327.html

相关文章:

  • 【概念学习】早期神经网络
  • IPS知识点
  • spring-dubbo
  • ##Anolis OS 8.10 安装oracle19c
  • 从零开始的CAD|CAE开发: 单柱绕流+多柱绕流
  • vue封装一个cascade级联 多选 全选组件 ,原生写法Input,Checkbox,Button
  • 看不见的伪造痕迹:AI时代的鉴伪攻防战
  • Codeforces Round 987 (Div. 2)
  • 数据结构—队列和栈
  • 问题定位排查手记1 | 从Windows端快速检查连接状态
  • Java面试宝典:类加载器分层设计与核心机制解析
  • PyCharm vs. VSCode 到底哪个更好用
  • C++、STL面试题总结(二)
  • 图论(邻接表)DFS
  • SpringBoot 接入SSE实现消息实时推送的优点,原理以及实现
  • 【Linux系统】进程间通信:命名管道
  • 生成模型实战 | Transformer详解与实现
  • 分布式光伏气象站:安装与维护
  • 人大金仓数据库逻辑备份与恢复命令
  • 基于模式识别的订单簿大单自动化处理系统
  • Git 分支迁移完整指南(结合分支图分析)
  • JavaWeb(04)
  • 每日五个pyecharts可视化图表-bars(5)
  • SQL的条件查询
  • PDF注释的加载和保存的实现
  • jspdf或react-to-pdf等pdf报错解决办法
  • QT自定义控件
  • 学习日志29 python
  • 微信小程序多媒体功能实现
  • 大型音频语言模型论文总结