Linux路由补完计划06 广告屏蔽就是这么简单——Pi-hole篇

前言


在上上期中我介绍了使用AdGuard Home来过滤广告的方法,今天我再推荐一款同样好用的本地DNS及广告过滤工具——Pi-hole,相比于AdGuard Home来说,Pi-hole诞生更早,一开始它是为树莓派开发的一款广告过滤工具,在许多开发者的努力下,它被发扬光大了,也正因为这款工具的诞生,让我在过去那段时间里能让自己的移动设备免受广告的侵扰,以至于至今我还把它当成主力的广告过滤工具在我的软路由上默默的为全家手机服务

视频说明


Pi-hole是什么


Pi-hole的核心组件pihole-FTL实际上就是一个dnsmasq的分支,它相比于原版的dnsmasq在功能上有专门针对广告过滤的优化,它只是将过去需要手动进行的广告过滤规则进行了自动化配置;原版的dnsmasq可以通过address=这样的配置进行广告屏蔽,如果广告域名较多的话,那配置起来简直让人抓狂,而Pi-hole作为一款好用的工具简化了广告过滤规则的配置过程,真乃懒人之福音

搭建过程


由于Pi-hole的本质就是dnsmasq,为了不影响其正常的安装,在安装之前需要卸载掉本机已经安装的dnsmasq,这也是为什么我在上期视频中没有附加广告过滤部分的原因

前期准备

  • 备份dnsmasq配置并将其卸载:

执行命令systemctl stop dnsmasq将dnsmasq服务停止,之后就是将上次编写的配置文件给备份(实际上并不需要备份,基本上会自动生成),此处我使用mv命令,直接将整个目录重命名了,这样有两点好处:

1.备份

2.防止安装Pi-hole之后因为配置冲突造成启动失败

此处实际上应该还要卸载,只是我忘记了,大家记得要执行下述命令来进行dnsmasq的卸载apt-get autoremove dnsmasq -y

  • 安装必要的下载工具curl

安装Pi-hole的一键脚本需要用到,那就装呗,apt-get install curl -y

  • 配置代理

感谢伟大的GFW,装个国外的软件真心好痛苦,还好咱有代理可以用,export命令走起

一键安装

想要安装Pi-hole还是很简单的(这是现在,过去可是很坑的,动不动依赖就会出问题,当然大部分原因都是有伟大的GFW),官方直接提供了一键脚本

根据官方给出的命令,执行就是了curl -sSL https://install.pi-hole.net | bash

如果不出意外的话,基本上都能顺利的进入配置界面

安装配置

  • 在安装部分依赖之后,系统会自动进入配置的界面,如下图所示:

Pi-hole的一些说明之后就是正式的安装配置了

  • 选择提供服务的网卡,此处是LAN口的ens224
  • 选择上游服务器,现在图省事我直接使用了Google的,然后直接确定进入下一步
  • 广告过滤的策略,先保持默认吧
  • 选择IP类型,IPv4 OR IPv6,现在IPv6还有很多问题,暂时就只用IPv4
  • 确认一下网络设置情况,保证能够正常上网
  • 之后系统会询问是否需要安装web界面,小白必备,自然是需要的
  • 开启查询记录,此处我选择了记录全部内容

之后Pi-hole就会基于刚刚的配置开始自动安装,这期间需要下载一些组件,如果网络不好的话就有可能会失败,所以代理还是很有必要的

接下来就进入最后的一部分配置,包括防火墙,登陆密码等

  • 配置防火墙(如果没有启用防火墙,这边可以随意),建议安装Pi-hole需要用到的防火墙规则,默认会打开其所需要用到的端口:53674711~472080
  • 完成安装及显示登录密码,之后可以通过显示的登陆地址和登陆密码进行后台管理

后台管理


登陆

登陆地址在安装完之后会自动显示,其实就是两个网卡所对应的地址,默认直接输入http://ip/admin即可进入界面,如果没有在IP后面加上/admin,那默认会进入如下界面:

直接点击Did you mean to go to the admin panel即可进入后台界面,之后看到的就是基本的状态界面,上面可以直观的看到请求数,被拦截的查询等

这个界面只是状态展示,如果要进行管理,需要登录进去,点击左侧的Login进行登录,密码在Pi-hole安装完之后已经显示在界面上了

如果嫌自动生成的密码太难记,直接可以使用pihole -a -p命令进行修改,执行命令后输入两次新密码即可

登陆之后所有功能都会在左侧显示,状态界面显示的内容也会更丰富

功能配置

