一文搞懂 iptables 与 ufw:配置教程+优缺点+选择指南

3327 字
17 分钟
一文搞懂 iptables 与 ufw:配置教程+优缺点+选择指南

一、技术概述#

1.1 iptables:Linux防火墙的核心引擎#

iptables是Linux系统中最基础、最强大的网络数据包过滤工具,自Linux内核2.4版本起成为核心组件。它的设计目标是提供一个灵活、可扩展的防火墙框架,允许系统管理员精确控制进出网络接口的数据包。

核心设计理念

  • 基于规则的包过滤机制

  • 支持网络地址转换(NAT)

  • 提供连接跟踪功能(conntrack)

  • 高度可扩展的模块化架构

适用场景

  • 需要精细控制网络流量的服务器

  • 复杂的网络拓扑环境

  • 需要自定义防火墙策略的高级用户

  • 企业级安全防护需求

1.2 UFW:简化防火墙管理的前端工具#

UFW(Uncomplicated Firewall,“简单防火墙”)是一个基于iptables的前端管理工具,最初为Ubuntu系统开发,现已广泛应用于各大Linux发行版。它的设计目标是降低防火墙配置的门槛,让普通用户也能轻松管理防火墙规则。

核心设计理念

  • 简化命令语法,提升易用性

  • 提供人性化的规则管理方式

  • 支持应用配置文件(App Profiles)

  • 兼容iptables的底层功能

适用场景

  • 个人桌面系统

  • 中小型服务器的快速配置

  • 初学者学习防火墙管理

  • 需要快速部署安全策略的场景

1.3 两者关系#

UFW本质上是对iptables的封装和抽象。它通过简化的命令接口,将用户输入的配置翻译成复杂的iptables规则并执行。可以理解为:iptables是防火墙的底层引擎,UFW是让这台引擎更容易操作的驾驶界面。所有UFW的操作最终都会转换为iptables规则存储在系统中。

二、核心功能对比#

2.1 易用性对比#

表格

维度iptablesUFW
学习曲线陡峭,需要理解复杂的链、表、规则概念平缓,命令直观易懂
命令语法复杂,参数众多简洁,贴近自然语言
配置速度慢,需要精确指定每个参数快,预设常见场景
错误容忍度低,语法错误可能导致规则失效高,提供友好的错误提示

2.2 功能复杂度对比#

iptables的优势

  • 无限的灵活性,可实现任意复杂的防火墙策略

  • 支持高级功能如速率限制、连接跟踪标记、基于状态的过滤

  • 可直接操作内核网络栈,性能最优

  • 支持自定义链,便于规则组织和管理

UFW的优势

  • 内置常用服务配置文件(SSH、HTTP、HTTPS等)

  • 自动处理IPv4和IPv6规则

  • 提供状态查看和规则序号管理

  • 支持规则注释,便于维护

2.3 配置方式对比#

iptables配置方式

# 需要手动指定表、链、动作、协议、端口等
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

UFW配置方式

# 简化的语义化命令
ufw allow 22/tcp

2.4 各自的局限性#

iptables局限性

  • 规则管理复杂,容易出错

  • 规则按顺序匹配,调整顺序需要手动操作

  • 没有内置的规则注释机制

  • 配置文件格式不直观

UFW局限性

  • 不支持某些iptables的高级特性

  • 复杂场景下可能需要回退到iptables

  • 某些网络功能(如复杂的NAT配置)支持有限

  • 故障排查时需要查看底层的iptables规则

三、iptables基础配置#

3.1 基本概念#

表(Tables) :iptables将规则组织到不同的表中,每个表用于特定的目的:

  • filter表:默认表,用于包过滤(INPUT、OUTPUT、FORWARD链)

  • nat表:用于网络地址转换(PREROUTING、OUTPUT、POSTROUTING链)

  • mangle表:用于修改数据包的TOS、TTL等字段

  • raw表:用于配置连接跟踪

链(Chains) :规则按顺序排列在链中,数据包经过链时依次匹配规则:

  • INPUT链:处理进入本机的数据包

  • OUTPUT链:处理从本机发出的数据包

  • FORWARD链:处理需要转发的数据包

规则(Rules) :每条规则包含匹配条件和处理动作:

  • 匹配条件:协议、端口、IP地址、连接状态等

  • 处理动作:ACCEPT(接受)、DROP(丢弃)、REJECT(拒绝)等

3.2 常用基础命令#

查看现有规则

# 列出filter表所有规则(带行号)
iptables -L -n -v --line-numbers
# 查看特定链的规则
iptables -L INPUT -n -v
# 以数字形式显示IP和端口,便于脚本处理
iptables -S
# 查看规则计数器(显示匹配的数据包和字节数)
iptables -L -n -v -x

