防火墙配置:UFW、iptables 与安全策略设计
凌晨三点,服务器报警短信把我从睡梦中拽醒——某个测试环境的数据库被扫描到了异常流量。登上服务器一看,防火墙居然处于关闭状态。赶紧打开,发现规则列表里全是乱七八糟的测试配置,SSH 端口也没做速率限制。说实话,当时挺崩溃的。
这事儿让我意识到一个现实问题:很多人(包括我自己)在配置防火墙时,要么随手抄几个命令完事,要么压根不知道 UFW 和 iptables 的区别,更别提系统地设计安全策略了。今天就好好聊聊这个话题。
Linux 防火墙到底是怎么回事
说防火墙之前,先理清楚一个常被混淆的概念:Netfilter。很多人以为 iptables 就是防火墙,其实不对。
Netfilter 是 Linux 内核里的网络包处理框架。它在内核协议栈的关键位置埋了几个”钩子”(hooks),每个经过的网络包都会触发这些钩子,你可以在这里挂载自己的处理逻辑——比如拦截、修改、记录。
而 iptables、UFW、nftables 这些工具,只是用户态的配置接口。你用它们写的规则,最终都会转换成 Netfilter 能理解的格式,在内核里执行。
打个比方:Netfilter 是埋在路基下的水管阀门系统,iptables 是那个老式的手动旋钮,UFW 就是个带触摸屏的现代控制面板——都能开关阀门,但操作方式完全不同。
用户态工具的演进
Linux 防火墙工具这几年变化挺大:
- iptables:老牌工具,2000 年左右就有了。直接操作 Netfilter,语法复杂但功能强大。
- nftables:iptables 的现代替代,2014 年引入。语法更统一,性能更好,新版本 Ubuntu 已经默认用它做后端。
- UFW(Uncomplicated Firewall):2008 年 Ubuntu 推出的简化工具。底层还是 iptables/nftables,但命令简单到让人感动。
- firewalld:Red Hat 系发行版的动态防火墙管理工具,支持运行时修改规则而不中断连接。
这篇文章重点讲 UFW 和 iptables,因为它们在实际运维中用得最多。nftables 虽然更现代,但概念和 iptables 相通,学会 iptables 再转 nftables 也不难。
UFW:让防火墙配置不再痛苦
为什么 UFW 这么受欢迎
用过 iptables 的人都知道,写规则时的那种小心翼翼——生怕一个参数错了就把 SSH 端口给封了,自己被锁在外面进不去。
UFW 的设计理念就是”简单至上”。一条命令就能开放端口,不用记什么 -A INPUT -p tcp --dport 22 -j ACCEPT 这种反人类语法。
举个对比:
iptables:
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
UFW:
ufw allow ssh
差别一目了然。UFW 会自动处理协议、状态检测、IPv6 这些细节,你只需要说”我要开放 SSH”就行。
基础配置:从零开始
新服务器到手,防火墙配置应该这么做:
第一步:设置默认策略
默认策略决定了”没匹配到任何规则时怎么办”。安全的基本原则是:拒绝所有进来,允许所有出去。
sudo ufw default deny incoming # 拒绝所有入站连接
sudo ufw default allow outgoing # 允许所有出站连接
这样一来,除非你明确允许,任何外部请求都进不来。很多人嫌麻烦,默认设成 allow,结果服务器像敞开大门的房子,谁都能进来逛一圈。
第二步:开放必要端口
这里有个坑:一定要先开放 SSH,再启用防火墙!不然你远程连接立刻就断了。
sudo ufw allow ssh # 开放 SSH (端口 22)
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
如果你跑的是其他服务,比如自定义端口的 SSH(假设是 2222),那就:
sudo ufw allow 2222/tcp
第三步:启用防火墙
sudo ufw enable
系统会弹出警告:“This may disrupt existing ssh connections”——别慌,只要你前面执行了 allow ssh,就不会有问题。输入 y 确认。
第四步:检查状态
sudo ufw status verbose
输出大概是这样:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
80/tcp ALLOW IN Anywhere
443/tcp ALLOW IN Anywhere
看到 Status: active,就说明防火墙已经生效了。
进阶技巧:让配置更安全
应用配置文件(App Profiles)
UFW 有个特别实用的功能——App Profiles。很多常见服务(Nginx、Apache、OpenSSH)都预定义了配置文件。
查看可用的配置:
sudo ufw app list
输出可能包含:
Available applications:
Apache
Apache Full
Apache Secure
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
直接用应用名开端口:
sudo ufw allow 'Nginx Full'
这条命令会同时开放 HTTP (80) 和 HTTPS (443),省得你手动写两条。
速率限制:防暴力破解
SSH 端口最容易被暴力破解攻击。UFW 内置了速率限制功能:
sudo ufw limit ssh
这条规则的意思是:如果某个 IP 在 30 秒内尝试连接超过 6 次,就暂时封禁它。比单纯的 allow ssh 安全多了。
限制特定 IP 访问
有时候你只想让特定 IP 访问某个服务,比如数据库管理后台只允许公司内网:
# 只允许 192.168.1.100 访问 MySQL
sudo ufw allow from 192.168.1.100 to any port 3306
# 拒绝某个恶意 IP
sudo ufw deny from 203.0.113.100
日志记录
防火墙日志是排查问题的关键:
sudo ufw logging on
sudo ufw logging medium # 日志级别:low/medium/high
日志存放在 /var/log/ufw.log,格式大概是这样:
Mar 15 10:23:45 server kernel: [UFW BLOCK] IN=eth0 OUT= MAC=... SRC=203.0.113.100 DST=... PROTO=TCP SPT=54321 DPT=22
看到 [UFW BLOCK] 就说明防火墙拦截了这个请求。
UFW 的局限
UFW 虽然好用,但也有边界:
- NAT 和端口转发:支持有限,复杂配置还是得用 iptables
- 复杂规则链:不支持自定义链、条件嵌套
- 按内容过滤:做不到(比如过滤 HTTP 请求里的恶意 Payload)
如果你的需求超出这些边界,就得转向 iptables 了。
iptables:精细控制的利器
理解 iptables 的架构
iptables 比 UFW 复杂,但底层逻辑其实挺清晰。关键是理解”表-链-规则”三层结构。
表(Tables)
不同的表处理不同类型的任务:
- filter 表(默认):包过滤,决定接受还是拒绝
- nat 表:地址转换(NAT),改写源/目标地址
- mangle 表:修改包的 TOS、TTL 等元数据
- raw 表:配置例外,绕过连接追踪
大多数场景只用到 filter 表,所以我们默认就操作它。
链(Chains)
链是规则的集合,按顺序执行。filter 表有五条内置链:
- INPUT:入站包(目标地址是本机)
- OUTPUT:出站包(源地址是本机)
- FORWARD:转发包(本机只是中转)
- PREROUTING:路由前处理
- POSTROUTING:路由后处理
日常配置主要用 INPUT 和 OUTPUT,FORWARD 在做路由器或网关时才用。
规则匹配顺序
规则从上到下逐条匹配,首次匹配即执行动作,后面的规则不再检查。
举个例子:
iptables -A INPUT -s 192.168.1.100 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -j DROP
这两条规则,192.168.1.100 会匹配第一条 ACCEPT,直接放行,不会再检查第二条。但如果规则顺序反过来,192.168.1.100 就会被第一条 DROP 拦截,根本到不了第二条。
这就是 iptables 配置的核心原则:更具体的规则放前面,更通用的规则放后面。
基本语法拆解
iptables 命令的基本格式:
iptables -t 表名 -A 链名 匹配条件 -j 动作
常用参数:
-t:指定表(默认 filter,可省略)-A:添加规则到链末尾(Append)-I:插入规则到指定位置(Insert)-D:删除规则(Delete)-L:列出规则(List)-F:清空所有规则(Flush)-P:设置默认策略(Policy)
匹配条件
-s:源 IP 地址(如-s 192.168.1.100)-d:目标 IP 地址-p:协议(tcp、udp、icmp)--sport:源端口--dport:目标端口-i:入站网卡(如-i eth0)-o:出站网卡-m state --state:连接状态检测
动作(Target)
- ACCEPT:接受包
- DROP:静默丢弃(不返回任何信息)
- REJECT:拒绝并返回错误消息
- LOG:记录日志(不拦截,继续匹配后续规则)
- RETURN:停止当前链,返回上一层链
实战配置:安全的服务器防火墙
下面是一套完整的生产环境配置流程:
第一步:清空现有规则
新服务器常有默认规则,先清干净:
sudo iptables -F # 清空所有规则
sudo iptables -X # 删除所有自定义链
sudo iptables -t nat -F
sudo iptables -t mangle -F
第二步:设置默认策略
和 UFW 一样,默认拒绝入站:
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
第三步:允许已建立的连接
这条规则特别重要:允许响应流量和已建立连接的数据通过。
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
什么意思呢?当你访问一个网站,发出的请求是 OUTPUT(默认 ACCEPT),网站的回复是 INPUT。如果没有这条规则,回复包会被 DROP,你根本收不到数据。
ESTABLISHED 表示连接已经建立,RELATED 表示相关连接(比如 FTP 数据连接)。
第四步:开放必要端口
# SSH
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# HTTP
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# HTTPS
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
第五步:限制 ICMP(可选)
ICMP 是 ping 用的协议。有些安全策略会禁 ping:
# 允许 ping
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
# 或者拒绝 ping
sudo iptables -A INPUT -p icmp -j DROP
第六步:记录日志
在 DROP 前加一条 LOG 规则,方便排查:
sudo iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 4
--limit 5/min 防止日志爆炸,每分钟最多记录 5 条。
第七步:最后的 DROP
其实默认策略已经是 DROP 了,但显式写一条更清晰:
sudo iptables -A INPUT -j DROP
第八步:保存规则
iptables 规则默认不持久化,重启就没了。Ubuntu/Debian 可以用 iptables-persistent:
sudo apt install iptables-persistent
sudo netfilter-persistent save
或者手动保存:
sudo iptables-save > /etc/iptables/rules.v4
sudo ip6tables-save > /etc/iptables/rules.v6 # IPv6 规则
查看规则状态
sudo iptables -L -n -v --line-numbers
-n:数字显示(不解析域名,更快)-v:详细模式(显示包计数)--line-numbers:显示规则编号
输出示例:
Chain INPUT (policy DROP 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 42 2848 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state ESTABLISHED,RELATED
2 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
3 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
4 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
5 0 0 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 limit: avg 5/min burst 5 LOG flags 0 level 4 prefix "iptables denied: "
6 0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0
UFW 和 iptables:到底选哪个
说了这么多,你可能还在纠结:我该用 UFW 还是 iptables?
核心差异:易用性 vs 灵活性
| 维度 | UFW | iptables |
|---|---|---|
| 命令简洁度 | 超级简单(ufw allow ssh) | 复杂(iptables -A INPUT -p tcp --dport 22 -j ACCEPT) |
| 学习曲线 | 几小时就能上手 | 需要几天到几周深入学习 |
| 底层机制 | 还是 iptables/nftables | 直接操作 iptables |
| 性能 | 相同(都依赖 Netfilter) | 相同 |
| NAT/端口转发 | 基本支持,复杂场景不够用 | 完全支持 |
| 复杂规则链 | 不支持自定义链 | 完全支持,可多层嵌套 |
| 应用配置 | 有 App Profiles,很方便 | 需手动写规则 |
| IPv6 | 自动处理 | 需用 ip6tables 单独配置 |
| 脚本化管理 | 适合手动配置 | 更适合脚本批量部署 |
性能真相
很多人以为 iptables 性能更好,其实底层机制完全一样——都是 Netfilter 在内核里干活。唯一的性能差异来自规则数量:规则越多,匹配越慢。但这对中小服务器影响不大。
选择建议
推荐 UFW 的场景:
- VPS、云服务器、独立服务器
- Web 服务、API 服务部署
- 没复杂网络需求(不做 NAT、端口转发)
- 非专业系统管理员(不想学 iptables 语法)
- 快速安全配置(比如紧急响应攻击)
推荐 iptables 的场景:
- 网关、路由器、VPN 服务器
- 需要做 NAT、端口转发、负载均衡
- 复杂规则链、多层条件判断
- 大规模部署(几十台服务器脚本化管理)
- 高级过滤(按包内容、速率、时间)
- 运维团队(有专人负责网络配置)
可以混用吗?
不建议。UFW 和 iptables 都操作同一套 Netfilter 规则,混用容易冲突。
举个例子:你用 iptables 开了 SSH 端口,后来又用 UFW deny 了 SSH,最后那条生效,你被锁在外面了。
如果必须混用,记住规则顺序:UFW 的规则在 before.rules 和 after.rules 之间,iptables 直接添加的规则可能被 UFW 的默认规则覆盖。
防火墙安全策略设计的核心原则
工具用熟练只是第一步,更重要的是设计一套合理的安全策略。很多人配置防火墙时随手加几条规则,结果漏洞百出。
原则一:默认拒绝(Default Deny)
这是安全配置的基石。
核心思想:除非明确允许,否则拒绝一切。
反面教材是”默认允许”——先全开,再逐个封禁风险端口。这种思路有两个问题:
- 你根本不知道有哪些风险端口(攻击者会扫描全部 65535 个端口)
- 漏掉一个端口,就留下一个隐患
正确做法:
# UFW
sudo ufw default deny incoming
sudo ufw default allow outgoing
# iptables
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT ACCEPT
然后只开放业务必需的端口。每开放一个端口,都要问自己:这端口干什么用的?能不能限制源 IP?
原则二:最小权限原则
每条规则应该只做一件事,开放的范围尽可能小。
端口开放:
- ❌
ufw allow 3306(全世界都能连 MySQL) - ✅
ufw allow from 192.168.1.100 to any port 3306(只允许特定 IP)
服务访问:
- ❌ 开放所有内部服务端口
- ✅ 只开放面向公网的服务(Web、API),内部服务用内网或 VPN 访问
SSH 管理:
- ❌
ufw allow ssh(任何人都能尝试登录) - ✅
ufw allow from 公司IP to any port 22+ufw limit ssh
原则三:分层防御(Defense-in-Depth)
防火墙不是万能的,它只是第一层防线。完整的安全体系应该有多层防护:
- 网络层防火墙(UFW/iptables):拦截恶意流量
- 应用层防火墙(WAF):过滤 SQL 注入、XSS 等 HTTP 层攻击
- 主机层防护(SELinux/AppArmor):限制进程权限
- 入侵检测(IDS/IPS):实时监控异常行为
- 定期审计:日志分析、漏洞扫描
举个例子:防火墙开放了 HTTP 80 端口,WAF 会检查 HTTP 请求里的恶意 Payload,SELinux 会限制 Web 服务器的文件访问权限。三层都过了,攻击者才能到应用层,但应用层还有代码安全(输入验证、权限检查)。
原则四:网络分段(Network Segmentation)
大型网络不能一锅粥,要划分区域。
典型分段模型:
- DMZ(Demilitarized Zone):面向公网的服务(Web 服务器、邮件服务器)
- 内网区域:数据库、内部服务、办公网络
- 管理区域:运维管理、监控、日志
分段的好处:
- 隔离故障:DMZ 被攻破,攻击者还得再突破一道防线才能进内网
- 限制传播:蠕虫病毒在一个区域传播,跨区域被防火墙拦截
- 权限细化:不同区域的用户访问权限不同
iptables 配置分段时,FORWARD 链是关键:
# DMZ 到内网:只允许数据库访问
iptables -A FORWARD -s dmz_network -d internal_network -p tcp --dport 3306 -j ACCEPT
iptables -A FORWARD -s dmz_network -d internal_network -j DROP
原则五:定期审计与更新
防火墙配置不是一劳永逸的。
规则审查:
- 每月检查一次:有没有过期的规则?(比如测试端口忘了删)
- 每季度评估:业务变化后,端口开放是否合理?
- 每年重构:清理冗余规则,优化性能
日志分析:
- 每周查看防火墙日志:哪些 IP 被拦截?拦截原因?
- 异常流量告警:设置阈值,超过自动通知
- 攻击溯源:从日志里找到攻击来源,针对性加固
响应变化:
- 新服务上线:先评估安全风险,再开放端口
- 攻击事件:调整规则,封禁恶意 IP,加速率限制
- 业务调整:删除不需要的规则,减少暴露面
生产环境配置实战:避免踩坑
配置流程的安全步骤
第一步:在测试环境验证
永远不要在生产服务器直接试新规则。先在测试 VM 或开发环境配置一遍,确认没问题再上生产。
第二步:保留 SSH 后路
配置前先检查 SSH 端口是否已开放。如果用自定义端口,记得:
# UFW
ufw allow 2222/tcp # 自定义 SSH 端口
# iptables
iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
第三步:逐步开放端口
不要一次性开放所有端口。先开放最核心的(SSH),验证能登录,再开放 Web 端口,再开放其他服务。
第四步:记录配置变更
每次修改防火墙规则都要记录:
- 修改时间
- 修改内容
- 修改原因
- 验证结果
可以用 Git 管理规则配置文件,或者用文档记录。
常见错误与解决方案
错误 1:SSH 锁定
症状:启用防火墙后,SSH 连接断开,再也登不上服务器。
原因:没先开放 SSH 端口,或规则顺序错误(先 DROP 后 ACCEPT)。
预防:
- 配置前检查现有 SSH 端口
- 先
ufw allow ssh,再ufw enable - 如果用 iptables,确保 SSH 规则在 DROP 前面
应急方案:
- VPS:通过服务商后台 Console 登录(绕过 SSH)
- 云服务器:服务商提供 “Recovery Mode” 或 “Rescue System”
- 物理服务器:本地登录
错误 2:规则顺序混乱
症状:某个端口明明写了 ACCEPT 规则,还是连不上。
原因:规则顺序问题,前面的 DROP 先匹配了。
排查:
iptables -L -n -v --line-numbers
查看规则编号,确认 ACCEPT 是否在 DROP 前面。
解决:
# 删除错误位置的规则
iptables -D INPUT 3
# 插入到正确位置
iptables -I INPUT 2 -p tcp --dport 80 -j ACCEPT
错误 3:配置未持久化
症状:重启后防火墙规则全没了。
原因:iptables 规则默认只在内存里,重启就清空。
解决:
# Ubuntu/Debian
sudo apt install iptables-persistent
sudo netfilter-persistent save
# CentOS/RHEL
sudo service iptables save
UFW 默认持久化,不用额外处理。
错误 4:IPv6 被忽略
症状:IPv4 正常,IPv6 访问不了。
原因:iptables 只配置了 IPv4,IPv6 需用 ip6tables。
解决:
# IPv6 规则(和 IPv4 类似)
sudo ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo ip6tables -A INPUT -p tcp --dport 80 -j ACCEPT
# 保存
sudo ip6tables-save > /etc/iptables/rules.v6
UFW 自动处理 IPv6,不用单独配置。
故障排查技巧
当防火墙配置出问题时,按这个步骤排查:
1. 检查防火墙状态
# UFW
sudo ufw status verbose
# iptables
sudo iptables -L -n -v
确认防火墙是否启用,规则是否正确。
2. 测试端口连通性
# 从外部测试
telnet server_ip 22
nc -zv server_ip 80
# 本地测试
sudo netstat -tulnp | grep :22
3. 查看防火墙日志
# UFW
tail -f /var/log/ufw.log
# iptables
tail -f /var/log/kern.log | grep "iptables"
看有没有被拦截的请求记录。
4. 临时禁用排查
# UFW
sudo ufw disable
# iptables
sudo iptables -F
禁用后测试连通性,确认是防火墙问题还是服务本身问题。
注意:禁用防火墙后服务器完全暴露,排查完立刻恢复!
总结:构建你的防火墙安全体系
聊了这么多,最后总结一下核心要点。
工具选择
- 简单场景:UFW 够用,几分钟就能配置好,省心省力
- 复杂场景:iptables 更灵活,适合网关、NAT、高级过滤
- 不要混用:选一个工具统一管理,避免规则冲突
配置原则
- 默认拒绝:拒绝所有入站,只开放必要端口
- 最小权限:每个规则范围尽量小,限制源 IP
- 分层防御:防火墙只是第一层,配合 WAF、SELinux 多层防护
- 网络分段:DMZ、内网、管理区域隔离
- 定期审计:每月查规则,每季度评估,每年重构
实战要点
- 先开放 SSH:配置防火墙前先确保 SSH 端口可访问
- 规则顺序:iptables 规则从具体到通用,顺序很重要
- 持久化保存:iptables 规则要保存,重启后自动加载
- IPv6 配置:iptables 需单独配置 ip6tables,UFW 自动处理
- 测试环境验证:生产配置前先在测试环境试一遍
- 保留日志:启用防火墙日志,定期分析异常流量
下一步学习
如果你想继续深入防火墙和服务器安全,可以探索:
- nftables:iptables 的现代替代,语法更统一,性能更好
- firewalld:动态防火墙管理,支持运行时修改
- WAF 配置:Nginx ModSecurity、Cloudflare WAF
- 入侵检测:Fail2ban(自动封禁暴力破解)、OSSEC
- SELinux/AppArmor:主机层权限控制
防火墙配置是服务器安全的基础。掌握 UFW 和 iptables 的用法,理解安全策略设计原则,你的服务器就不会像敞开大门的房子,任人进出。凌晨三点收到报警短信这种事,也能少发生几次。
Linux 防火墙配置完整流程
从零开始配置 UFW 或 iptables 防火墙,保护服务器安全
⏱️ 预计耗时: 30 分钟
- 1
步骤1: 设置默认策略
默认拒绝所有入站连接,允许所有出站连接:
• UFW: `sudo ufw default deny incoming` 和 `sudo ufw default allow outgoing`
• iptables: `sudo iptables -P INPUT DROP` 和 `sudo iptables -P OUTPUT ACCEPT`
• 这是安全配置的基石,确保只开放必要的端口 - 2
步骤2: 开放 SSH 端口
配置防火墙前先开放 SSH,避免被锁外面:
• UFW: `sudo ufw allow ssh` 或 `sudo ufw allow 22/tcp`
• iptables: `sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT`
• 自定义端口记得改成对应端口(如 2222) - 3
步骤3: 开放业务端口
开放 Web 服务和其他必要端口:
• HTTP: `sudo ufw allow 80/tcp` 或 `sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT`
• HTTPS: `sudo ufw allow 443/tcp` 或 `sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT`
• 其他服务按需开放,尽量限制源 IP - 4
步骤4: 启用防火墙并验证
启用防火墙并检查状态:
• UFW: `sudo ufw enable` 然后 `sudo ufw status verbose`
• iptables: 检查规则 `sudo iptables -L -n -v --line-numbers`
• 确认规则正确且防火墙处于 active 状态 - 5
步骤5: 持久化保存规则
iptables 规则默认不持久化,重启会丢失:
• Ubuntu/Debian: `sudo apt install iptables-persistent` 然后 `sudo netfilter-persistent save`
• 手动保存: `sudo iptables-save > /etc/iptables/rules.v4`
• UFW 默认持久化,无需额外操作
常见问题
UFW 和 iptables 可以同时使用吗?
UFW 和 iptables 性能有差异吗?
配置防火墙时被锁在外面怎么办?
• VPS/云服务器:通过服务商后台 Console 登录(绕过 SSH)
• 物理服务器:本地登录
• 预防方法:配置前先 `ufw allow ssh`,再 `ufw enable`;iptables 确保 SSH 规则在 DROP 前面
iptables 规则重启后消失了怎么办?
UFW 的 limit 命令是什么意思?
什么时候该用 iptables 而不是 UFW?
• NAT、端口转发、负载均衡
• 复杂规则链、多层条件判断
• 网关、路由器、VPN 服务器
• 大规模部署(脚本化管理几十台服务器)
• 高级过滤(按包内容、速率、时间)
其他场景(VPS、Web 服务)UFW 够用且更简单。
防火墙配置的最佳安全原则是什么?
• 默认拒绝(Default Deny):拒绝所有入站,只开放必要端口
• 最小权限:每个规则范围尽量小,限制源 IP
• 分层防御:防火墙 + WAF + SELinux 多层防护
• 定期审计:每月查规则,每季度评估,每年重构
参考资料
- UFW Essentials: Common Firewall Rules and Commands - DigitalOcean
- UFW vs iptables: Simple Firewall Rules That Actually Work - WeHaveServers
- Difference Between ufw vs. nftables vs. iptables - Baeldung on Linux
- Firewall Design Principles In Network Security - Fortinet
- Linux Firewall: Configuration, Tools, Best Practices - TuxCare
- Ubuntu Community Help Wiki - UFW
18 分钟阅读 · 发布于: 2026年4月3日 · 修改于: 2026年4月4日
相关文章
Supabase 数据库设计:表结构、关系与 Row Level Security 完全指南
Supabase 数据库设计:表结构、关系与 Row Level Security 完全指南
Supabase 入门:PostgreSQL + Auth + Storage 一站式后端
Supabase 入门:PostgreSQL + Auth + Storage 一站式后端
shadcn/ui 常见问题排查:样式冲突、组件不渲染、类型错误

评论
使用 GitHub 账号登录后即可评论