切换语言
切换主题

防火墙配置: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 灵活性

维度UFWiptables
命令简洁度超级简单(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.rulesafter.rules 之间,iptables 直接添加的规则可能被 UFW 的默认规则覆盖。


防火墙安全策略设计的核心原则

工具用熟练只是第一步,更重要的是设计一套合理的安全策略。很多人配置防火墙时随手加几条规则,结果漏洞百出。

原则一:默认拒绝(Default Deny)

这是安全配置的基石。

核心思想:除非明确允许,否则拒绝一切。

反面教材是”默认允许”——先全开,再逐个封禁风险端口。这种思路有两个问题:

  1. 你根本不知道有哪些风险端口(攻击者会扫描全部 65535 个端口)
  2. 漏掉一个端口,就留下一个隐患

正确做法:

# 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)

防火墙不是万能的,它只是第一层防线。完整的安全体系应该有多层防护:

  1. 网络层防火墙(UFW/iptables):拦截恶意流量
  2. 应用层防火墙(WAF):过滤 SQL 注入、XSS 等 HTTP 层攻击
  3. 主机层防护(SELinux/AppArmor):限制进程权限
  4. 入侵检测(IDS/IPS):实时监控异常行为
  5. 定期审计:日志分析、漏洞扫描

举个例子:防火墙开放了 HTTP 80 端口,WAF 会检查 HTTP 请求里的恶意 Payload,SELinux 会限制 Web 服务器的文件访问权限。三层都过了,攻击者才能到应用层,但应用层还有代码安全(输入验证、权限检查)。

原则四:网络分段(Network Segmentation)

大型网络不能一锅粥,要划分区域。

典型分段模型:

  • DMZ(Demilitarized Zone):面向公网的服务(Web 服务器、邮件服务器)
  • 内网区域:数据库、内部服务、办公网络
  • 管理区域:运维管理、监控、日志

分段的好处:

  1. 隔离故障:DMZ 被攻破,攻击者还得再突破一道防线才能进内网
  2. 限制传播:蠕虫病毒在一个区域传播,跨区域被防火墙拦截
  3. 权限细化:不同区域的用户访问权限不同

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)。

预防

  1. 配置前检查现有 SSH 端口
  2. ufw allow ssh,再 ufw enable
  3. 如果用 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

    步骤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

    步骤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

    步骤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

    步骤4: 启用防火墙并验证

    启用防火墙并检查状态:

    • UFW: `sudo ufw enable` 然后 `sudo ufw status verbose`
    • iptables: 检查规则 `sudo iptables -L -n -v --line-numbers`
    • 确认规则正确且防火墙处于 active 状态
  5. 5

    步骤5: 持久化保存规则

    iptables 规则默认不持久化,重启会丢失:

    • Ubuntu/Debian: `sudo apt install iptables-persistent` 然后 `sudo netfilter-persistent save`
    • 手动保存: `sudo iptables-save > /etc/iptables/rules.v4`
    • UFW 默认持久化,无需额外操作

常见问题

UFW 和 iptables 可以同时使用吗?
不建议混用。两者都操作同一套 Netfilter 规则,混用容易冲突。比如用 iptables 开了 SSH,后来又用 UFW deny 了 SSH,最后那条生效,可能被锁外面。选一个工具统一管理。
UFW 和 iptables 性能有差异吗?
性能完全相同。UFW 底层还是 iptables/nftables,都是 Netfilter 在内核里干活。唯一的性能差异来自规则数量:规则越多,匹配越慢。但这对中小服务器影响不大。
配置防火墙时被锁在外面怎么办?
应急方案取决于服务器类型:

• VPS/云服务器:通过服务商后台 Console 登录(绕过 SSH)
• 物理服务器:本地登录
• 预防方法:配置前先 `ufw allow ssh`,再 `ufw enable`;iptables 确保 SSH 规则在 DROP 前面
iptables 规则重启后消失了怎么办?
iptables 规则默认只在内存里,重启就清空。解决方法:Ubuntu/Debian 安装 `iptables-persistent`,执行 `netfilter-persistent save`;或手动 `iptables-save > /etc/iptables/rules.v4`。UFW 默认持久化。
UFW 的 limit 命令是什么意思?
速率限制功能,防止暴力破解。比如 `sudo ufw limit ssh`:如果某个 IP 在 30 秒内尝试连接超过 6 次,就暂时封禁它。比单纯的 `allow ssh` 安全多了。
什么时候该用 iptables 而不是 UFW?
需要以下场景时用 iptables:

• NAT、端口转发、负载均衡
• 复杂规则链、多层条件判断
• 网关、路由器、VPN 服务器
• 大规模部署(脚本化管理几十台服务器)
• 高级过滤(按包内容、速率、时间)

其他场景(VPS、Web 服务)UFW 够用且更简单。
防火墙配置的最佳安全原则是什么?
核心原则:

• 默认拒绝(Default Deny):拒绝所有入站,只开放必要端口
• 最小权限:每个规则范围尽量小,限制源 IP
• 分层防御:防火墙 + WAF + SELinux 多层防护
• 定期审计:每月查规则,每季度评估,每年重构

参考资料

18 分钟阅读 · 发布于: 2026年4月3日 · 修改于: 2026年4月4日

评论

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

相关文章