🎉 限时公测|限量体验29元4核8G39元8核16G云开发环境一个月,助力Vibe Coding新时代!

Linux 防火墙管理 - UFW 与 iptables 安全配置

初级

深入学习 Ubuntu 24.10 Server 防火墙配置和管理,掌握 UFW 简化配置和 iptables 高级规则,构建安全的网络防护体系。通过工程化类比和实践操作,让初学者轻松掌握Linux防火墙管理的核心技能。

未知
easylearning团队
更新于 2025-01-22

🚀 实践环境(SSH)

欢迎使用Easylearning为您专属打磨的自由学习实践环境, 登录后马上开始边学边练吧!

StudyBoard

创建StudyBoard练习实例,系统自动连接到实例后,可以在教程中直接发送远程命令到实例中执行并能查看结果,享受更好的学习体验。

Linux 防火墙管理 - UFW 与 iptables 安全配置

Linux防火墙是网络安全的第一道防线,在现代企业环境中发挥着至关重要的作用。本教程将通过工程化类比和实践操作,帮助您掌握从基础配置到高级安全策略的完整防火墙管理技能。

🎯 学习目标

完成本章学习后,您将能够:

  • 防火墙原理理解: 深入理解Linux防火墙的工作原理和Netfilter架构
  • UFW配置管理: 熟练掌握UFW防火墙的安装、配置和日常管理操作
  • iptables规则编写: 学会编写和优化iptables规则,实现高级安全策略
  • 安全策略制定: 掌握基于最小权限原则的防火墙安全策略设计
  • 监控故障排除: 学会防火墙日志分析、性能监控和常见问题解决

🛡️ Linux 防火墙架构概述

核心概念

Linux防火墙官方定义

根据Linux内核文档和RFC 2979(防火墙行为规范),Linux防火墙是一个基于Netfilter框架的网络数据包过滤系统,在内核空间实现对网络流量的检查、过滤和控制功能。它通过在网络协议栈的关键点设置钩子函数,对经过的数据包进行规则匹配和动作执行。

科学工程化类比

Linux防火墙就像现代化安检系统

  • Netfilter框架 = 机场安检大厅,提供统一的检查基础设施
  • 钩子点(Hooks) = 各个安检关卡,在关键位置进行检查
  • 表(Tables) = 不同类型的安检设备(X光机、金属探测器、人工检查)
  • 链(Chains) = 安检流程,按顺序执行各项检查
  • 规则(Rules) = 具体的安检标准和处理方式

分层防护的工程优势

  • 多重检查机制:如同机场多道安检,确保安全无死角
  • 专业化分工:不同类型的威胁由专门的检查机制处理
  • 灵活配置能力:可根据安全需求调整检查严格程度
  • 高效处理性能:在内核空间直接处理,减少性能开销

防火墙工作原理

Netfilter框架的核心概念

  • 钩子点(Hooks):数据包处理路径中的关键节点
  • 表(Tables):不同功能的规则集合
  • 链(Chains):规则的有序列表
  • 规则(Rules):具体的过滤条件和动作

防火墙的安全作用

  1. 访问控制:控制哪些连接可以建立
  2. 流量过滤:基于各种条件过滤数据包
  3. 网络地址转换:实现NAT功能
  4. 连接跟踪:维护连接状态信息
  5. 日志记录:记录网络活动用于审计

现代防火墙的发展趋势

  • 状态检测:跟踪连接状态,提供更智能的过滤
  • 应用层感知:能够识别和控制特定应用的流量
  • 集成化管理:与其他安全工具集成,提供统一管理界面

数据包处理流程

安检流程类比: 数据包在Linux系统中的处理就像旅客在机场的安检流程:

  • PREROUTING = 入境检查,决定是本地处理还是转发
  • INPUT = 入境安检,检查进入本机的数据包
  • FORWARD = 中转检查,检查需要转发的数据包
  • OUTPUT = 出境安检,检查本机发出的数据包
  • POSTROUTING = 出境检查,最后的路由处理

