Linux防火墙管理指南

Linux防火墙管理指南

1. 防火墙概述

1.1 什么是防火墙

防火墙是部署在网络或主机边缘的安全组件,根据预定义的规则检查进出数据包,对匹配规则的流量执行相应的处理操作。现代防火墙通常采用"默认拒绝、明确允许"的策略,仅开放必要的网络访问。

1.2 防火墙分类

按保护范围划分:

  • 主机防火墙:保护单台主机
  • 网络防火墙:保护整个局域网

按实现方式划分:

  • 硬件防火墙:专用硬件设备实现,如华为、华三等厂商产品
  • 软件防火墙:运行在通用硬件上的防火墙软件,如iptables、firewalld

按工作层次划分:

  • 网络层防火墙 :工作在OSI模型下四层,基于数据包特征过滤
    • 优点:处理速度快、对用户透明
    • 缺点:无法检查应用层数据
  • 应用层防火墙 :工作在OSI模型七层,深度检查应用层协议
    • 优点:能防御应用层攻击
    • 缺点:处理速度相对较慢

2. Linux防火墙核心子系统

2.1 Netfilter子系统

Linux内核中的网络过滤框架,提供数据包处理的基础能力:

工具 功能描述
iptables IPv4数据包过滤
ip6tables IPv6数据包过滤
arptables ARP协议数据包过滤
ebtables 数据链路层过滤

bash