Pi-hole的大部分功能配置都是在系统设置中调整的,点击左侧的Settings选项,出现系统配置的几个选项卡

  • 上游DNS调整

选择DNS选项卡,在安装过程中我使用了谷歌的DNS服务器,此时我依然打算使用DNSCrypt-Proxy作为主要的上游服务器,取消谷歌的服务器的勾选,在**Custom 1(IPv4)**中填入DNSCrypt-Proxy的监听地址及端口,此处是127.0.0.1#5353

点击右下角的SAVE之后即可生效,同时在/etc/dnsmasq.d/目录下的配置文件也会出现相应的修改,由于pihole-FTL就是一个dnsmasq的增强版本,所以dnsmasq上使用的语法在它身上依然可以使用,vi /etc/dnsmasq.d/01-pihole.conf

此处可以看到服务器部分已经是自定义的那个服务器地址了

  • 启用DHCP功能

选择DHCP选项卡,勾选DHCP server enabled,并配置好起始和结束的IP地址,当然,也不要忘记把网关地址设置正确,同样的,保存之后就可生效,相应的在/etc/dnsmasq.d目录下也会生成对应的配置文件

此时DHCP功能的配置文件名是02-pihole-dhcp.conf

  • 添加合理的广告过滤规则

点击Blocklists查看默认的广告过滤规则,这些广告过滤规则并不符合中国用户的使用习惯,此处我建议全部取消前面的勾选

此处我推荐一个广告过滤规则的Github项目:neohosts

项目提供的几种类型的规则地址,我主要推荐如下两个,这两个任选其一即可,具体的不同可以查看项目的说明

直接复制规则的地址,填入Blocklists选项卡的规则地址位置,点击Save and Update使其生效即可

此时添加的规则已经可以满足轻量级的广告过滤需求了,当然,如果想要更加强力点的广告过滤能力,建议移植Adblock plus中的Easylistchina等规则,由于Pi-hole并不兼容Adblock plus的规则语法,所以只能移植其中收集到的广告域名,虽然功能上受限制了,但是也是对原有广告过滤功能的增强

/opt目录下新建一个脚本文件adblock.sh,输入如下内容:

1
2
3
4
5
6
7
curl -s -L https://easylist-downloads.adblockplus.org/easylistchina+easylist.txt https://easylist-downloads.adblockplus.org/malwaredomains_full.txt https://easylist-downloads.adblockplus.org/fanboy-social.txt > adblock.unsorted

sort -u adblock.unsorted | grep ^\|\|.*\^$ | grep -v \/ > adblock.sorted

sed 's/[\|^]//g' < adblock.sorted > adblock.hosts

rm adblock.unsorted adblock.sorted

保存并退出,然后执行bash ./adblock.sh,稍等片刻,之后就会生成一个包含大量域名的文件adblock.hosts

同样的在Blocklists中填写规则地址,由于adblock.hosts文件是本地文件,所以规则的地址需要变化一下,将http(s)://替换为file://,之后在后面跟上文件的完整路径即可,此处的规则地址是file:///opt/adblock.hosts

  • DNS查询分流

这个功能在上一期中已经介绍过,在/etc/dnsmasq.d目录下引入dnsmasq-china-list的配置文件即可,这里我依然使用软链接的方式进行添加,添加完成之后直接执行pihole restartdns即可重启Pi-hole服务

总结


至此Pi-hole算是搭建完成了,虽然广告过滤是使用了DNS解析过滤的方式,效果并不是特别好,但好处是不会影响网速,相比于浏览器插件而言,各有优缺点吧!

如果想要自定义一些域名的处理方式的话,在左侧的WhitelistBlacklist中可以手动进行调整,具体的就不展开了,大家有兴趣去自己尝试一下

言论自由之战:从中国审查制度的反乌托邦现实对全球之警示

via  https://here.news/story/aed0b2af?ver=0.02

