努力
加油

Ubuntu Server下如何启用和管理防火墙规则?

在 Ubuntu Server 环境下,防火墙管理主要依赖 ufw(Uncomplicated Firewall)或者底层的 iptables/nftables。对于绝大多数生产环境和日常运维来说,UFW 是首选方案,因为它配置简单、逻辑清晰且基于 iptables/nftables 后端。

以下是关于如何在 Ubuntu Server 上启用和管理防火墙规则的详细指南,涵盖从基础操作到高级场景的最佳实践。

1. 确认当前状态与安装

Ubuntu Server 通常默认预装了 UFW,但可能处于禁用状态。首先检查状态:

sudo ufw status verbose

如果显示 Status: inactive,说明防火墙未生效。如果尚未安装(极少见),可以使用以下命令安装:

sudo apt update
sudo apt install ufw

2. 核心原则:先允许 SSH,再启用

这是新手最容易犯的错误:直接启用防火墙可能导致远程连接中断。在启用之前,必须确保你允许了当前的 SSH 连接或未来重新连接的端口。

假设你的 SSH 服务运行在默认端口 22:

# 允许 SSH 连接(推荐指定协议 tcp)
sudo ufw allow ssh
# 或者明确指定端口
sudo ufw allow 22/tcp

如果你修改过 SSH 端口(例如改为 2222),则需相应调整:

sudo ufw allow 2222/tcp

3. 启用防火墙

确认规则已添加后,执行启用命令:

sudo ufw enable

系统会提示这会破坏现有的 SSH 连接,确认即可。启用后,再次检查状态:

sudo ufw status numbered

输出示例:

Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW IN    Anywhere
[ 2] 80/tcp                     ALLOW IN    Anywhere
...

4. 常用管理命令详解

允许特定服务或端口

  • Web 服务(HTTP/HTTPS):

    sudo ufw allow http
    sudo ufw allow https
    # 或者
    sudo ufw allow 80/tcp
    sudo ufw allow 443/tcp
  • 自定义端口范围(如数据库集群通信):

    sudo ufw allow 3000:3005/tcp
  • 允许特定 IP 访问:

    # 仅允许 192.168.1.100 访问 22 端口
    sudo ufw allow from 192.168.1.100 to any port 22
  • 允许整个子网:

    sudo ufw allow from 192.168.1.0/24

拒绝或删除规则

  • 拒绝所有入站连接(默认策略):
    UFW 默认策略通常是 deny incoming。你可以显式设置:

    sudo ufw default deny incoming
    sudo ufw default allow outgoing
  • 删除规则:
    使用 numbered 模式查看规则编号,然后删除:

    sudo ufw delete <rule_number>
    # 例如删除第 1 条规则
    sudo ufw delete 1
  • 重置防火墙:
    如果配置混乱,想从头开始:

    sudo ufw reset

5. 高级场景:日志记录与调试

开启日志记录

UFW 默认不记录大量日志以节省性能,但在排查问题时非常有用:

sudo ufw logging on

日志通常位于 /var/log/syslog 或 /var/log/ufo.log(取决于系统配置)。可以通过 grep 过滤:

sudo grep -i "ufw" /var/log/syslog

调试工具:tcpdump 和 ss

当 UFW 规则看似正确但连接仍失败时,不要只依赖 ufw status。使用更底层的工具验证:

  • 检查监听端口:

    sudo ss -tlnp | grep :22
  • 抓包分析:

    sudo tcpdump -i any port 22 -nn

    观察是否有 SYN 包到达服务器,以及是否有 RST 包返回,这有助于判断是防火墙拦截还是应用层问题。

6. 注意事项与最佳实践

  1. IPv6 支持:
    确保 /etc/default/ufw 文件中 IPV6=yes。否则,IPv6 流量可能绕过防火墙规则。

  2. 云环境特殊考量:
    如果你在 AWS、阿里云、腾讯云等云平台运行 Ubuntu,务必同时配置安全组(Security Group)。云平台的安全组是网络层的第一道防线,UFW 是主机层第二道防线。两者应保持一致,但优先信任云平台的安全组规则,因为它们在网卡驱动层面生效,性能更高且不受操作系统重启影响。

  3. 避免使用 iptables 直接操作:
    除非你有特殊需求,否则不要直接使用 iptables 命令修改规则,因为这会与 UFW 的状态不同步,导致管理混乱。始终通过 ufw 命令进行管理。

  4. 备份规则:
    在进行重大变更前,备份当前规则:

    sudo cp /etc/ufw/user.rules /etc/ufw/user.rules.bak
    sudo cp /etc/ufw/user6.rules /etc/ufw/user6.rules.bak
  5. 自动化与基础设施即代码(IaC):
    在生产环境中,建议将防火墙规则纳入 Ansible、Terraform 或 CloudFormation 模板中,确保每次部署都一致,避免人工操作失误。

总结

Ubuntu Server 的防火墙管理以 ufw 为核心,关键在于:先放行 SSH,再启用防火墙;明确默认拒绝入站,按需开放必要端口;结合云平台安全组实现双重防护。 遵循这些步骤,可以构建一个既安全又易于维护的网络边界。