复制代码
# 查看系统防火墙工具
ls -l /sbin/*tables

2.2 Nftables子系统

Netfilter的现代化替代方案,提供更优性能和统一管理接口:

  • 更快的规则处理速度
  • 支持原子规则更新
  • 统一管理所有网络协议

3. Firewalld动态防火墙

3.1 Firewalld简介

Red Hat开发的动态防火墙管理工具,默认使用nftables后端:

  • 动态加载:规则变更无需重启服务
  • 区域管理:简化复杂网络环境配置
  • 向后兼容:底层仍使用iptables规则

3.2 防火墙区域(Zone)

Firewalld通过区域化管理简化配置:

区域 默认策略 典型应用场景
trusted 允许所有流量 完全信任的内部网络
public 仅允许ssh/dhcp 公共网络接口(默认区域)
home 允许家庭服务 家庭网络环境
internal 允许内部服务 企业内部网络
work 允许工作服务 办公网络环境
dmz 仅允许ssh 隔离区服务器
block 拒绝所有连接 访问限制区域
drop 丢弃所有数据包 静默丢弃恶意流量

3.3 区域匹配优先级

数据包按以下顺序匹配区域:

  1. 匹配接口绑定的区域
  2. 匹配源地址绑定的区域
  3. 匹配默认区域

4. Firewalld配置实战

4.1 基础环境准备

bash

复制代码
# 安装必要软件
yum install -y firewalld firewall-config
systemctl enable --now firewalld

4.2 区域管理操作

bash

复制代码
# 查看可用区域
firewall-cmd --get-zones

# 查看当前活动区域
firewall-cmd --get-active-zones

# 查看默认区域
firewall-cmd --get-default-zone

# 设置默认区域
firewall-cmd --set-default-zone=internal

# 查看区域详细配置
firewall-cmd --zone=public --list-all

4.3 接口与源地址管理

bash

复制代码
# 查看接口区域分配
firewall-cmd --get-zone-of-interface=ens192

# 更改接口区域
firewall-cmd --zone=internal --change-interface=ens192

# 添加源地址到区域
firewall-cmd --zone=trusted --add-source=192.168.1.0/24

# 移除源地址
firewall-cmd --zone=trusted --remove-source=192.168.1.0/24

4.4 服务与端口管理

bash

复制代码
# 查看预定义服务
firewall-cmd --get-services

# 放行HTTP服务
firewall-cmd --add-service=http
firewall-cmd --add-service=https

# 放行自定义端口
firewall-cmd --add-port=8080/tcp
firewall-cmd --add-port=10000-20000/udp

# 查询放行状态
firewall-cmd --query-service=http
firewall-cmd --query-port=8080/tcp

# 移除规则
firewall-cmd --remove-service=http
firewall-cmd --remove-port=8080/tcp

4.5 网络地址转换(NAT)

bash

复制代码
# 启用IP伪装(SNAT)
firewall-cmd --add-masquerade

# 端口转发(DNAT)
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080
firewall-cmd --add-forward-port=port=2222:proto=tcp:toaddr=192.168.1.100:toport=22

# 查询转发规则
firewall-cmd --list-forward-ports

4.6 ICMP控制

bash

复制代码
# 查看ICMP类型
firewall-cmd --get-icmptypes

# 禁止ping请求
firewall-cmd --add-icmp-block=echo-request

# 允许特定主机ping
firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.1.10 icmp-type name=echo-request accept'

# 反转ICMP策略(默认拒绝,明确允许)
firewall-cmd --add-icmp-block-inversion

4.7 富规则(Rich Rules)

bash

复制代码
# 禁止特定IP访问
firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.0.0.5 drop'

# 允许特定IP访问服务
firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 service name=http accept'

# 限速规则(每分钟3个连接)
firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.0.0.0/24 service name=ssh accept limit value=3/m'

# 日志记录规则
firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.0.0.0/24 log prefix="FIREWALL: " level=info limit value=3/m'

# 查看富规则
firewall-cmd --list-rich-rules

4.8 直接规则(Direct Rules)

bash

复制代码
# 添加直接规则(类似iptables语法)
firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -p tcp --dport 9000 -j ACCEPT

# 查看直接规则
firewall-cmd --direct --get-all-rules

# 删除直接规则
firewall-cmd --direct --remove-rule ipv4 filter INPUT 0 -p tcp --dport 9000 -j ACCEPT

4.9 持久化与运行时配置

bash

复制代码
# 运行时配置(立即生效,重启失效)
firewall-cmd --add-service=ssh

# 永久配置(写入配置文件)
firewall-cmd --permanent --add-service=ssh

# 重载配置(应用永久配置)
firewall-cmd --reload

# 完全重载(断开现有连接)
firewall-cmd --complete-reload

# 保存运行时配置为永久
firewall-cmd --runtime-to-permanent

5. 实用配置案例

5.1 Web服务器防护

bash

复制代码
# 放行Web服务
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https

# 限制管理访问
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 port port=22 protocol=tcp accept'
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=10.0.0.0/8 port port=22 protocol=tcp accept'

# 应用配置
firewall-cmd --reload

5.2 数据库服务器防护

bash

复制代码
# 仅允许应用服务器访问
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.1.100 port port=3306 protocol=tcp accept'
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.1.101 port port=3306 protocol=tcp accept'

# 拒绝其他所有数据库访问
firewall-cmd --permanent --remove-service=mysql

5.3 应急处理

bash

复制代码
# 紧急模式(阻断所有流量)
firewall-cmd --panic-on

# 检查紧急模式状态
firewall-cmd --query-panic

# 关闭紧急模式
firewall-cmd --panic-off

# 临时允许特定IP(10秒后自动删除)
firewall-cmd --add-source=192.168.1.100 --timeout=10

6. 图形化管理工具

6.1 firewall-config使用

bash

复制代码
# 启动图形界面(需要X11转发)
firewall-config

主要功能区域:

  1. 区域选择:选择要配置的区域
  2. 服务管理:勾选允许的服务
  3. 端口配置:添加自定义端口规则
  4. 富规则编辑:可视化配置复杂规则
  5. ICMP过滤:控制ICMP报文类型
  6. NAT配置:设置端口转发和伪装

6.2 配置状态管理

  • 运行时:当前生效的配置(红色标记)
  • 永久:保存的配置文件(绿色标记)
  • 连接跟踪:查看活动连接状态

7. 最佳实践与排错

7.1 配置最佳实践

  1. 最小权限原则:仅开放必要服务
  2. 分层防护:结合网络层和主机层防火墙
  3. 日志记录:关键规则添加日志记录
  4. 测试验证:变更前在测试环境验证
  5. 版本控制:备份防火墙配置文件

7.2 常见问题排查

bash

复制代码
# 检查防火墙状态
systemctl status firewalld
firewall-cmd --state

# 查看完整配置
firewall-cmd --list-all-zones

# 检查规则冲突
journalctl -u firewalld -f

# 临时禁用防火墙(仅用于排错)
systemctl stop firewalld
systemctl disable firewalld

# 重置防火墙配置
firewall-cmd --reset-defaults

7.3 配置文件位置

bash

复制代码
# 系统默认配置
/usr/lib/firewalld/

# 用户自定义配置
/etc/firewalld/

# 服务定义文件
/usr/lib/firewalld/services/*.xml

# 区域定义文件
/usr/lib/firewalld/zones/*.xml

8. 防火墙规则优先级总结

  1. 直接规则(最高优先级)
  2. 富规则
  3. 区域规则(端口/服务/协议)
  4. 默认区域规则(最低优先级)

规则处理流程:

text

复制代码
数据包到达 → 匹配直接规则 → 匹配富规则 → 匹配区域规则 → 应用默认策略

9. 与iptables共存

9.1 选择使用方案

  • 方案A:仅使用firewalld(推荐)
  • 方案B:仅使用iptables
  • 方案C:混合使用(需要谨慎协调)

9.2 迁移工具

bash

复制代码
# 将iptables规则转换为firewalld
iptables-restore-translate -f iptables-save.txt

# 检查当前使用的后端
firewall-cmd --get-backend

10. 安全加固建议

10.1 基础加固措施

bash

复制代码
# 1. 设置合理默认区域
firewall-cmd --set-default-zone=drop

# 2. 限制管理访问
firewall-cmd --add-rich-rule='rule family=ipv4 source address=管理网段 service name=ssh accept'

# 3. 启用连接跟踪
firewall-cmd --add-rich-rule='rule service name=ftp protocol value=ftp accept'  # 自动处理FTP被动模式

# 4. 定期审计规则
firewall-cmd --list-all --permanent > /backup/firewall-$(date +%Y%m%d).conf

10.2 高级防护功能

bash

复制代码
# 连接限制(防DDoS)
firewall-cmd --add-rich-rule='rule service name=http accept limit value=20/s'

# 黑名单管理
firewall-cmd --add-rich-rule='rule family=ipv4 source address=恶意IP drop'

# 时间规则(仅工作时间开放)
# 需要结合cron定时任务实现

通过本指南,您可以全面掌握Linux防火墙的管理技能,从基础配置到高级防护,构建坚固的网络安全防线。

相关推荐
礼拜天没时间.2 小时前
Linux 系统规范配置:建立标准目录结构、 repo 源获取、修改终端变色
linux·服务器·centos·repo·终端变色
白玉瑕2 小时前
服务器存储基础
运维·服务器
liqb3652 小时前
RUN_TO_PARITY特性对调度延时的影响
linux
Ephemeral Memories2 小时前
ubuntu安装软件失败以及运行闪退
linux·ubuntu
网安CILLE2 小时前
PHP四大输出语句
linux·开发语言·python·web安全·网络安全·系统安全·php
ghostmen2 小时前
openEuler 安装 K3S
linux·k3s
蚊子码农2 小时前
算法题解记录-208实现Trie前缀树
运维·服务器·算法
RisunJan2 小时前
Linux命令-iptables(配置防火墙规则的核心工具)
linux·运维·服务器
UpYoung!2 小时前
【Windows 文件系统管理工具】实用工具之XYplorer 完全指南:专业级文件系统管理的终极解决方案
运维·运维开发·实用工具·文件系统管理·办公学习·xyplorer·windows文件管理工具