UFW 防火墙端口管理一键脚本

本卡片记录服务器上用于快速放行和管理 UFW(Uncomplicated Firewall)端口规则的交互式 Bash 脚本,支持 TCP、UDP 以及双协议(Both)的快速切换和自动刷新生效。


一、 一键管理脚本 (dk.sh)

cat << 'EOF' > dk.sh
#!/bin/bash
 
echo "=========================================="
echo " UFW 端口快捷管理脚本 (支持双协议)"
echo "=========================================="
 
# 检查权限
if [ "$EUID" -ne 0 ]; then
  echo "❌ 错误: 请使用 root 权限运行此脚本。"
  exit 1
fi
 
# 获取用户输入
read -p "请输入需要开放的端口号 (1-65535): " PORT
if ! [[ "$PORT" =~ ^[0-9]+$ ]] || [ "$PORT" -lt 1 ] || [ "$PORT" -gt 65535 ]; then
    echo "❌ 错误: 端口号无效。"
    exit 1
fi
 
# 获取协议类型,增加 both 选项并作为默认值
read -p "请输入协议类型 (输入 tcp、udp 或 both,直接回车默认 both): " PROTOCOL
PROTOCOL=${PROTOCOL:-both}
 
# 将输入统一转换为小写,增加容错性
PROTOCOL=$(echo "$PROTOCOL" | tr '[:upper:]' '[:lower:]')
 
# 根据输入执行放行指令
if [[ "$PROTOCOL" == "both" ]]; then
    echo "正在放行端口 $PORT (同时包含 TCP 与 UDP) ..."
    ufw allow $PORT >/dev/null 2>&1
elif [[ "$PROTOCOL" == "tcp" || "$PROTOCOL" == "udp" ]]; then
    echo "正在放行端口 $PORT/$PROTOCOL ..."
    ufw allow $PORT/$PROTOCOL >/dev/null 2>&1
else
    echo "❌ 错误: 协议只能是 tcp、udp 或 both。"
    exit 1
fi
 
ufw reload >/dev/null 2>&1
 
echo "✅ 端口规则已成功添加!"
echo "--- 当前防火墙状态 ---"
ufw status
echo "=========================================="
EOF
 
chmod +x dk.sh

二、 常用防火墙管理命令

在没有使用脚本时,也可以通过以下 UFW 常用指令直接操作:

1. 基础状态管理

# 查看防火墙状态(含规则编号,便于删除)
ufw status numbered
 
# 启用防火墙
ufw enable
 
# 禁用防火墙
ufw disable
 
# 重载配置文件
ufw reload

2. 添加与放行规则

# 限制 SSH 爆破(30秒内有6次以上连接尝试将自动封禁该 IP 端口)
ufw limit 60621/tcp
 
# 仅允许指定 IP 访问某端口(安全加固必选)
ufw allow from *.*.*.100 to any port 3306 proto tcp

3. 删除规则

# 方法 A:按编号删除(推荐,先运行 ufw status numbered)
ufw delete 3
 
# 方法 B:直接用规则表达式删除
ufw delete allow 80/tcp

相关链接