🔥 UFW 防火墙管理

核心概念

UFW官方定义

根据Ubuntu官方文档,UFW(Uncomplicated Firewall)是一个简化的防火墙配置工具,专为Ubuntu系统设计,提供简单易用的命令行界面来管理复杂的iptables规则。它遵循"约定优于配置"的设计原则,为用户提供安全的默认设置。

科学工程化类比

UFW就像现代化的智能家居安防系统

  • 简化界面 = 手机APP控制,无需了解复杂的电路原理
  • 预设模式 = 一键设置"在家"、"外出"、"睡眠"等安全模式
  • 自动化管理 = 系统自动处理复杂的传感器协调和报警逻辑
  • 专业后端 = 底层仍是专业的安防设备(iptables),但用户无需直接操作

UFW的设计理念

  • 简化操作:用简单的命令替代复杂的iptables语法
  • 安全默认:采用安全的默认配置策略
  • 向后兼容:底层仍使用iptables,保持兼容性
  • 配置持久化:自动保存配置,重启后生效

UFW与iptables的关系: UFW实际上是iptables的前端工具,它将用户友好的命令转换为相应的iptables规则。这种设计既保持了iptables的强大功能,又提供了简单易用的操作界面。

🛠️ 实验环境准备

环境要求

  • Ubuntu 24.10 Server(虚拟机或物理机)
  • 至少1GB可用内存
  • 网络连接正常
  • sudo权限账户

安全提醒

⚠️ 重要:防火墙配置错误可能导致失去远程连接!

  • 如果是远程服务器,请确保有控制台访问权限
  • 建议先在虚拟机中练习
  • 每次修改前备份配置文件
  • 测试规则前先添加允许当前连接的规则

快速环境检查

请登录以使用远程命令功能
# 检查当前网络状态
$ip addr show
$sudo ufw status
$sudo iptables -L -n

预期输出说明

  • ip addr show:显示网络接口和IP地址
  • sudo ufw status:显示UFW当前状态(可能是inactive)
  • sudo iptables -L -n:显示当前iptables规则

UFW 基础操作

安装和状态检查

请登录以使用远程命令功能
# 检查UFW是否已安装(Ubuntu通常预装)
$dpkg -l | grep ufw
请登录以使用远程命令功能
# 如果未安装,则安装UFW
$sudo apt update
$sudo apt install ufw
请登录以使用远程命令功能
# 查看UFW状态(多种详细程度)
$sudo ufw status # 基本状态
$sudo ufw status verbose # 详细状态,包括默认策略
$sudo ufw status numbered # 带编号的规则列表

状态输出解读

  • Status: inactive = UFW未启用
  • Status: active = UFW已启用并生效
  • Default: deny (incoming), allow (outgoing) = 默认策略

启用和禁用防火墙

请登录以使用远程命令功能
# 启用UFW(首次启用会提示可能中断SSH连接)
$sudo ufw enable

警告:首次启用UFW时,如果没有允许SSH的规则,可能会中断远程连接!建议先添加SSH规则:

BASH
sudo ufw allow ssh
sudo ufw enable
请登录以使用远程命令功能
# 禁用UFW(紧急情况下恢复访问)
$sudo ufw disable
请登录以使用远程命令功能
# 重置UFW规则(清除所有自定义规则)
$sudo ufw --force reset

UFW 基本规则配置

默认策略设置

安全策略类比: 默认策略就像小区的门禁管理规则

  • deny incoming = 外来人员默认不允许进入(除非在白名单中)
  • allow outgoing = 小区居民可以自由外出
  • deny forward = 不允许外来人员通过小区到其他地方
请登录以使用远程命令功能
# 设置安全的默认策略
$sudo ufw default deny incoming # 拒绝所有入站连接
$sudo ufw default allow outgoing # 允许所有出站连接
$sudo ufw default deny forward # 拒绝转发(路由器功能)
请登录以使用远程命令功能
# 查看当前默认策略
$sudo ufw status verbose

