告别 iptables 噩梦:运维老司机带你玩转 UFW 防火墙(终极版)
很多开发者和初级运维一听到“配置防火墙”就开始头大,脑海中浮现出 iptables 那晦涩难懂的链(Chains)、表(Tables)和规则语法。别怕,今天我们要讲的主角是 UFW —— Uncomplicated Firewall(简单防火墙)。
它名副其实,就是为了让防火墙配置变得简单、直观。今天,我不仅带你用十分钟给服务器穿上“防弹衣”,还会带你深入了解它的工作机制,让你真正成为 UFW 的主人。
iptables使用可参考之前的文章:温故而知新之iptablesHello Young Man,公众号:PoorOps温故而知新之iptables
什么是 UFW?
UFW 并不是一个全新的防火墙技术。本质上,它依然是 iptables(或者较新的 nftables)的一个用户友好的前端管理工具。
你可以把它想象成一个翻译官:你说人话(比如“允许 SSH 访问”),它负责把这句人话翻译成 iptables 能听懂的复杂规则。UFW 是 Ubuntu 和 Debian 系发行版的标配。
我们的核心原则: 默认拒绝所有进入(Incoming),明确允许需要的服务。
Step 0: 检查与安装
在大多数 Ubuntu 系统中,UFW 是预装的。我们可以先检查一下它的状态。
sudo ufw status
如果系统提示找不到命令,可以通过以下命令安装:
sudo apt update
sudo apt install ufw⚠️ Step 1: 生死攸关的第一步(千万别锁住自己!)
在你兴奋地敲下 ufw enable 之前,请务必、一定、必须要先允许 SSH 连接!
1.1 设置默认策略
作为运维最佳实践,我们首先要定下基调:拒绝所有入站连接,允许所有出站连接。
sudo ufw default deny incoming
sudo ufw default allow outgoing1.2 允许 SSH 连接(救命稻草)
这是最关键的一步。
sudo ufw allow ssh
或者,如果你为了安全修改了 SSH 的默认端口(比如改成了 2222),那么你应该用端口号来允许:
sudo ufw allow 2222/tcp
Step 2: 启用 UFW
做好了 Step 1 的准备工作,我们现在可以安全地启用防火墙了。
sudo ufw enable
系统会提示你继续操作,大胆输入 y 并回车。
Step 3: 日常操作——开放服务与端口
服务器是要提供服务的,我们来逐步开放需要的端口。
3.1 开放 Web 服务 (HTTP/HTTPS)
按服务名称开放:
sudo ufw allow http
sudo ufw allow https或者按端口号开放:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp3.2 针对特定 IP 开放
只允许特定 IP 访问特定端口:
# 只允许 10.0.0.5 访问本机的 3306 端口
sudo ufw allow from 10.0.0.5 to any port 3306允许一个网段(子网)访问 SSH:
# 允许 192.168.1.0/24 这个网段内的所有机器访问 SSH
sudo ufw allow from 192.168.1.0/24 to any port 223.3 拒绝连接 (Deny)
由于我们默认拒绝所有入站,通常不需要显式拒绝。但若要“拉黑”某个 IP,可以这样做:
sudo ufw deny from 123.123.123.123
3.4 高级技巧:开放一个端口范围
有时候,某些应用(如 Passive Mode FTP、WebRTC 服务或某些 P2P 应用)需要你开放一个连续的端口范围,而不是单个端口。UFW 同样可以轻松应对。
语法是 allow <起始端口>:<结束端口>/<协议>。
示例1:为 Passive FTP 开放端口
假设你的 FTP 服务器需要使用 30000 到 31000 之间的 TCP 端口来进行被动模式的数据传输。
sudo ufw allow 30000:31000/tcp
示例2:为流媒体服务开放 UDP 端口范围
再比如,某个实时音视频服务需要使用 UDP 端口 60000 到 60050:
sudo ufw allow 60000:60050/udp
老司机提示: 当你使用端口范围时,必须明确指定协议(/tcp 或 /udp)。UFW 不允许对端口范围使用不带协议的模糊规则。
Step 4: 查看状态与删除规则
4.1 查看详细状态
配置了一堆规则后,我们需要检查一下。
codeBash
sudo ufw status verbose
输出示例:
codeCode
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
80/tcp ALLOW IN Anywhere
443/tcp ALLOW IN Anywhere
3306 ALLOW IN 10.0.0.5
22/tcp (v6) ALLOW IN Anywhere (v6)
80/tcp (v6) ALLOW IN Anywhere (v6)
443/tcp (v6) ALLOW IN Anywhere (v6)看起来很清晰,对吧?
4.2 删除规则(推荐使用编号删除)
随着时间的推移,你可能不再需要开放 80 端口了。有两种删除方法。
方法一:逆向命令
在原来的 allow 命令前加 delete。
codeBash
sudo ufw delete allow 80/tcp
这种方法有时候需要你精确记得当初是怎么添加的,比较麻烦。
方法二:通过编号删除(老司机推荐)
这是最清晰、最不容易出错的方法。
首先,列出带编号的规则:
codeBash
sudo ufw status numbered
输出示例:
codeCode
Status: active
To Action From
-- ------ ----
[ 1] 22/tcp ALLOW IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] 443/tcp ALLOW IN Anywhere
[ 4] 3306 ALLOW IN 10.0.0.5假设我要删除 80 端口的规则,它对应的编号是 [ 2]。
codeBash
sudo ufw delete 2
系统会再次跟你确认,输入 y 即可。注意: 删除一条规则后,后面规则的编号会自动前移,所以如果要批量删除,请每次删除后重新 status numbered 查看一下。
Step 5: Power Up! 玩转应用程序配置文件
5.1 查看和使用现有配置文件
很多标准服务在安装时会自动向 UFW 注册一个配置文件。
# 列出所有可用的应用配置
sudo ufw app list
# 查看 'Nginx Full' 具体内容
sudo ufw app info 'Nginx Full'
# 使用应用配置来开放服务
sudo ufw allow 'Nginx Full'5.2 创建你自己的配置文件
假设你部署了一个 Prometheus Node Exporter,它监听在 9100 端口。
1. 创建配置文件: sudo nano /etc/ufw/applications.d/node-exporter
2. 写入内容: [Node Exporter]
title=Prometheus Node Exporter
description=Prometheus metrics exporter for hardware and OS
ports=9100/tcp3. 使用新配置: sudo ufw allow 'Node Exporter'
Step 6: 深入幕后——UFW 的核心配置文件
6.1 主配置文件:/etc/default/ufw
这个文件定义了 UFW 的默认行为,如默认策略(DEFAULT_INPUT_POLICY="DROP")和 IPv6 支持(IPV6=yes)。通常我们通过 ufw 命令来间接修改这些设置,而不是直接编辑此文件。
6.2 规则存储文件:/etc/ufw/
你通过 ufw 命令添加的所有规则,最终都会被翻译成 iptables 语法并保存在 /etc/ufw/user.rules (IPv4) 和 /etc/ufw/user6.rules (IPv6) 文件中。强烈不建议手动编辑这些文件,让 ufw 命令来帮你管理,以防出错。
最后的锦囊妙计:重置
如果你把规则配得乱七八糟,想从头再来,可以使用重置命令。这会禁用 UFW 并删除所有你定义的规则。
sudo ufw reset
总结
UFW 真正做到了让防火墙配置变得 Uncomplicated。从简单的命令到结构化的应用程序配置文件,它为不同层次的用户都提供了便利。
记住我们的口诀:
1. 安装 UFW。 2. 默认拒绝,允许流出。 3. 一定要先允许 SSH! 4. 启用 UFW。 5. 按需开放业务端口、范围和IP,善用配置文件。
别再让你的服务器裸奔了。现在,你不仅知道如何使用 UFW,更理解了它背后的运作方式。去给你的服务器加上这层至关重要的保护吧!
本文链接:https://www.kinber.cn/post/5781.html 转载需授权!
推荐本站淘宝优惠价购买喜欢的宝贝:

支付宝微信扫一扫,打赏作者吧~
