Ubuntu防火墙端口管理指南

这是一份详细且实用的 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:使用规则编号(最直接)

  1. 首先,查看带编号的规则列表:

    bash

    复制代码
    sudo ufw status numbered
  2. 找到你想删除的规则前面的编号(例如 [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 服务器

  1. 设置默认策略并允许 SSH。

    bash

    复制代码
    sudo ufw default deny incoming
    sudo ufw default allow outgoing
    sudo ufw allow ssh
    sudo ufw limit ssh  # 可选,但推荐用于 SSH
  2. 允许 Web 服务。

    bash

    复制代码
    sudo ufw allow http
    sudo ufw allow https
  3. 启用防火墙。

    bash

    复制代码
    sudo ufw enable
  4. 验证规则。

    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 系统。

相关推荐
阿里云大数据AI技术5 小时前
阿里云 EMR AI 助手正式发布:从问答工具到全栈智能运维助手
运维·人工智能
你好潘先生11 小时前
别再记命令了,用 yeero do 说句人话就能跑脚本,而且不烧 token
服务器·python·命令行
orion571 天前
Missing Semester Class1:course overview and introduction of shell
linux
SkyWalking中文站1 天前
认识 Horizon UI · 6/17:Trace 探索器
运维·监控·自动化运维
用户120487221611 天前
Linux驱动编译与加载
linux·嵌入式
程序员老赵1 天前
服务器文件不想 SFTP 上传?Docker 跑个 File Browser,浏览器就能管理
服务器·docker·开源
火车叼位1 天前
写给初级开发者:SSL、SSH、HTTPS 与证书体系全解析
运维
vivo互联网技术1 天前
从 10 分钟到 1 秒:ES 深度分页任意跳页的三轮优化实战
服务器·数据库·redis·elasticsearch·深度分页
用户805533698031 天前
Input 子系统架构:Core、Handler、Driver 三层是怎么协作的
linux·嵌入式