预期输出

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (forward)

允许和拒绝规则

规则类型说明

  • allow = 允许连接(静默通过)
  • deny = 拒绝连接(静默丢弃,不回复)
  • reject = 拒绝连接(主动回复拒绝消息)
请登录以使用远程命令功能
# 允许常用服务端口
$sudo ufw allow 22 # 允许 SSH(远程管理)
$sudo ufw allow 80 # 允许 HTTP(网页服务)
$sudo ufw allow 443 # 允许 HTTPS(安全网页)
$sudo ufw allow 53 # 允许 DNS(域名解析)

验证规则添加

请登录以使用远程命令功能
# 查看已添加的规则
$sudo ufw status numbered
请登录以使用远程命令功能
# 允许端口范围(适用于应用程序端口组)
$sudo ufw allow 1000:2000/tcp # TCP 端口范围
$sudo ufw allow 1000:2000/udp # UDP 端口范围
请登录以使用远程命令功能
# 使用服务名称(更直观易懂)
$sudo ufw allow ssh # 允许 SSH 服务
$sudo ufw allow http # 允许 HTTP 服务
$sudo ufw allow https # 允许 HTTPS 服务
请登录以使用远程命令功能
# 拒绝不安全的服务
$sudo ufw deny 23 # 拒绝 Telnet(不安全的远程协议)
$sudo ufw reject 25 # 拒绝 SMTP(防止垃圾邮件中继)

deny vs reject 的区别

  • deny:静默丢弃数据包,攻击者不知道端口是否存在
  • reject:主动回复拒绝消息,让对方知道端口被拒绝

基于 IP 地址的规则

IP访问控制类比: 就像小区的访客管理系统

  • 特定IP允许 = VIP住户,可以随时进入
  • 网段允许 = 同一小区的邻居,相互信任
  • IP拒绝 = 黑名单用户,禁止进入
请登录以使用远程命令功能
# 允许特定IP的所有访问
$sudo ufw allow from 192.168.1.100
$echo "已允许 192.168.1.100 的所有访问"
# 允许整个内网网段
$sudo ufw allow from 192.168.1.0/24
$echo "已允许内网 192.168.1.0/24 的访问"
请登录以使用远程命令功能
# 精确控制:特定IP访问特定端口
$sudo ufw allow from 192.168.1.100 to any port 22
$echo "只允许 192.168.1.100 通过SSH访问"
# 拒绝可疑IP
$sudo ufw deny from 203.0.113.100
$echo "已拒绝可疑IP 203.0.113.100"
请登录以使用远程命令功能
# 防暴力破解:限制连接频率
$sudo ufw limit ssh # 限制SSH连接频率
$sudo ufw limit 22/tcp # 同样效果,使用端口号

limit规则说明

  • 在30秒内超过6次连接尝试的IP将被临时封禁
  • 这是防止SSH暴力破解的有效方法

⚠️ 常见错误与解决方案

错误1:UFW规则语法错误

错误信息

ERROR: Bad port

原因分析:端口号格式不正确或超出范围

解决步骤

请登录以使用远程命令功能
# 检查端口号是否在有效范围内(1-65535)
$sudo ufw allow 80 # 正确
$sudo ufw allow 70000 # 错误:端口号超出范围

预防措施

  • 使用标准服务名称:ssh, http, https
  • 端口号范围:1-65535
  • 端口范围格式:1000:2000/tcp

错误2:SSH连接中断

症状:启用UFW后无法SSH连接

紧急恢复方案

请登录以使用远程命令功能
# 如果有控制台访问权限
$sudo ufw disable # 临时禁用防火墙
$sudo ufw allow ssh # 添加SSH规则
$sudo ufw enable # 重新启用

预防措施

  • 启用UFW前先添加SSH规则
  • 在本地测试环境中练习
  • 保持控制台访问权限

UFW 高级配置

应用程序配置文件