在一个充满驱逐、拒绝和动荡的世界里,一个共同的主题浮现出来 - 声音的压制和审查制度的兴起。从中国到土耳其,从津巴布韦到莫桑比克,甚至在坦桑尼亚,个人权利和言论自由正受到攻击。中国国有银行的前董事长因非法活动和贿赂被开除。土耳其总统塔伊普·埃尔多安宣布他拒绝承认LGBT社区,同时土耳其军队在叙利亚对激进目标进行攻击。巴勒斯坦伊斯兰教组织哈马斯对以色列发动重大攻击,前马达加斯加总统马克·拉瓦洛马纳在支持者集会期间受伤。俄罗斯宣布其打算撤销核条约的批准。在危地马拉,支持民主的示威遭到镇压威胁。来自不同国家的代表聚集起来,要求释放委内瑞拉外交官亚历克斯·萨布,并谴责以色列对巴勒斯坦人的虐待。在津巴布韦,政治人物乔布·西卡拉被拘留超过500天,引发了对司法系统完整性的担忧。突尼斯的两名逃犯实施了一起武装抢劫,导致高级情报官员被解职。前莫桑比克第一夫人格拉萨·马歇尔指责执政党被以私利为先的人所控制。在坦桑尼亚,改革的承诺被对反对派的镇压和对新闻自由的限制所掩盖。津巴布韦布拉瓦约的手推车操作员面临着因新法律而失去生计的威胁。

在这种动荡的背景下,另一种形式的压制浮现出来 - 审查制度。前主流媒体工作者罗德尼·帕尔默讨论了审查对人民、民主和政府的影响。他认为审查是针对公民的一种强大武器,没有它,那些掌权者将一无所有。帕尔默强调了近年来媒体审查、机构审查和政府审查的普遍性。声音的压制和信息的限制进一步加剧了世界的不安和动荡。

将这些故事联系在一起的共同主题是言论自由的斗争和审查的后果。无论是通过驱逐、拒绝还是压制声音,其影响都会被个人、社会甚至整个国家感受到。争取言论自由的斗争变成了正义、透明和民主的保卫战。

在中国,言论自由之战呈现出反乌托邦的形式。由于审查,日常生活被政治化,使公共表达变得困难,并创造了许多禁忌。很难追踪国内可以和不可以说的内容。被审查的作家描述了审查和禁止某些概念是如何使作品变得难以理解。作者们在不一致和不连贯的修订中挣扎,段落被删除,整个作品被删除或锁定,个别词汇被打上星号。网民们试图使用模糊的字符组合来绕过审查,但自动审查可能很粗糙。敏感话题和政治术语被禁止,平台被迫自我审查或面临后果。国家反淫秽和非法出版物办公室甚至奖励举报违规行为的告密者。作者们自我审查,以避免作品被破坏或删除,读者们依靠相互理解的纽带在删减的行间阅读。尽管面临挑战,作者们仍决心继续写作和表达自己,抗拒审查的压迫性控制。

言论自由之战是一场全球性的斗争,跨越国界,影响着来自各行各业的个人。这是一场反对声音的压制、信息的限制和民主的侵蚀的斗争。从中国的反乌托邦审查到各国对异见的压制,共同的主题很清楚 - 需要保护和维护言论自由的基本权利。

《全球审查技术调查》

via: https://datatracker.ietf.org/doc/html/rfc9505.txt  

"《全球审查技术调查》是一份关于互联网审查方法的综合研究报告,主要关注用于阻止或损害互联网访问和通信的技术策略。报告分类讨论了互联网通信中的审查技术,包括网络层和应用层。它定义了与互联网审查相关的关键术语和概念,探讨了IP封锁、DNS篡改、数据包过滤和内容关键字过滤等方法。报告还讨论了深度包检测(DPI)和加密技术在规避审查中的作用,以及审查技术与对策之间的动态关系。此外,报告还考虑了审查的非技术方面,包括法律、政治和社会因素对审查技术实施的影响,以及这些方法对人权的影响。报告最后讨论了互联网审查的未来,强调了在这一领域继续进行研究和保持意识的必要性。"

文档中提到了中国审查技术的几个方面:

  1. DNS响应操作:在中国,对某些被审查的域名进行查询会导致伪造的DNS响应。通过一个例子来演示,在中国查询一个被审查和未被审查的域名会产生不同的结果:未被审查的域名没有响应,而被审查的域名会返回一个伪造的IP地址。

  2. 主动探测规避工具:中国已经开发出一种称为"主动探测"或"主动扫描"的有效技术来识别使用规避工具的主机。这种方法涉及审查者使用规避协议发起通信,以确定主机是否运行此类工具。

  3. 封锁维基百科:截至2019年5月,中国已经封锁了维基百科的所有语言版本。

  4. 使用深度包检测(DPI):中国的防火长城(GFW),作为世界上最大的审查系统之一,使用DPI来识别HTTP和DNS上的受限内容。DPI用于向连接中注入TCP重置包和错误的DNS响应。

  5. 网络断连:2009年,在新疆地区发生骚乱期间,中国切断了网络连接,以防止抗议活动的蔓延。

  6. 手动过滤和自我审查:在中国,互联网内容提供商(如谷歌或微博)需要获得营业执照,其中包括签署一份名为“中国互联网行业自律公约”的“自愿承诺”。不遵守可能会导致因违规内容而承担责任。这导致了一种自我审查形式,不希望发布的内容不太可能被发布。

  7. 对ESNI的HTTPS残留审查:中国采用了3元组和4元组残留审查机制的混合体,用于HTTPS与加密服务器名称指示(ESNI)的审查。

  8. DNS中毒事件:2014年1月,一个实施不当的DNS中毒尝试导致中国通过防火长城将所有请求重定向到单一域名,造成了重大的互联网服务中断。

  9. 使用“大炮”:中国使用一种名为“大炮”的系统发起分布式拒绝服务(DDoS)攻击,该系统与防火长城并列。这个系统将JavaScript代码注入到中国某搜索引擎的网页访问中,劫持这些用户代理向各种网站发送DDoS流量。

     

