UFW 常用用法指南
概述
UFW (Uncomplicated Firewall) 是 Ubuntu 系统中简单易用的防火墙工具。本文档详细介绍了 ufw 的基本命令、规则配置、高级用法以及在 Kubernetes 环境中的应用。
基本命令
启用和禁用
# 启用 ufw
ufw enable
# 禁用 ufw
ufw disable查看状态
# 检查 ufw 状态
ufw status
# 查看详细状态
ufw status verbose重载配置
# 重载 ufw 配置
ufw reload配置规则
允许端口
# 允许 SSH 端口(22/tcp)
ufw allow 22/tcp
# 允许 HTTP 端口
ufw allow 80/tcp
# 允许 HTTPS 端口
ufw allow 443/tcp拒绝端口
# 拒绝 HTTP 端口(80/tcp)
ufw deny 80/tcp删除规则
# 删除允许 SSH 端口的规则
ufw delete allow 22/tcp高级用法
基于 IP 地址的规则
IP 白名单
可以限制特定 IP 地址或子网访问特定端口,提高安全性。
允许特定 IP 地址访问特定端口:
# 允许 IP 地址 192.0.2.10 访问 SSH 端口
ufw allow from 192.0.2.10 to any port 22允许特定子网访问特定端口:
# 允许子网 192.0.2.6/16 访问 MySQL 端口(3306)
ufw allow from 192.0.2.6/16 to any port 3306基于接口的规则
# 允许 eth0 接口上的 HTTP 流量
ufw allow in on eth0 to any port 80允许特定协议
# 允许 ICMP(ping)流量
ufw allow proto icmp默认策略配置
安全建议
建议将默认入站策略设置为拒绝,仅开放必要的端口。
# 设置默认拒绝入站流量(推荐)
ufw default deny incoming
# 设置默认允许出站流量
ufw default allow outgoing
# 设置默认允许入站流量(不推荐)
ufw default allow incoming
# 设置默认拒绝出站流量
ufw default deny outgoing日志记录
# 启用日志记录
ufw logging on
# 设置日志记录级别(off, low, medium, high, full)
ufw logging highKubernetes 防火墙配置脚本
完整示例
以下脚本只展示基本顺序和来源限制;CNI、Pod CIDR、Service 暴露方式不同,完整规则参见 防火墙配置。
#!/bin/bash
ADMIN_CIDR="192.0.2.0/24"
NODE_CIDR="192.0.2.1.0/24"
CONTROL_PLANE_CIDR="192.0.2.1.0/28"
# 设置默认策略
ufw default deny incoming
ufw default allow outgoing
# 必须先允许管理入口
ufw allow from "$ADMIN_CIDR" to any port 22 proto tcp
# Kubernetes 基本通信;替换为实际网段
ufw allow from "$NODE_CIDR" to any port 6443 proto tcp
ufw allow from "$CONTROL_PLANE_CIDR" to any port 2379:2380 proto tcp
ufw allow from "$CONTROL_PLANE_CIDR" to any port 10250 proto tcp
# 仅在使用 Flannel VXLAN 时需要
ufw allow from "$NODE_CIDR" to any port 8472 proto udp
# 检查无误后再启用
ufw show added
ufw --force enable
# 显示防火墙状态和规则
ufw status verboseUFW Limit 功能
概述
ufw limit适合降低 SSH 等 TCP 登录服务的暴力尝试频率。它使用固定的简单阈值,不是通用限流器,也不能替代反向代理、WAF 或 DDoS 防护。
常见用法
防暴力破解
使用
limit可以降低 SSH 密码或密钥猜测频率,但仍应优先使用密钥认证、禁用 root 密码登录并限制来源地址。
限制常用端口
# 限制 SSH 端口(22/tcp)- 防止暴力破解 SSH 密码
ufw limit 22/tcp
# 不建议对正常 HTTP/HTTPS 流量直接使用 ufw limit,容易误伤浏览器并发连接Limit 高级用法
限制特定 IP 地址
# 限制特定 IP 地址 192.0.2.10 对 SSH 端口的连接尝试
ufw limit from 192.0.2.10 to any port 22 proto tcp限制特定子网
# 限制子网 192.0.2.6/16 对 SSH 端口的连接尝试
ufw limit from 192.0.2.6/16 to any port 22 proto tcp限制特定接口
# 限制 eth0 接口上的 SSH 连接尝试
ufw limit in on eth0 to any port 22/tcpufw limit 面向 TCP 新连接,不支持用 ufw limit proto icmp 限制 ping。ICMP 策略需要在 UFW 的底层规则中单独设计,并保留路径 MTU、IPv6 邻居发现等必要 ICMP 类型。
管理 Limit 规则
查看规则
ufw status verbose删除 Limit 规则
# 删除对 SSH 端口的限制规则
ufw delete limit 22/tcp防暴力破解配置脚本
完整示例
以下脚本用于限制 SSH 新连接频率,不是 HTTP DoS 防护脚本。
#!/bin/bash
ADMIN_CIDR="192.0.2.0/24"
# 先添加管理规则
ufw limit from "$ADMIN_CIDR" to any port 22 proto tcp
# 限制特定 IP 地址的连接尝试
ufw limit from 192.0.2.10 to any port 22 proto tcp
# 限制特定子网的连接尝试
ufw limit from 192.0.2.6/16 to any port 22 proto tcp
# 限制特定接口的连接尝试
ufw limit in on eth0 to any port 22/tcp
# 检查后再启用或重载
ufw show added
ufw --force enable
# 显示防火墙状态和规则
ufw status verbose总结
最佳实践
ufw limit是防止暴力破解和 DoS 攻击的强大工具- 不仅适用于 SSH 端口,还可用于其他服务的保护
- 合理配置
ufw limit规则可显著提高系统安全性- 建议对所有对外暴露的服务端口启用 limit 功能
相关文档
返回: Kubernetes