应用配置文件类比: 就像预设的安全模板,针对不同应用提供最佳的安全配置:

  • Apache Full = Web服务器完整配置(HTTP + HTTPS)
  • OpenSSH = SSH服务安全配置
  • Nginx Full = Nginx服务器完整配置
请登录以使用远程命令功能
# 查看系统中可用的应用配置
$sudo ufw app list

常见应用配置

  • Apache, Apache Full, Apache Secure
  • Nginx HTTP, Nginx HTTPS, Nginx Full
  • OpenSSH
  • Postfix, Postfix SMTPS, Postfix Submission
请登录以使用远程命令功能
# 查看特定应用配置的详细信息
$sudo ufw app info 'Apache Full'
$sudo ufw app info 'OpenSSH'
请登录以使用远程命令功能
# 使用应用配置(推荐方式)
$sudo ufw allow 'Apache Full' # 允许HTTP和HTTPS
$sudo ufw allow 'OpenSSH' # 允许SSH
$sudo ufw allow 'Nginx Full' # 允许Nginx的HTTP和HTTPS

应用配置的优势

  • 自动包含相关端口
  • 遵循最佳安全实践
  • 配置更新时自动同步

自定义应用配置

请登录以使用远程命令功能
# 创建自定义应用配置
$sudo nano /etc/ufw/applications.d/myapp

配置文件内容示例

INI
[MyApp]
title=My Custom Application
description=Custom application ports
ports=8080,8443/tcp
请登录以使用远程命令功能
# 重新加载应用配置
$sudo ufw app update MyApp
# 使用自定义配置
$sudo ufw allow MyApp

UFW 日志配置

请登录以使用远程命令功能
# 启用日志
$sudo ufw logging on
$sudo ufw logging medium # 设置日志级别
请登录以使用远程命令功能
# 日志级别选项
$sudo ufw logging off # 关闭日志
$sudo ufw logging low # 低级别日志
$sudo ufw logging medium # 中级别日志
$sudo ufw logging high # 高级别日志
$sudo ufw logging full # 完整日志
请登录以使用远程命令功能
# 查看日志
$sudo tail -f /var/log/ufw.log
$sudo grep UFW /var/log/syslog

UFW 规则管理

BASH
# 查看规则编号
sudo ufw status numbered
 
# 删除规则
sudo ufw delete 2          # 按编号删除
sudo ufw delete allow 80   # 按规则删除
 
# 插入规则到特定位置
sudo ufw insert 1 allow from 192.168.1.0/24
 
# 替换规则
sudo ufw --force delete 2
sudo ufw insert 2 allow from 10.0.0.0/8 to any port 22

⚙️ iptables 高级配置

核心概念

iptables官方定义

根据Linux内核文档和iptables手册,iptables是一个用户空间的命令行工具,用于配置Linux内核防火墙(由Netfilter框架实现)。它允许系统管理员配置IP数据包过滤规则,这些规则存储在内核空间的不同表中,每个表包含多个链,每个链包含一系列规则。

科学工程化类比

iptables就像现代化工厂的质量控制系统

  • 表(Tables) = 不同的检测车间(过滤车间、包装车间、修改车间)
  • 链(Chains) = 生产流水线上的检测点(进料检测、过程检测、出厂检测)
  • 规则(Rules) = 具体的质量标准和处理方式
  • 目标(Targets) = 检测结果的处理动作(通过、拒绝、返工)

分层检测的工程优势

  • 专业化分工:不同类型的检测由专门的车间处理
  • 流程化管理:按照固定顺序进行检测,确保不遗漏
  • 灵活配置:可以根据产品要求调整检测标准
  • 高效处理:在内核空间直接处理,性能优异

iptables 基础概念

iptables的核心架构

  • 表(Tables):按功能分类的规则集合
  • 链(Chains):规则的执行序列
  • 规则(Rules):匹配条件和执行动作的组合
  • 目标(Targets):规则匹配后的处理动作

四个主要表的功能

  1. filter表:默认表,负责数据包过滤(质量检测车间)
  2. nat表:网络地址转换功能(地址标签车间)
  3. mangle表:数据包修改功能(产品修改车间)
  4. raw表:连接跟踪控制(原料预处理车间)

