1. 为什么我在 Arch Linux 上最终还是选了 UFW
先说结论:Arch Linux 默认不带任何防火墙,装上系统那一刻其实处于“裸奔”状态。很多老玩家会觉得“我局域网里没啥危险,少开服务就行”,这种想法我理解,但现实是只要你的机器连着路由器、开着 SSH 或者跑着 Docker,被扫描和试探就是迟早的事。我自己就在一次挂机下载时被扫到过,当时虽然没什么损失,但事后一想确实后怕。
UFW 全称 Uncomplicated Firewall,是 iptables/nftables 的前端封装。它不替代内核防火墙,而是把 iptables 那套复杂的链、表、规则写法,简化成几条贴近人类语法的命令。在 Arch Linux 上装 UFW 不是因为它最强大,而是因为它足够直观、适合绝大多数个人桌面和家用服务器场景。相比直接手写 iptables 规则,UFW 的学习成本低一个量级;相比 firewalld 那种带 zone 概念的方案,UFW 的思路又是直来直去——放行什么、拒绝什么,一眼就能看懂。
Arch 社区对 UFW 的接受度其实挺高,官方仓库里就有 ufw 包,维护也算积极。而且 UFW 在 Arch 上的表现和 Ubuntu/Debian 上几乎没有差别,这不奇怪,毕竟它底层调用的都是内核标准接口,发行版之间的差异主要体现在初始化脚本和服务管理方式上。这篇文章就按我在 Arch 上的实际操作路径来写,从安装、初始化、配置规则到和 Docker 共存,把我踩过的坑和验证过的做法都列出来。如果你也用的是 Arch 系(包括 Manjaro、EndeavourOS 这类衍生版),可以直接照抄。
开头先给不熟悉的朋友铺个底:UFW 默认工作方式是“默认拒绝入站,默认放行出站”,你需要显式放行想要对外开放的端口。这种“白名单优先”的思路,本身就是一种安全习惯的养成。下面从安装开始。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 安装与初始化:Arch 上把 UFW 跑起来
2.1 安装 ufw 包并解决服务启动问题
Arch 上安装 UFW 非常简单,pacman 一条命令就能搞定:
bash复制sudo pacman -S ufw
安装完成后不要急着启用,先做一两步检查。第一步是确认系统里没有其他防火墙在跑,比如 nftables 服务或者 firewalld,如果有,先停掉再继续。Arch 默认没有,但如果你之前折腾过,最好确认一次:
bash复制systemctl status nftables firewalld
第二步是启动并启用 UFW 服务,注意 Arch 里 UFW 的 systemd 服务名就叫 ufw:
bash复制sudo systemctl enable --now ufw
这里有个 Arch 特有的小区别:Debian/Ubuntu 上 UFW 的 systemd 服务更像辅助角色,真正的开关由 ufw enable 命令控制;Arch 上如果你只想用服务方式管理,直接 systemctl enable --now ufw 也行。不过我个人的习惯是服务常开,具体启停交给 ufw 命令,这样后续规则配置的语义更清晰。
注意:启用 UFW 服务之后,防火墙规则本身还没生效。你还需要执行
sudo ufw enable才能让内核真正的规则链挂载上。这两个“启用”不是一回事,别搞混。
2.2 先设置默认策略,再谈放行规则
我见过不少新手拿到 UFW 第一件事就是 ufw allow 22,但默认策略还是放行所有,那这防火墙基本等于摆设。正确顺序一定是先设默认策略,再放行需要的端口。
bash复制sudo ufw default deny incoming
sudo ufw default allow outgoing
default deny incoming 的含义是:所有外部主动发起的连接,只要没有显式匹配放行规则,一律拒绝。default allow outgoing 表示本机访问外部不受限制,下载更新、浏览网页、DNS 解析这些都不受影响。这也是最主流的家用和个人服务器策略,兼顾安全和使用体验。
如果你跑的是纯粹的公网服务器,且只提供有限的几个服务,我建议把 outgoing 也考虑收紧,比如限制成只放行 DNS、HTTP/HTTPS 和 NTP。但这条对普通用户不友好,排查问题会多花很多时间,所以初期先用“入站全拒、出站全放”是合理的起步配置。
确认默认策略没有写反之后,再执行:
bash复制sudo ufw enable
这一步会输出规则已经生效的提示。看到提示后,可以用下面的命令验证防火墙状态:
bash复制sudo ufw status verbose
输出大
