撰于 阅读 4

飞牛NAS IPv6防火墙规则持久化解决方案

飞牛NAS的IPv6防火墙放行持久化解决方案

引言

本文旨在分享一个通过飞牛OS(NAS)实现IPv6防火墙规则持久化的方法。由于光猫(路由器)通常不允许用户直接修改或保存防火墙规则,一旦重启或远程修改,之前的设置就会丢失。本文提出的方法利用飞牛OS的全天候服务器功能,通过定时任务模拟用户Telnet操作,从而实现IPv6防火墙规则的持久化。

解决方案步骤

步骤1:连接光猫Telnet并提升权限

  1. 获取光猫MAC地址:通常贴在光猫背面或通过电脑终端查询。
  2. 处理MAC地址:将MAC地址中的“-”去掉,全部转换为大写。
  3. 开启光猫Telnet服务:通过浏览器访问 http://192.168.1.1:8080/cgi-bin/telnetenable.cgi?telnetenable=1&key=处理后的MAC地址,网页会显示“Telnet服务开启”字样。
  4. 连接光猫:使用命令行 telnet 192.168.1.1 并输入用户名和密码(默认为 telnetadmin,密码为FH-nE7jA%5m+处理后MAC后6位)。
  5. 提权:输入 su 并输入超级用户密码(默认为 Fh@+处理后MAC后6位)。

步骤2:定义IPv6防火墙放行规则

  1. 查看现有规则:使用命令 ip6tables -nvL --line-number 列出所有规则。
  2. 分析规则:根据需要添加放行规则。例如,放行飞牛桌面端口5666:

    ip6tables -I FORWARD_FIREWALL 4 -p tcp --dport 5666 -j ACCEPT
    ip6tables -I FORWARD_FIREWALL 4 -d 240e:3a3:336f:aad1:130:b741:1282:9009 -p udp --dport 5666 -j ACCEPT
  3. 测试规则:通过手机流量测试能否连接到NAS,确保规则生效。

步骤3:保存现有规则和脚本

  1. 选择可写路径:例如 /usr/local/ct
  2. 保存规则:使用命令 ip6tables-save > /usr/local/ct/ip6tables/rules.v6
  3. 创建恢复脚本:创建文件 /usr/local/ct/ip6tables_restore.sh 并写入以下内容:

    #!/usr/bin/env bash
    sleep 20
    ip6tables-restore < /usr/local/ct/ip6tables/rules.v6
    echo "$(date): ip6tables_enable" >> /usr/local/ct/ip6tables_restore.log
    chmod +x /usr/local/ct/ip6tables_restore.sh
  4. 测试脚本:删除几个规则后运行脚本,检查规则是否恢复。

步骤4:创建模拟Telnet操作的脚本

  1. 安装Expect:如果未安装,先通过终端安装。
  2. 编写脚本:创建文件 telnet_restore.sh 并写入以下内容:

    #!/usr/bin/env bash
    # 开启光猫Telnet服务
    curl_output=$(curl -s -w "%{http_code}" "http://192.168.1.1:8080/cgi-bin/telnetenable.cgi?telnetenable=1&key=7CC74A08E38C" -o /dev/null)
    
    # 使用Expect自动化Telnet会话
    /usr/bin/expect <<EOF
    set timeout 30
    log_user 1 # 显示完整交互过程
    
    spawn telnet 192.168.1.1
    expect {
        "Login:" {
            send_user "
    连接成功,等待登录
    "
            send "telnetadmin\r"
        }
        timeout {
            send_user "
    连接超时,请检查网络
    "
            exit 1
        }
        eof {
            send_user "
    连接被拒绝,Telnet可能未开启
    "
            exit 1
        }
    }
    
    # 登录流程
    expect {
        "Password:" {
            send_user "用户名验证成功
    "
            send "FH-nE7jA%5m08E38C\r"
        }
        timeout {
            send_user "
    等待密码提示超时
    "
            exit 1
        }
    }
    
    # 简化流程:等待任意响应后直接提权
    expect {
        timeout {
            send_user "
    登录响应超时
    "
            exit 1
        }
        eof {
            send_user "
    连接意外关闭
    "
            exit 1
        }
        "*" { # 匹配任何输出
            send_user "检测到系统响应,开始提权
    "
        }
    }
    
    # 直接尝试提权
    send_user "步骤3: 尝试提权...\n"
    send "su\r"
    
    # 等待提权密码提示
    expect {
        "Password:" {
            send_user "提权请求成功
    "
            send "Fh@08E38C\r"
        }
        timeout {
            send_user "
    等待提权密码提示超时
    "
            exit 1
        }
    }
    
    # 检查提权结果
    expect {
        "#" {
            send_user "提权成功
    "
        }
        "su: Authentication failure" {
            send_user "
    提权失败,密码错误
    "
            exit 1
        }
        timeout {
            send_user "
    提权超时
    "
            exit 1
        }
    }
    
    # 执行恢复脚本
    send_user "步骤4: 尝试执行脚本...\n"
    send "/usr/local/ct/ip6tables_restore.sh\r"
    
    # 检查执行结果
    expect {
        "#" {
            send_user "脚本执行完成
    "
        }
        "not found" {
            send_user "
    脚本不存在或路径错误
    "
            exit 1
        }
        "Permission denied" {
            send_user "
    权限不足,无法执行脚本
    "
            exit 1
        }
        timeout {
            send_user "
    脚本执行超时
    "
            exit 1
        }
    }
    
    # 退出
    send_user "退出连接...\n"
    send "exit\r"
    expect eof
    EOF
    
    # 检查整体执行结果
    exit_status=$?
    if [ $exit_status -eq 0 ]; then
        echo "所有操作成功完成 $(date)"
    else
        echo "执行过程中出错 (错误码: $exit_status) $(date)"
    fi
  3. 测试脚本:在电脑上编辑并保存脚本,然后在终端中测试。

步骤5:设置飞牛定时任务

  1. 使用1panel或其他工具设置定时任务:运行刚刚编写的脚本。
  2. 设置定时任务:在1panel中设置定时任务,运行脚本,确保脚本路径正确。
  3. 测试定时任务:点击测试,查看运行报告,确保任务成功执行。

总结

通过上述步骤,我们可以实现IPv6防火墙规则的持久化,而不受光猫重启或远程修改的影响。这种方法充分利用了飞牛OS的全天候服务器功能,通过模拟用户Telnet操作,确保了规则的持久性。此外,飞牛OS还提供了丰富的图形化管理方式,使得管理更加便捷。

参考资料


评论已关闭