×

告别iptables噩梦:老司机带你玩转UFW防火墙(AI文)

hqy hqy 发表于2025-10-30 02:02:07 浏览6 评论0

抢沙发发表评论

告别 iptables 噩梦:运维老司机带你玩转 UFW 防火墙(终极版)

很多开发者和初级运维一听到“配置防火墙”就开始头大,脑海中浮现出 iptables 那晦涩难懂的链(Chains)、表(Tables)和规则语法。别怕,今天我们要讲的主角是 UFW —— Uncomplicated Firewall(简单防火墙)。

它名副其实,就是为了让防火墙配置变得简单、直观。今天,我不仅带你用十分钟给服务器穿上“防弹衣”,还会带你深入了解它的工作机制,让你真正成为 UFW 的主人。

iptables 使用可参考之前的文章:温故而知新之iptables

Hello 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 outgoing

1.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/tcp

3.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 22

3.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. 1. 创建配置文件:
    sudo nano /etc/ufw/applications.d/node-exporter
  2. 2. 写入内容:
    [Node Exporter]
    title
    =Prometheus Node Exporter
    description
    =Prometheus metrics exporter for hardware and OS
    ports
    =9100/tcp
  3. 3. 使用新配置:
    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. 1. 安装 UFW。
  2. 2. 默认拒绝,允许流出。
  3. 3. 一定要先允许 SSH!
  4. 4. 启用 UFW。
  5. 5. 按需开放业务端口、范围和IP,善用配置文件。

别再让你的服务器裸奔了。现在,你不仅知道如何使用 UFW,更理解了它背后的运作方式。去给你的服务器加上这层至关重要的保护吧!


打赏

本文链接:https://kinber.cn/post/5781.html 转载需授权!

分享到:


推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

 您阅读本篇文章共花了: 

群贤毕至

访客