#!/bin/bash

# 开放防火墙端口脚本

PORT=12240

echo "=== 开放端口 $PORT 的防火墙配置 ==="
echo ""

# 检查是否有 root 权限
if [ "$EUID" -ne 0 ]; then 
    echo "⚠ 需要 root 权限执行此脚本"
    echo "请使用: sudo $0"
    exit 1
fi

# 方法1: 使用 firewalld (CentOS 7+/RHEL 7+)
if command -v firewall-cmd &> /dev/null; then
    echo "检测到 firewalld，使用 firewalld 配置..."
    
    # 检查防火墙状态
    if systemctl is-active --quiet firewalld; then
        echo "✓ Firewalld 正在运行"
        
        # 添加端口
        echo "正在添加端口 $PORT/tcp..."
        firewall-cmd --add-port=$PORT/tcp --permanent
        
        # 重新加载配置
        echo "重新加载防火墙配置..."
        firewall-cmd --reload
        
        # 验证
        if firewall-cmd --query-port=$PORT/tcp | grep -q "yes"; then
            echo "✓ 端口 $PORT 已成功开放"
        else
            echo "✗ 端口开放失败"
        fi
        
        # 显示当前开放的端口
        echo ""
        echo "当前开放的端口:"
        firewall-cmd --list-ports
    else
        echo "⚠ Firewalld 未运行，尝试启动..."
        systemctl start firewalld
        systemctl enable firewalld
        
        firewall-cmd --add-port=$PORT/tcp --permanent
        firewall-cmd --reload
        firewall-cmd --query-port=$PORT/tcp
    fi
fi

# 方法2: 使用 iptables (CentOS 6/其他系统)
if command -v iptables &> /dev/null && ! command -v firewall-cmd &> /dev/null; then
    echo ""
    echo "检测到 iptables，使用 iptables 配置..."
    
    # 检查规则是否已存在
    if iptables -C INPUT -p tcp --dport $PORT -j ACCEPT 2>/dev/null; then
        echo "✓ 端口 $PORT 的规则已存在"
    else
        echo "正在添加 iptables 规则..."
        iptables -A INPUT -p tcp --dport $PORT -j ACCEPT
        
        # 保存规则
        if [ -f /etc/sysconfig/iptables ]; then
            iptables-save > /etc/sysconfig/iptables
            echo "✓ 规则已保存到 /etc/sysconfig/iptables"
        elif command -v netfilter-persistent &> /dev/null; then
            netfilter-persistent save
            echo "✓ 规则已保存"
        else
            echo "⚠ 请手动保存 iptables 规则"
        fi
        
        echo "✓ 端口 $PORT 已开放"
    fi
fi

echo ""
echo "=== 配置完成 ==="
echo ""
echo "请检查："
echo "1. 云服务器安全组是否开放 $PORT 端口"
echo "2. 测试外部访问: curl http://119.45.30.82:$PORT/api/cattle-data"
echo "3. 查看监听状态: netstat -tlnp | grep $PORT"