添加规则

# 在INPUT链末尾添加允许SSH访问的规则
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 在INPUT链开头插入规则(使用-I参数)
iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT
# 允许特定IP访问
iptables -A INPUT -s 192.168.1.100 -j ACCEPT
# 允许来自特定网段的数据包
iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT

删除规则

# 根据行号删除规则
iptables -D INPUT 3
# 根据规则内容删除
iptables -D INPUT -p tcp --dport 22 -j ACCEPT
# 清空特定链的所有规则
iptables -F INPUT
# 清空所有表的所有规则(谨慎使用!)
iptables -F

设置默认策略

# 设置INPUT链默认策略为DROP(拒绝所有未匹配的包)
iptables -P INPUT DROP
# 设置OUTPUT链默认策略为ACCEPT
iptables -P OUTPUT ACCEPT
# 设置FORWARD链默认策略为DROP
iptables -P FORWARD DROP

3.3 开放特定端口配置示例#

开放SSH端口

# 允许TCP协议的22端口(SSH)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 限制SSH只允许特定IP访问
iptables -A INPUT -p tcp -s 192.168.1.100 --dport 22 -j ACCEPT
# 允许SSH并记录连接日志
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j LOG --log-prefix "SSH attempt: "
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

开放HTTP/HTTPS端口

# 允许HTTP(端口80)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# 允许HTTPS(端口443)
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 允许HTTP和HTTPS的简洁写法
iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT

限制IP访问配置

# 拒绝特定IP的所有访问
iptables -A INPUT -s 10.0.0.50 -j DROP
# 拒绝某个网段的访问
iptables -A INPUT -s 10.0.0.0/24 -j REJECT
# 白名单模式:先拒绝所有,再允许特定IP
iptables -A INPUT -j DROP # 这条规则会拒绝所有前面的规则未匹配的包
iptables -I INPUT 1 -s 192.168.1.100 -j ACCEPT # 插入到开头
# 黑名单模式:允许所有,拒绝特定IP
iptables -A INPUT -j ACCEPT
iptables -A INPUT -s 10.0.0.50 -j DROP

四、UFW基础配置#

4.1 UFW的简化命令体系#

UFW的设计哲学是”约定优于配置”,它预置了常用场景的配置模板,并通过语义化的命令语法降低学习门槛。命令格式通常为: ufw [动作] [目标] [协议]

4.2 常用基础命令#

启用/禁用防火墙

# 启用UFW防火墙
sudo ufw enable
# 禁用UFW防火墙
sudo ufw disable
# 重载防火墙规则(不中断现有连接)
sudo ufw reload
# 重置防火墙到默认状态
sudo ufw reset

查看状态

# 查看防火墙状态和规则
sudo ufw status verbose
# 查看编号格式的规则(便于删除)
sudo ufw status numbered
# 查看详细配置信息
sudo ufw show added

允许/拒绝服务

# 允许SSH服务
sudo ufw allow ssh
# 允许HTTP服务
sudo ufw allow http
# 允许HTTPS服务
sudo ufw allow https
# 拒绝特定服务
sudo ufw deny ftp

允许/拒绝端口

# 允许特定TCP端口
sudo ufw allow 22/tcp
# 允许特定UDP端口
sudo ufw allow 53/udp
# 允许端口范围
sudo ufw allow 1000:2000/tcp
# 允许来自特定IP的端口访问
sudo ufw allow from 192.168.1.100 to any port 3306

4.3 端口转发配置#

UFW支持简单的端口转发功能,配置编辑 /etc/ufw/before.rules 文件:

# 编辑UFW配置文件
sudo nano /etc/ufw/before.rules
# 在文件开头添加以下配置(在*nat之前)
*nat
:PREROUTING ACCEPT [0:0]
# 将外部80端口的流量转发到内部8080端口
-A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
COMMIT
# 保存并重新加载UFW
sudo ufw reload

4.4 应用配置文件#

UFW提供应用配置文件(App Profiles)来简化常见服务的配置:

# 列出所有可用的应用配置文件
sudo ufw app list
# 查看特定应用的详细信息
sudo ufw app info Apache
# 允许应用的所有端口
sudo ufw allow Apache
# 创建自定义应用配置文件
sudo nano /etc/ufw/applications.d/myapp

自定义应用配置文件示例

[myapp]
title=My Custom Application
description=Ports for my custom application
ports=8080/tcp,8443/tcp|9000/udp

五、高级应用场景#

5.1 iptables实现Web服务器安全配置#

以下是一个典型的Web服务器防火墙策略:

