fangpsh's blog

如何搭建一个高匿名的内部论坛

入职腾讯的时候,同学们给我推荐了一个App:同事, 这个App 为同事之间提供了匿名交流的平台,各种高压线、污秽色情的信息络绎不绝,相当刺激。

这个App 17年后期就出现HTTPS 证书过期、短信通道欠费收不到短信等问题,看起来要倒闭。有时候在想如果要搭建一个替代品,该如何平衡匿名性,又能验证是腾讯员工,我会怎么做,最后想了一个折中的办法。

tongshiApp

前提:员工不信任论坛管理员。

邮件列表

一开始的想法是通过邮件列表,因为邮箱还能匿名注册,而且有各种各样的移动客户端。怎么验证员工身份?无论是工作邮箱发验证码还是什么,只要涉及员工工作邮箱,服务端就有可能记录对应关系。或者通过邀请制度?又感觉不够收敛。做一个网站,只有内网可以访问,然后每日生成邀请码?Bingo,突然想到可以限制注册的来源,限制内网注册即可。

Flarum

没做邮件列表,基于Flarum开始搭建。

域名:免费的.tk 域名玩一玩,开隐私保护,tongshi.tk。
服务器地址隐藏:cloudflare 免费CDN,全站开启。

收集腾讯内网出口的IP 地址范围,三个段:

14.17.22.0/24
103.7.28.0/22
103.7.29.0/24

开启HTTPS 支持,防止在公司内网访问,被中间人监听 🙈 。

由于使用了CloudFlare 做全站CDN,遇到一个问题,没法校验客户端IP,2个解决方法:

map $http_cf_connecting_ip $allowed {
    default deny;
    ~\s*14.17.22.*$ allow;
    ~\s*103.7.28.*$ allow;
    ~\s*103.7.29.*$ allow;
}

测试了一下,客户端自己伪造这个头,无效,还是会被CloudFlare 重写为正确的客户端IP。

安装插件reflar/user-management,关闭邮箱注册。

Disable email registration

在注册接口上限制一下:

location /api/reflar/usermanagement/register {
    if ( $allowed = 'deny' ) {
        return 403;
    }
    try_files $uri $uri/ /api.php?$query_string;
}

搞定。

tongshi-tk

试验一下想法,过三天这台机器就到期,关了。

总结一下思路,通过办公网出口IP 做注册限制,较宽松的员工认证手段,又保证了一定的匿名性。

当然如果公司自己愿意做的话,在内网搭就非常简单了。然而这东西对于公司来说是洪水猛兽,审查还来不及。腾讯内网的乐问有匿名发帖功能,然而又有几个人信任匿名的安全性呢。