规则匹配原理: iptables按照规则在链中的顺序逐一检查数据包,一旦找到匹配的规则就执行相应的动作。这种设计要求管理员合理安排规则顺序以确保正确的过滤效果和最佳性能。

表和链的关系

工厂车间类比: 不同的表就像工厂中的专业化车间,每个车间在生产流程的不同阶段发挥作用:

表的优先级顺序

  1. raw → 2. mangle → 3. nat → 4. filter

链的执行顺序

  • 入站:PREROUTING → INPUT
  • 转发:PREROUTING → FORWARD → POSTROUTING
  • 出站:OUTPUT → POSTROUTING

iptables 基本操作

BASH
# 查看规则
sudo iptables -L                    # 查看 filter 表
sudo iptables -L -n                 # 不解析域名
sudo iptables -L -v                 # 详细信息
sudo iptables -L -t nat             # 查看 nat 表
 
# 清空规则
sudo iptables -F                    # 清空 filter 表
sudo iptables -F -t nat             # 清空 nat 表
sudo iptables -X                    # 删除自定义链
 
# 设置默认策略
sudo iptables -P INPUT DROP         # 默认拒绝入站
sudo iptables -P FORWARD DROP       # 默认拒绝转发
sudo iptables -P OUTPUT ACCEPT      # 默认允许出站

iptables 规则配置

基本规则示例

BASH
# 允许本地回环
sudo iptables -A INPUT -i lo -j ACCEPT
 
# 允许已建立的连接
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 
# 允许 SSH
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
 
# 允许 HTTP 和 HTTPS
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
 
# 允许 DNS
sudo iptables -A INPUT -p udp --dport 53 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 53 -j ACCEPT
 
# 允许 ICMP(ping)
sudo iptables -A INPUT -p icmp -j ACCEPT

基于源地址的规则

BASH
# 允许特定 IP 访问
sudo iptables -A INPUT -s 192.168.1.100 -j ACCEPT
 
# 允许特定网段访问
sudo iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
 
# 拒绝特定 IP
sudo iptables -A INPUT -s 203.0.113.100 -j DROP
 
# 允许特定 IP 访问特定端口
sudo iptables -A INPUT -s 192.168.1.100 -p tcp --dport 22 -j ACCEPT

端口范围和多端口规则

BASH
# 端口范围
sudo iptables -A INPUT -p tcp --dport 1000:2000 -j ACCEPT
 
# 多端口(需要 multiport 模块)
sudo iptables -A INPUT -p tcp -m multiport --dports 80,443,8080 -j ACCEPT
sudo iptables -A INPUT -p tcp -m multiport --sports 1024:65535 -j ACCEPT

iptables 高级功能

连接限制和速率控制

BASH
# 限制连接数(防止 DDoS)
sudo iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 20 -j DROP
 
# 限制连接速率
sudo iptables -A INPUT -p tcp --dport 22 -m limit --limit 3/min --limit-burst 3 -j ACCEPT
 
# 防止端口扫描
sudo iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
sudo iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

NAT 配置

BASH
# SNAT(源地址转换)
sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 203.0.113.1
 
# MASQUERADE(动态 SNAT)
sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
 
# DNAT(目标地址转换)
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:8080
 
# 端口转发
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80

自定义链

BASH
# 创建自定义链
sudo iptables -N CUSTOM_CHAIN
 
# 向自定义链添加规则
sudo iptables -A CUSTOM_CHAIN -s 192.168.1.0/24 -j ACCEPT
sudo iptables -A CUSTOM_CHAIN -j DROP
 
# 跳转到自定义链
sudo iptables -A INPUT -p tcp --dport 80 -j CUSTOM_CHAIN
 
# 删除自定义链
sudo iptables -F CUSTOM_CHAIN
sudo iptables -X CUSTOM_CHAIN

🔒 防火墙安全策略

基础安全策略

