You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用iptables开放端口失败,求助Debian服务器端口切换脚本实现

嘿,别担心Linux经验不足的问题!我帮你整理了一个实用的bash脚本,用iptables快速切换游戏服务器的「维护模式」和「运行模式」,完全适配你的三个游戏服务器端口需求。

核心思路
  • 维护模式:仅开放必要的管理端口(比如SSH的22端口),拒绝其他所有外部连接,方便你进行服务器维护
  • 游戏运行模式:在保留管理端口的基础上,开放所有游戏服务器需要的TCP/UDP端口,让玩家正常连接
准备工作
  1. 先安装iptables(Debian默认可能已安装,保险起见执行):
    sudo apt update && sudo apt install iptables
    
  2. 保存当前iptables规则,避免操作失误导致连接异常:
    sudo iptables-save > /etc/iptables/rules.v4
    
脚本实现

创建一个名为game-server-switch.sh的脚本,内容如下:

#!/bin/bash

# -------------------------- 配置区 --------------------------
# 维护模式下允许的核心管理端口(比如SSH)
MAINTENANCE_PORTS="22/tcp"

# 游戏服务器端口配置
SERVER_A_PORTS="32000/tcp 32000/udp 32005/tcp"
SERVER_B_PORTS="" # 示例:"33000/tcp 33000/udp",按需补充
SERVER_C_PORTS="" # 示例:"34000/tcp 34000/udp",按需补充
# -----------------------------------------------------------

# 合并所有游戏端口
GAME_PORTS="$SERVER_A_PORTS $SERVER_B_PORTS $SERVER_C_PORTS"

# 检查是否以root权限运行
if [ "$(id -u)" -ne 0 ]; then
    echo "⚠️ 请以root权限运行此脚本(sudo ./game-server-switch.sh)"
    exit 1
fi

case "$1" in
    start)
        echo "🔄 正在切换到游戏运行模式..."
        # 重置现有iptables规则
        iptables -F
        iptables -X
        iptables -P INPUT DROP
        iptables -P FORWARD DROP
        iptables -P OUTPUT ACCEPT

        # 允许本地回环连接
        iptables -A INPUT -i lo -j ACCEPT
        # 允许已建立/相关的连接(比如服务器主动发起的请求回应)
        iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

        # 开放维护模式核心端口
        for port in $MAINTENANCE_PORTS; do
            proto=${port%/*}
            dport=${port#*/}
            iptables -A INPUT -p $proto --dport $dport -j ACCEPT
        done

        # 开放所有游戏服务器端口
        for port in $GAME_PORTS; do
            proto=${port%/*}
            dport=${port#*/}
            iptables -A INPUT -p $proto --dport $dport -j ACCEPT
        done

        echo "✅ 游戏运行模式已启用!所有游戏端口已开放。"
        ;;
    stop)
        echo "🔄 正在切换到维护模式..."
        # 重置现有iptables规则
        iptables -F
        iptables -X
        iptables -P INPUT DROP
        iptables -P FORWARD DROP
        iptables -P OUTPUT ACCEPT

        # 允许本地回环连接
        iptables -A INPUT -i lo -j ACCEPT
        # 允许已建立/相关的连接
        iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

        # 仅开放维护模式核心端口
        for port in $MAINTENANCE_PORTS; do
            proto=${port%/*}
            dport=${port#*/}
            iptables -A INPUT -p $proto --dport $dport -j ACCEPT
        done

        echo "✅ 维护模式已启用!仅保留管理端口开放。"
        ;;
    status)
        echo "📋 当前iptables INPUT规则详情:"
        iptables -L INPUT -v -n
        ;;
    *)
        echo "❌ 用法错误!正确用法:"
        echo "$0 {start|stop|status}"
        echo "  start: 切换到游戏运行模式(开放所有游戏端口)"
        echo "  stop: 切换到维护模式(仅开放管理端口)"
        echo "  status: 查看当前iptables规则状态"
        exit 1
        ;;
esac

# 可选:保存规则到文件,重启服务器后自动生效
# sudo iptables-save > /etc/iptables/rules.v4
使用说明
  1. 给脚本添加执行权限:
    chmod +x game-server-switch.sh
    
  2. 切换到游戏运行模式:
    sudo ./game-server-switch.sh start
    
  3. 切换到维护模式:
    sudo ./game-server-switch.sh stop
    
  4. 查看当前规则状态:
    sudo ./game-server-switch.sh status
    
额外提示
  • 如果希望重启服务器后规则自动生效,可以安装iptables-persistent包:
    sudo apt install iptables-persistent
    
    安装过程中会提示保存当前规则,之后重启服务器会自动加载。
  • 后续新增服务器B/C的端口时,直接修改脚本配置区的SERVER_B_PORTS和SERVER_C_PORTS即可,格式和服务器A保持一致。
  • 第一次切换维护模式前,务必确认SSH端口能正常连接,避免误操作导致无法远程登录服务器!

内容的提问来源于stack exchange,提问作者Selim Balci

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:05:43