
在我日常维护的多个Linux服务器环境中,网络安全始终是部署初期必须优先考虑的关键因素。尤其是在我负责的几套基于Ubuntu 22.04 LTS和Debian 11 Bullseye系统构建的边缘计算节点和数据库API服务网关中,暴露在公网的端口必须被严格管控。虽然iptables功能强大,但其配置语法不够友好,不利于后期交接与维护。最终我选择了UFW(Uncomplicated Firewall)作为默认防火墙管理工具——它是Ubuntu系系统的标准配套,具备清晰的命令结构,适合中高级运维工程师在自动化部署脚本中集成使用。
一、基础环境说明与硬件背景
我这次部署的环境包含两台云服务器节点,分别配置如下:
- 节点1:API入口防护服务器
- 系统:Ubuntu 22.04 LTS
- CPU:4 vCPU(Intel Xeon Gold 6338)
- 内存:8 GB DDR4 ECC
- 公网带宽:100 Mbps 上行/下行对称
- 用途:对外开放TCP 443/80,用于Nginx反向代理API服务
节点2:数据库查询防护节点
- 系统:Debian 11 Bullseye
- CPU:2 vCPU(AMD EPYC 7313)
- 内存:4 GB DDR4 ECC
- 私网IP:10.0.3.12
- 用途:仅允许局域网访问PostgreSQL端口5432,禁止公网访问
UFW的配置任务主要围绕这两台服务器展开。
二、UFW安装与启用流程
虽然在Ubuntu系统中UFW默认已安装,但出于稳定性和版本一致性考虑,我通常会手动确认并升级安装版本:
sudo apt update
sudo apt install ufw -y
检查当前状态:
sudo ufw status verbose
通常在未启用前,状态为inactive。接下来我们进行启用前配置。
三、配置前默认策略设定(Default Policies)
出于安全角度,我首先定义UFW的默认行为,即“默认拒绝所有入站流量,仅允许出站”:
sudo ufw default deny incoming
sudo ufw default allow outgoing
这个策略确保任何未明确允许的端口都不会对外开放,最大限度减少被扫描攻击的面。
四、节点1:Web服务节点配置规则详解
对于入口API节点,我们需要对外开放以下端口:
- TCP 80(HTTP)
- TCP 443(HTTPS)
- TCP 22(SSH,建议绑定特定管理IP)
配置规则如下:
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
sudo ufw allow from 203.0.113.18 to any port 22 proto tcp comment 'SSH - Admin Only'
其中203.0.113.18是我运维主机的公网出口IP,避免所有IP均可访问SSH。
启用UFW防火墙:
sudo ufw enable
启用后再次验证状态:
sudo ufw status numbered
这将显示所有已加载的规则及其编号,便于后期批量修改或删除。
五、节点2:数据库私网隔离配置策略
该节点作为数据库后端节点,仅允许来自私有子网的流量访问5432端口:
sudo ufw allow from 10.0.0.0/16 to any port 5432 proto tcp comment 'PostgreSQL Internal'
sudo ufw deny 5432/tcp comment 'Block Public PostgreSQL'
另外,仍需允许内部SSH管理:
sudo ufw allow from 10.0.0.0/16 to any port 22 proto tcp comment 'SSH Internal'
确保防火墙生效:
sudo ufw enable
六、配合自动化工具部署(如Ansible)
在多个节点批量部署UFW时,我使用如下Ansible playbook片段:
- name: Configure UFW firewall
hosts: all
become: yes
tasks:
- name: Install UFW
apt:
name: ufw
state: present
- name: Set default policies
ufw:
default: deny
direction: incoming
- name: Allow SSH from admin IP
ufw:
rule: allow
proto: tcp
from_ip: 203.0.113.18
port: 22
- name: Allow HTTP/HTTPS
ufw:
rule: allow
port: "{{ item }}"
loop:
- 80
- 443
- name: Enable UFW
command: ufw enable
args:
creates: /etc/ufw/ufw.conf
这样可保证在新服务器初始化过程中就完成了防火墙策略的标准化交付。
七、高级策略:限制端口速率与日志分析集成
为减少暴力破解行为,我会使用如下命令配置速率限制:
sudo ufw limit ssh/tcp comment 'Limit SSH Brute-force'
同时开启UFW日志记录:
sudo ufw logging on
日志默认记录在 /var/log/ufw.log,我使用Logrotate每7天归档,并通过Grafana + Loki集中查看失败连接趋势。
八、在生产环境中坚持“最小暴露”原则
部署完UFW之后,结合Zabbix对端口监控策略的报警,我能清晰感知到未授权访问行为的变化。UFW虽然轻量,但在Ubuntu/Debian环境下已足够应对中小规模的公网暴露节点安全防护。更重要的是,借助于它清晰的规则语法与广泛的社区支持,我能将其轻松集成进日常的IaC(Infrastructure as Code)流程之中,为项目安全打下坚实基础。
如需进一步集成IP段黑名单、基于接口的规则动态生成等高级策略,可以考虑配合nftables或使用基于UFW规则模板的拓展脚本,在不牺牲易用性的前提下实现灵活防御策略。