防火墙安全策略的制定需要平衡安全性和可用性。一个好的防火墙策略应该基于最小权限原则,只允许必要的网络通信,同时确保业务系统的正常运行。

安全策略设计原则

  1. 默认拒绝:除非明确允许,否则拒绝所有连接
  2. 最小权限:只开放必要的端口和服务
  3. 分层防护:结合多种安全措施构建纵深防御
  4. 定期审查:定期检查和更新防火墙规则
  5. 日志监控:记录和分析网络活动

威胁模型分析: 在制定防火墙策略前,需要分析可能面临的威胁:

  • 外部攻击:来自互联网的恶意访问
  • 内部威胁:内网用户的不当行为
  • 服务漏洞:应用程序的安全缺陷
  • 配置错误:人为的配置失误

最小权限原则

最小权限原则是信息安全的基本原则之一,在防火墙配置中体现为只允许必要的网络连接,拒绝所有其他访问。

BASH
# 1. 设置严格的默认策略
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT DROP
 
# 2. 只允许必要的服务
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPT
 
# 3. 允许必要的出站连接
sudo iptables -A OUTPUT -o lo -j ACCEPT
sudo iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
sudo iptables -A OUTPUT -p udp --dport 53 -j ACCEPT

防护策略配置

BASH
# 防止 SYN 洪水攻击
echo 1 | sudo tee /proc/sys/net/ipv4/tcp_syncookies
sudo iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT
 
# 防止 ping 洪水攻击
sudo iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
 
# 防止端口扫描
sudo iptables -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
sudo iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
 
# 记录可疑活动
sudo iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7

防火墙规则优化

规则顺序优化

性能优化配置

BASH
# 1. 将最常匹配的规则放在前面
sudo iptables -I INPUT 1 -m state --state ESTABLISHED,RELATED -j ACCEPT
 
# 2. 使用 conntrack 模块优化
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
 
# 3. 合并相似规则
sudo iptables -A INPUT -p tcp -m multiport --dports 80,443,8080 -j ACCEPT
 
# 4. 使用 ipset 处理大量 IP
sudo apt install ipset
sudo ipset create blacklist hash:ip
sudo ipset add blacklist 203.0.113.100
sudo iptables -A INPUT -m set --match-set blacklist src -j DROP

📊 防火墙监控和日志分析

防火墙日志配置

BASH
# 配置 rsyslog 处理防火墙日志
sudo nano /etc/rsyslog.d/10-iptables.conf
BASH
# /etc/rsyslog.d/10-iptables.conf
:msg,contains,"iptables denied" /var/log/iptables.log
& stop
BASH
# 重启 rsyslog 服务
sudo systemctl restart rsyslog
 
# 创建日志轮转配置
sudo nano /etc/logrotate.d/iptables
BASH
/var/log/iptables.log {
    daily
    missingok
    rotate 7
    compress
    notifempty
    create 0640 root root
    postrotate
        /usr/lib/rsyslog/rsyslog-rotate
    endscript
}

日志分析和监控

BASH
# 实时监控防火墙日志
sudo tail -f /var/log/iptables.log
 
# 分析被拒绝的连接
sudo grep "iptables denied" /var/log/iptables.log | head -20
 
# 统计攻击来源
sudo grep "iptables denied" /var/log/iptables.log | awk '{print $12}' | sort | uniq -c | sort -nr
 
# 分析攻击端口
sudo grep "iptables denied" /var/log/iptables.log | grep -o "DPT=[0-9]*" | sort | uniq -c | sort -nr

自动化监控脚本

BASH
# 创建监控脚本
sudo nano /usr/local/bin/firewall-monitor.sh
BASH
#!/bin/bash
# 防火墙监控脚本
 
LOG_FILE="/var/log/iptables.log"
ALERT_EMAIL="admin@example.com"
THRESHOLD=100
 
# 检查最近1小时的攻击次数
ATTACKS=$(grep "$(date -d '1 hour ago' '+%b %d %H')" $LOG_FILE | wc -l)
 
