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=ipv4
  source address=172.16.30.0/24
  service name=http
  accept
' --permanent
firewall-cmd --reload
(2)带日志记录的规则配置
# 允许172.16.30.0/24访问http,以notice级别记录日志(每分钟最多10条)
firewall-cmd --add-rich-rule='
  rule family=ipv4
  source address=172.16.30.0/24
  service name=http
  log prefix="http_access" level=notice limit value=10/m
  accept
' --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=ipv4
  source address=172.16.30.0/24
  service name=ssh
  audit limit value=2/m
  reject
' --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=ipv4
  source address=172.16.30.0/24
  masquerade
' --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=ipv4
  source address=12.12.12.0/24
  forward-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=ipv4
  source address=172.16.30.0/24
  forward-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 通过区域、服务、富规则等机制实现了灵活的防火墙管理,核心操作包括:

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值