我们正在构建一个用于 Unifi (v3-beta) 的登录页面。登录页面应显示一个 Facebook(以及稍后的 LinkedIn)按钮以进行登录。
在他们使用 fb 登录(或允许我们的应用程序)后,他们就可以无限制地访问互联网。
我们可以使用以下命令将 Facebook 的 IP 地址列入白名单:https://developers.facebook.com/docs/ApplicationSecurity/#facebook_scraper
Facebook 使用 Akamai 作为 CDN。但对于 Akamai 来说,这并不容易。他们拥有更多 IP 并且有不同的 AS 编号。
有没有办法获取“fbstatic-a.akamaihd.net”后面的所有 IP 列表?
# nslookup fbstatic-a.akamaihd.net
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
fbstatic-a.akamaihd.net canonical name = fbstatic-a.akamaihd.net.edgesuite.net.
fbstatic-a.akamaihd.net.edgesuite.net canonical name = a1168.dsw4.akamai.net.
Name: a1168.dsw4.akamai.net
Address: 195.10.11.64
Name: a1168.dsw4.akamai.net
Address: 195.10.11.43
我们是否应该将 Akamai 的所有网络(数千个 IP)列入白名单?
对此最好的解决办法是什么?
答案1
Akamai 会进行基于 DNS 的全局负载平衡,因此您的 nslookup 只会为您提供众多可能结果中的一组结果。依赖这些结果会非常不可靠,因为路由可能会发生变化,Akamai 可能会重新分配资源等。
将 Akamai 的所有网络列入白名单是其中一种方法。
另一种方法是使用 squid 构建透明代理,然后根据 URL 配置 ACL(即 URL 的主机名部分必须是“fbstatic-a.akamaihd.net”)。但是,透明代理与 SSL 配合使用效果不佳,因此您可能需要通过 DHCP 公布代理设置(例如使用 PAC 文件)
答案2
我发现一个有用的选项是向访客提供临时访问权限并要求他登录才能继续访问。
如果你想了解确切的实施情况,请查看我的门户https://github.com/unifispot