如何生成 GPT-4 arkose_token

via
https://linweiyuan.github.io/2023/06/24/%E5%A6%82%E4%BD%95%E7%94%9F%E6%88%90-GPT-4-arkose-token.html

 

以下逆向 JS 内容已过期,参考:https://github.com/acheong08/ChatGPT/issues/1431#issuecomment-1606145567

有另一种简单的方法生成 arkose_token:chatgpt-​arkose-​token-​api

当天,似乎上面的方法又失效了,所以还是先用回下面的方法

arkose_token 突然不检测了,但是还是先传着,保持和官网一样

又开始检测了

chatgpt-​arkose-​token-​api 复活,主要是借鉴了 xyhelper/​xyhelper-​arkose

把 html 页面放在服务器上运行,不行,会弹验证码

但是单独起个服务跑 html 页面,又可以,莫名其妙

(我自己测试,如果服务器上开启了 IPv6,会拿不到 token,原因未知)

服务健康程度监控页面:Health Status

方法已失效,不折腾了

更新视频,通过抓 har 包获取合法 token(这个方法已经存在很久了,但是最近比较忙,也基本弃坑了没用 GPT,所以鸽到现在更新)

原来本来就有更加方便的方法,之前没有注意,现在更新,无需额外再跑一个 token 服务

GPT-​4 对 arkose_token 的校验在最近几天里每天都改变很多次,有时早上提交代码,下午就失效,或者晚上提交,第二天失效




通过不断的试错,把所有缺失的参数全部补上,但是最后还是 403 了

于是,打算从源头出发,学习一下 JS 的逆向(本人 JS 相对新手,但是曾经也写过)

接口:https://tcr9i.chat.openai.com/fc/gt2/public_key/35536E1E-65B4-4D96-9D97-6ADB7EFF8147

FormData:
1
2
3
4
5
6
7
8

bda: ct + iv + s 的 base64 编码
public_key: 35536E1E-65B4-4D96-9D97-6ADB7EFF8147
site: https://chat.openai.com
userbrowser: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36
capi_version: 1.5.2
capi_mode: lightbox
style_theme: default
rnd: 随机数,小数点后有时 16 位,有时 17 位




其他参数都是写死,并且之前不传也可以,最近必须要传,并且还要传对,不然 403

重点就是在 bda 参数里,里面的内容是加密的

通过 F12,一步一步跟,发现了一些蛛丝马迹,最后调用的是这个方法来生成 bda 参数:ALFCCJS.encrypt(bx, bv + bw)




于是反推,如何生成 bx、bv 和 bw

bx 依赖 b5 和 bg

b5 是一个数组,里面的东西大部分都是写死的,除了一个时间戳




bg 写死的,本次测试不传也正常(未来可能有校验)

将 b5 数组转成字符串,就得到了 bx




bv 没什么好说的,就是当前浏览器 UA 写死




bw 不复杂,当前时间戳然后计算一下




最后执行加密方法,就能生成加密 bda

如果提示 ALFCCJS is not defined,执行下面 JS 将其初始化
1
2
3
4

const script = document.createElement("script");
script.type = "text/javascript";
script.src = "https://tcr9i.chat.openai.com/cdn/fc/js/6af2c0d87b9879cbf3365be1a208293f84d37b1e/standard/funcaptcha_api.js";
document.head.appendChild(script);







再设置到参数里调用接口就能拿到 arkose_token

GPT-​4 就 200 了




一开始看错了 bv 成 by,但是字幕烧录进去了,懒得改了,其实是 bx, bv, bw