这是一份详细且实用的 Ubuntu 防火墙端口管理指南。Ubuntu 自 18.04 LTS 以后,默认使用的防火墙是 UFW ,即"不复杂的防火墙",它极大地简化了 iptables
的管理。
第一部分:UFW 基础与安装
1. 检查 UFW 状态
首先,检查 UFW 是否已安装和运行。
bash
sudo ufw status
-
如果防火墙是** inactive **状态,你会看到:
Status: inactive
-
如果防火墙是** active **状态,你会看到已允许的规则列表。
2. 安装 UFW
通常 UFW 已预装。如果没有,请使用以下命令安装:
bash
sudo apt update
sudo apt install ufw
第二部分:基本端口管理操作
1. 启用 UFW
警告 :在启用 UFW 前,务必确保允许 SSH 连接,否则你可能会被锁在服务器外。
bash
# 首先允许 SSH(端口 22)
sudo ufw allow ssh
# 或者直接指定端口
sudo ufw allow 22/tcp
# 然后启用 UFW
sudo ufw enable
系统会提示操作可能中断现有的 SSH 连接,确认你已允许 SSH 后,输入 y
继续。
2. 禁用 UFW
如果需要临时关闭防火墙:
bash
sudo ufw disable
3. 重置 UFW
这将禁用 UFW,并删除所有规则,恢复到初始状态。
bash
sudo ufw reset
第三部分:允许和拒绝端口/服务
1. 按服务名(推荐)
UFW 在 /etc/services
中查找一些常见服务的端口。
bash
# 允许 SSH
sudo ufw allow ssh
# 允许 HTTP (端口 80)
sudo ufw allow http
# 允许 HTTPS (端口 443)
sudo ufw allow https
# 允许 FTP (端口 21)
sudo ufw allow ftp
2. 按端口号
bash
# 允许特定 TCP 端口 (例如:8080)
sudo ufw allow 8080/tcp
# 允许特定 UDP 端口 (例如:53,用于 DNS)
sudo ufw allow 53/udp
# 同时允许 TCP 和 UDP 的某个端口 (例如:NTP 123)
sudo ufw allow 123
3. 按特定范围端口
bash
# 允许一个端口范围,必须指定协议 (例如:60000-60100 for TCP)
sudo ufw allow 60000:60100/tcp
4. 按 IP 地址
bash
# 允许来自特定 IP 的所有连接
sudo ufw allow from 192.168.1.100
# 允许来自特定 IP 到特定端口的连接
sudo ufw allow from 192.168.1.100 to any port 22
# 允许一个子网
sudo ufw allow from 192.168.1.0/24 to any port 3306
5. 拒绝连接
语法与 allow
完全相同,只是将命令替换为 deny
。
bash
# 拒绝 HTTP 连接
sudo ufw deny http
# 拒绝来自特定 IP 的连接
sudo ufw deny from 203.0.113.10
6. 删除规则
有两种方法可以删除规则:
方法 A:使用规则编号(最直接)
-
首先,查看带编号的规则列表:
bash
sudo ufw status numbered
-
找到你想删除的规则前面的编号(例如
[3]
),然后执行:bash
sudo ufw delete 3
方法 B:通过规则描述
通过指定你最初创建的规则来删除它。
bash
# 例如,你之前运行了 `sudo ufw allow 80/tcp`
sudo ufw delete allow 80/tcp
第四部分:高级配置与技巧
1. 限制连接
limit
规则可以自动阻止某个 IP 在短时间内发起过多连接请求,常用于 SSH 防暴力破解。
bash
sudo ufw limit ssh
2. 查看详细规则
显示 UFW 当前运行的完整规则集。
bash
sudo ufw show added
或者查看 iptables 的原始格式(供高级用户诊断):
bash
sudo ufw show raw
3. 配置默认策略
UFW 的默认行为是拒绝所有传入连接,允许所有传出连接。这是最安全的配置,通常不需要更改。但你可以明确设置:
bash
# 拒绝所有传入(默认)
sudo ufw default deny incoming
# 允许所有传出(默认)
sudo ufw default allow outgoing
如果你想设置一个非常严格的策略(例如在个人桌面上),可以拒绝所有传出,然后只允许你需要的:
bash
sudo ufw default deny outgoing
sudo ufw allow out 53/udp # 允许 DNS 解析
sudo ufw allow out on eth0 to any port 80,443 proto tcp # 允许 HTTP/HTTPS 上网
第五部分:应用配置与管理
1. 重新加载规则
在修改规则后,UFW 会自动生效。如果需要手动重载:
bash
sudo ufw reload
2. 备份和恢复规则
你可以将规则导出到一个文件进行备份。
bash
# 备份
sudo sh -c "ufw status numbered > ufw-backup.txt"
# 恢复(需要手动或通过脚本重新应用每条规则)
# 没有直接的“恢复”命令,但你可以通过脚本来解析备份文件并执行相应的 `ufw allow` 命令。
实用示例场景
场景:配置一个基本的 Web 服务器
-
设置默认策略并允许 SSH。
bash
sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow ssh sudo ufw limit ssh # 可选,但推荐用于 SSH
-
允许 Web 服务。
bash
sudo ufw allow http sudo ufw allow https
-
启用防火墙。
bash
sudo ufw enable
-
验证规则。
bash
sudo ufw status verbose
输出应类似:
text
Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 22/tcp (SSH) ALLOW IN Anywhere 80/tcp (HTTP) ALLOW IN Anywhere 443/tcp (HTTPS) ALLOW IN Anywhere 22/tcp (SSH (v6)) ALLOW IN Anywhere (v6) 80/tcp (HTTP (v6)) ALLOW IN Anywhere (v6) 443/tcp (HTTPS (v6)) ALLOW IN Anywhere (v6)
重要提醒
-
云服务器用户注意 :如果你使用的是 AWS、Google Cloud、Azure 等云服务,它们有自己的安全组 。安全组规则在 UFW 之前生效。如果你的端口在 UFW 中允许了但仍然无法访问,请检查云服务商的安全组设置。
-
谨慎操作:在对远程服务器进行任何防火墙更改之前,请确保你有一条不会被中断的连接(例如通过控制台),或者已经允许了你的 SSH 连接。
这份指南涵盖了 UFW 端口管理的绝大多数日常操作。通过熟练使用这些命令,你可以有效地保护你的 Ubuntu 系统。