logo NodeSeekbeta

哪吒面板安全加固,限定特定设备登录

一、原理

  • 每个设备都有一个user-agent(以下简称UA),这是网站识别访问设备的依据,UA可以自定义,因此我们可以通过自定义UA来限制访问的设备。

这个比限制ip登录简单方便一点,不过为了安全还请保管好自己的自定义UA
预览地址:https://view.kksk.io/login

二、方法(这里推荐第二种方法,使用nginx)

1. 使用cf来限制UA

  • 如果使用cf来代理网站,那cf域名管理安全性的waf可以自定义规则,按照图中填入"URL路径"与"用户代理"规则,两个规则的关系为"And",你也可以点击"编辑表达式",填入(http.request.uri.path in {"/setting" "/notification" "/cron" "/monitor" "/server" "/terminal" "/login" "/oauth2/login" "/oauth2/callback"} and http.user_agent ne "Mozilla/5.0 (Linux; Android 12; 9de359a9-0670-4bff-91bf-ace959289b23) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.6167.143 Mobile Safari/537.36"),这里包括括号一起,然后再点击"使用表达式生成器"即可,UA内容你也可以自定义,保证UA的唯一性
  • 其中"9de359a9-0670-4bff-91bf-ace959289b23"为自定义字符串,这里你可以直接运行"cat /proc/sys/kernel/random/uuid"随机生成
    image

2. 使用nginx的限制UA(推荐)

  • cf限制的URl只能从/login开始,如果有其他二级域名的网站有同样的/login也会被限制,所以我这里推荐使用nginx来限制UA。
  • 以下是Nginx的配置文件,
#if的依据,与server块同级
map_hash_bucket_size 256;
map $http_user_agent $is_allowed {
    default 0;
    "~*9de359a9-0670-4bff-91bf-ace959289b23" 1; #这里相对于cf好一点,只需要包含特定的字符串即可,不用写全部的UA,所以当你修改UA的时候只需要把这一串填入UA的某个位置就可以
}

server {

#其他配置文件

    location / {
        proxy_pass http://127.0.0.1:8008;
        proxy_set_header Host $http_host;
        proxy_set_header Upgrade $http_upgrade;
    }

    location ~ ^/(ws|terminal/.+)$ {
    proxy_pass http://127.0.0.1:8008;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
    proxy_set_header Host $http_host;
    }
#从这里开始,使用if判断UA,有一定的性能要求,不过哪吒面板一般是自己使用,应该问题不大吧(
    location ~ ^/(terminal|setting|notification|cron|monitor|server|login|oauth2/(login|callback))$ {
        if ($is_allowed != 1) {
	   rewrite ^ / last; #此处可以换成其他,如返回403:" return 403;"
        }
        proxy_pass http://127.0.0.1:8008;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header Host $http_host;
    }
#结束
}

三、自定义UA工具

  1. 电脑端如chrome浏览器(其他浏览器只要支持这类的插件都行)可以使用第三方插件来修改:User-Agent Switcher and Manager
  • 如下图,我们需要更改的是蓝色字体部分,使用上面方法cf中给的UA或者nginx的map中的字符串找个位置填进去,点击右下角"Appy(all windows)",弹出提示更改成功后再点击左下角"Options",需要设置下影响的范围,进入界面可以看到第二张图,选择白名单模式,编辑好后拉到最下面点击"save",这样更改的UA只会影响到列表中的网站
    image
    image
  1. 手机端有许多支持自定义UA的浏览器,我这里使用的是via浏览器,不过via浏览器有个bug,普通的get请求自定义UA没问题,但是post请求的UA不是自定义的......所以当使用到post请求比如哪吒面板的webshell时就会因为UA不对被封锁。其他的浏览器各位都可以去试试,下面的图片太大,自己点进去看吧。对了,手机端想要登录成功的话,需要把提供登录验证的网站如https://github.com 也设置和探针网站同样的UA
    https://static.kksk.io/image/convert/0ea2806e5cceff22e7c638acf1803c87.webp https://static.kksk.io/image/convert/502ec3d9bf127038e80fabf4a279c5d7.webp

如果有其他方法还请补充

12
12

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈用户数目📈

目前论坛共有72223位seeker

🎉欢迎新用户🎉