if [ $ATTACKS -gt $THRESHOLD ]; then
    echo "警告:检测到大量攻击尝试 ($ATTACKS 次)" | mail -s "防火墙警报" $ALERT_EMAIL
fi
 
# 自动封禁频繁攻击的IP
grep "$(date '+%b %d %H')" $LOG_FILE | awk '{print $12}' | sort | uniq -c | \
while read count ip; do
    if [ $count -gt 50 ]; then
        # 检查IP是否已被封禁
        if ! iptables -L INPUT -n | grep -q $ip; then
            iptables -I INPUT -s $ip -j DROP
            echo "$(date): 自动封禁IP $ip (攻击次数: $count)" >> /var/log/auto-ban.log
        fi
    fi
done
BASH
# 设置执行权限
sudo chmod +x /usr/local/bin/firewall-monitor.sh
 
# 添加到定时任务
sudo crontab -e
# 每小时执行一次
0 * * * * /usr/local/bin/firewall-monitor.sh

🛠️ 防火墙规则持久化

UFW 规则持久化

BASH
# UFW 规则自动持久化
# 规则保存在以下位置:
ls -la /etc/ufw/
 
# 备份 UFW 配置
sudo cp -r /etc/ufw /etc/ufw.backup
 
# 恢复 UFW 配置
sudo cp -r /etc/ufw.backup/* /etc/ufw/
sudo ufw reload

iptables 规则持久化

BASH
# 安装 iptables-persistent
sudo apt install iptables-persistent
 
# 保存当前规则
sudo iptables-save > /etc/iptables/rules.v4
sudo ip6tables-save > /etc/iptables/rules.v6
 
# 手动恢复规则
sudo iptables-restore < /etc/iptables/rules.v4
sudo ip6tables-restore < /etc/iptables/rules.v6
 
# 创建规则备份脚本
sudo nano /usr/local/bin/iptables-backup.sh
BASH
#!/bin/bash
# iptables 规则备份脚本
 
BACKUP_DIR="/etc/iptables/backup"
DATE=$(date +%Y%m%d_%H%M%S)
 
# 创建备份目录
mkdir -p $BACKUP_DIR
 
# 备份当前规则
iptables-save > $BACKUP_DIR/rules.v4.$DATE
ip6tables-save > $BACKUP_DIR/rules.v6.$DATE
 
# 保留最近7天的备份
find $BACKUP_DIR -name "rules.v4.*" -mtime +7 -delete
find $BACKUP_DIR -name "rules.v6.*" -mtime +7 -delete
 
echo "$(date): iptables 规则已备份到 $BACKUP_DIR"

🤔 思考题

  1. 为什么说防火墙是网络安全的"第一道防线"?它在整个安全体系中发挥什么作用?
  2. UFW和iptables各有什么优缺点?在什么场景下应该选择哪种工具?
  3. 如何设计一个既安全又不影响业务的防火墙策略?需要考虑哪些因素?
  4. 防火墙日志分析能帮助我们发现哪些安全问题?如何建立有效的监控机制?

📚 扩展阅读

下一步学习

在掌握了防火墙管理后,建议继续学习:

  • 网络故障排除:掌握网络问题诊断和解决方法
  • 网络监控运维:学习网络性能监控和自动化管理
  • 系统安全加固:深入学习Linux系统安全配置
  • 容器网络安全:了解现代容器环境的网络安全

💡 提示:防火墙配置需要谨慎操作,建议在测试环境中充分验证后再应用到生产环境。记住,安全性和可用性需要平衡,过度严格的规则可能影响正常业务运行。

实践练习

通过实际操作来巩固所学知识,在真实的系统化的训练环境中练习本教程的内容。

Linux 防火墙管理 - UFW 与 iptables 安全配置 - 实践练习

待学习
ID: LINUX_02_FIREWALL_MANAGEMENT
未登录
训练服务器:
训练内容:

基于 Linux 防火墙管理 - UFW 与 iptables 安全配置 教程的实践练习