一、原理
- 每个设备都有一个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"随机生成

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工具
- 电脑端如chrome浏览器(其他浏览器只要支持这类的插件都行)可以使用第三方插件来修改:User-Agent Switcher and Manager
- 如下图,我们需要更改的是蓝色字体部分,使用上面方法cf中给的UA或者nginx的map中的字符串找个位置填进去,点击右下角"Appy(all windows)",弹出提示更改成功后再点击左下角"Options",需要设置下影响的范围,进入界面可以看到第二张图,选择白名单模式,编辑好后拉到最下面点击"save",这样更改的UA只会影响到列表中的网站


- 手机端有许多支持自定义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
如果有其他方法还请补充
帮顶
github登入就行了
给网页加上登录访问就行了
把shell禁止掉不就行了
@21guns #1
@FCB #2
这里的情况是防止如果有人获取到你的cookie之后登录
@pipitsl #3
所以我既要又要喽
直接设置只允许指定ip访问网站
@风为裳 #6
本地没有固定ip,肯定要经过一层代理
@holzora #7 这好办,看我帖子可解你的问题
@FCB #8
对于服务器访问你这个确实可以,