给 Linux 服务器设置基础防火墙(ufw 实战配置)

ufw(Uncomplicated Firewall)是 iptables/nftables 的人话封装。
新服务器装好后第一件事就该把它配上 —— 比起裸奔,门槛降到 5 分钟,
但能挡住 99% 的扫描流量噪音。

安装 + 默认策略

sudo apt install -y ufw

sudo ufw default deny incoming
sudo ufw default allow outgoing

deny incoming 是关键 —— 默认拒绝所有进来的连接,靠白名单放行。

放行你需要的

sudo ufw allow ssh                 # 22/tcp
sudo ufw allow http                # 80/tcp
sudo ufw allow https               # 443/tcp

# 或者指定端口
sudo ufw allow 8080/tcp comment 'app dev server'

# 限制来源 IP
sudo ufw allow from 192.168.1.0/24 to any port 5432 comment 'pg from LAN'

# 限制速率(防 SSH 暴力破解)
sudo ufw limit ssh comment 'rate-limit SSH'

ufw limit 等价于 "同 IP 30 秒内 6 次连接就 deny",比 fail2ban 轻量但
粒度粗。生产服务器两个一起用最稳。

启用 + 校验

# !!! 启用前确认 22 已经 allow !!!
sudo ufw enable
sudo ufw status verbose

# Status: active
# Default: deny (incoming), allow (outgoing), deny (routed)
# To                         Action      From
# --                         ------      ----
# 22/tcp                     LIMIT IN    Anywhere
# 80/tcp                     ALLOW IN    Anywhere
# ...

如果你是 SSH 连进去配的,开 ufw 之前 务必先 allow ssh,否则当场断开。

实际生产建议

# 改 SSH 端口(不是安全提升但能省 99% 噪音日志)
sudo sed -i 's/^#\?Port .*/Port 2200/' /etc/ssh/sshd_config
sudo systemctl reload ssh
sudo ufw delete allow ssh
sudo ufw allow 2200/tcp comment 'ssh on non-standard port'
sudo ufw limit 2200/tcp

# Docker 装上后会绕过 ufw(默认改 iptables 但 ufw 看不到)
# 解决:用 DOCKER-USER 链 + ufw-docker(搜这个项目)

日志

sudo ufw logging medium   # off / low / medium / high / full
sudo tail -f /var/log/ufw.log

medium 已经够分析;full 会刷爆磁盘。

应用 profiles

ufw 自带常见应用的端口配置:

sudo ufw app list
# Available applications:
#   Nginx Full
#   Nginx HTTP
#   Nginx HTTPS
#   OpenSSH

sudo ufw allow 'Nginx Full'

自定义 profile 放在 /etc/ufw/applications.d/

[my-app]
title=My App
description=Backend API server
ports=8000,8443/tcp
sudo ufw app update my-app
sudo ufw allow my-app

备份 / 恢复

sudo cp /etc/ufw /etc/ufw.bak -r
# /etc/ufw/user.rules 和 user6.rules 是规则文件

踩过的坑

  • 远程改防火墙最危险。规范流程:
  • 准备 rollback 脚本:(sleep 300 && ufw --force reset) &,5 分钟内
    新规则有问题没人手动取消,自动 reset
  • 在 screen / tmux 里操作
  • 改完后开第二个 SSH 测试,确认连得上再 kill rollback
  • Docker 镜像启动后默认会 publish 端口到 0.0.0.0完全绕过 ufw
    生产里所有 Docker port mapping 都写 127.0.0.1:8080:8080 这种显式 bind。
  • KVM / LXC 桥接网络可能让 ufw 看不到流量,需要在 /etc/ufw/sysctl.conf
    里开 net.bridge.bridge-nf-call-iptables=1
精确评价 共 0 人评价
可复现性
可复现 · 0 不可复现 · 0
文风
文风流畅 · 0 文风晦涩 · 0
立场
支持 · 0 反对 · 0

登录后即可对本帖作出评价。

评论区 0 条 · 所有人可在此交流

登录后参与评论。

还没有评论,来说两句。