#!/bin/bash
# Web服务器防火墙配置脚本
# 1. 清空现有规则
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
# 2. 设置默认策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# 3. 允许本地回环接口
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# 4. 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 5. 允许SSH(限制速率防止暴力破解)
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 6. 允许HTTP和HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 7. 防止SYN洪水攻击
iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT
# 8. 防止ICMP洪水攻击
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
# 9. 记录被拒绝的连接
iptables -A INPUT -j LOG --log-prefix "FIREWALL: "
# 10. 拒绝所有其他连接(默认策略已设置为DROP)

5.2 UFW实现Web服务器安全配置#

相同的策略用UFW实现:

#!/bin/bash
# Web服务器UFW配置脚本
# 1. 重置UFW到默认状态
sudo ufw --force reset
# 2. 设置默认策略
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 3. 允许SSH(限制速率)
sudo ufw limit 22/tcp
# 4. 允许HTTP和HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# 5. 启用UFW
sudo ufw --force enable
# 6. 查看状态
sudo ufw status verbose

5.3 保存配置确保重启后生效#

iptables保存方法

在Ubuntu/Debian系统上:

# 安装iptables-persistent包
sudo apt-get install iptables-persistent
# 保存当前规则
sudo netfilter-persistent save
# 手动保存规则到文件
sudo iptables-save > /etc/iptables/rules.v4
sudo ip6tables-save > /etc/iptables/rules.v6
# 恢复规则
sudo iptables-restore < /etc/iptables/rules.v4

在CentOS/RHEL系统上:

# 保存规则
service iptables save
# 或使用iptables-save命令
iptables-save > /etc/sysconfig/iptables

UFW保存方法

UFW会自动保存配置,但需要确保配置正确:

# 启用UFW时自动保存
sudo ufw enable
# 手动保存配置
sudo cp /etc/ufw/user.rules /etc/ufw/user.rules.backup
# 检查配置文件
sudo cat /etc/ufw/user.rules

六、最佳实践建议#

6.1 防火墙规则设计基本原则#

  1. 最小权限原则:只开放必要的端口和服务,默认拒绝所有其他访问

  2. 规则顺序很重要:将最常用的规则放在前面,提高匹配效率

  3. 使用白名单而非黑名单:明确允许访问的源比禁止特定源更安全

  4. 记录关键事件:对被拒绝的连接进行日志记录,便于安全审计

  5. 定期审查规则:删除不再使用的规则,避免规则膨胀

  6. 测试后再部署:在生产环境部署前,在测试环境验证规则

6.2 常见错误及排查方法#

错误1:SSH连接被意外阻断

# 问题:配置防火墙后无法SSH登录
# 解决:在启用防火墙前,确保SSH规则已生效
# 使用at命令延迟启用防火墙,给自己留出时间测试
sudo at -f <(echo "ufw enable") now + 5 minutes

错误2:规则顺序错误

# 问题:规则不按预期生效
# 解决:查看规则顺序和匹配情况
iptables -L -n -v --line-numbers
# 检查规则匹配计数器
iptables -L INPUT -n -v -x

错误3:忘记保存规则

# 问题:重启后规则丢失
# 解决:使用iptables-persistent或创建启动脚本
# 将规则保存脚本添加到rc.local或systemd服务

错误4:IPv4和IPv6不一致

# 问题:某些服务在IPv6环境下无法访问
# 解决:确保同时配置iptables和ip6tables规则
# 或在UFW中明确启用IPv6支持
sudo nano /etc/default/ufw # 设置IPV6=yes

6.3 安全加固建议#

  1. 定期更新系统和防火墙软件:及时获取安全补丁

  2. 使用Fail2ban辅助防护:自动封禁恶意IP地址

  3. 监控防火墙日志:使用logwatch或自定义脚本分析异常

  4. 实施网络分段:在不同网络区域应用不同的防火墙策略

  5. 定期渗透测试:验证防火墙规则的有效性

  6. 备份配置文件:保存工作正常的配置,便于快速恢复

6.4 性能优化建议#

  1. 优化规则顺序:将高流量规则放在前面

  2. 使用状态检测:避免重复检查已建立的连接

  3. 限制规则数量:过多的规则会影响性能

  4. 使用连接跟踪:利用state模块提高匹配效率

  5. 定期清理过期规则:删除不再需要的规则

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

一文搞懂 iptables 与 ufw:配置教程+优缺点+选择指南
https://www.kshare.top/posts/一文搞懂-iptables-与-ufw配置教程优缺点选择指南/
作者
Kshare
发布于
2026-03-07
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
Kshare
Hello, I'm Kshare.
公告
欢迎来到Kshare站点!近期站点进行升级,欢迎访问和收藏站点!
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
137
分类
12
标签
59
总字数
333,011
运行时长
0
最后活动
0 天前

文章目录