Recently in Distributed Computing Category

Google 在十年前提出了一套名为 BeyondCorp 的零信任网络的安全方案。 这套方案想要完整地实现还是有一定门槛的,在这种模型下,企业内网不再作为一个安全边界存在,相反即使在内网进行的访问也必须进行和外网同样的鉴权与访问控制。 最终的改造方向是内网不再是一个特权网络,每个终端上部署的客户端证书主要是作为一项身份信息来使用。

在 BeyondCorp 方案中对用户比较可见的一项便是统一登录认证 SSO 和基于用户身份进行访问控制的反向代理。之前考虑过许多其他方案,包括使用 nginx 自己山寨一套,不过后来听 @yegle 同学的建议, 直接用 Pomerium 来实现了一套鉴权反向代理,这里把大致过程记录一下。

首先是安装。 FreeBSD 没有对应的 port,于是 做了一个。新用户可以直接用 pkg install pomerium 来安装了。

必须配置的一些选项包括 pomerium_enable (显然)。如果使用 Pomerium 来的做 https 服务,那么还需要配置 pomerium_cert_file(指向一个 wildcard 证书)和 pomerium_cert_key_file。除此之外, pomerium_shared_secret 和 pomerium_cookie_secret 应分别设置为两个随机串,不过如果没设置的话系统会自动每次启动时生成新的随机串。需要注意的是,假如需要使用标准的 https 端口 443,如果以系统默认的非特权用户来运行 Pomerium 的话,需要将 net.inet.ip.portrange.reservedhigh 设为小于 443 的值才行。

然后是配置。OAuth 2.0 需要一个回调 URL,Pomerium 中这个可以是 https://authenticate.corp.{example.com}。在 IdP (如 Google、Azure等等)完成身份验证之后,IdP会将用户转回这个URL完成后续的设置。

IdP相关的主要设置是 idp_provider、idp_client_id 和 idp_client_secret,后两项信息要从 IdP 那里获得。如果 IdP 提供了群组功能,可能还需要进行一些额外的设置,例如 G Suite 就要求服务账户必须能够以某种管理员的身份运行。

代理方面,在代理服务器后面受其保护的服务器应 验证 Pomerium 的请求头签名。除此之外,代理的配置其实是很简单的,如果是比较小的系统,用 allowed_users 就足够了。大一些的系统可以用 allowed_domains 和 allowed_groups。另一个潜在的坑是要注意后端服务器不要在做 redirect 时回自己的 URL,如果发生这种情况,需要把后端服务改对或者至少搞一层重写。

霍总几天前发表了一篇blog, Google的社会化梦想与Reader。我仔细想想,似乎也不全是 Google 的问题。

有人说,Google要做的是大众产品,而Reader是小众产品,哪怕它已经成为了半专业的工具,也并不会改变这个事实,甚至于,这反而是件火上浇油的事情。我基本上认同这个说法。

我认为很大程度上,用户的心态也是有问题的。 Google 做出强推 Google+,砍掉 Google Reader 的决定,背后自有其商业方面的考量,至于这决定是对,是错,从用户的角度你很难有立场说"Google这样做对了,或是这样做错了",能说的,最多也就是"Google这么做哥们很不爽"吧?

还有人去白宫网站发请愿。靠去白宫网站发个请愿,召集几万人签名是根本没用的,至少在我看来就是这样----想要改变一个公司基于商业考量做的决定,最有效的方法就是让这个决定看起来不那么符合其商业利益,其他一切一切的手段都是无关紧要的。

dovecot的全文搜索

| No Comments | No TrackBacks

试了一下这个基于 CLucene 的全文搜索,似乎还不错。这里记一下过程。

首先是给 dovecot 安装 Lucene 插件,用 FreeBSD port 来安装的话,只需 make config,选择 LUCENE 然后 portmaster dovecot 即可。

配置也还算容易,我之前已经做了索引与数据分开,因此并不需要单独的配置,只需在 dovecot.conf 中增加:

plugin {
  fts = lucene
  # Lucene-specific settings, good ones are:
  fts_lucene = whitespace_chars=@.
}

然后重启 dovecot,运行 doveadm index -A '*' 就行了。注意,-A需要userdb的支持。

日常维护方面,目前 dovecot 预设是在搜索的时候重新抓取索引,而邮件送达时则不会做任何其他处理。我目前用的解法是让 cron 每隔 11 分钟跑一次 doveadm index -A INBOX 来重做 INBOX 的索引。另外,用 FreeBSD 的 periodic 每天更新一次全部索引 (doveadm index -A '*'),并在每月做一次 doveadm fts rescan -A(这个其实并不是必须的,主要是防止出现直接操作Mailbox时出现不一致的情况)。

我国在最晚不晚于宋代发明了水密隔舱。所谓水密隔舱,是指将船体分成若干个互不相通的舱区,这样当一个或几个舱区进水时,整个船体仍然可以有足够的浮力而不致沉没。这是一项相当重要的发明,类似的设计思路在其他领域也有应用。

在计算系统中,往往也会采取类似的设计思想。例如,操作系统会对进程地址空间的访问提供隔离,这样当一个进程吐核的时候不会影响其他进程的运行。又比如,在设计安全方案时,采用分层、相互隔离的信任状实体,分隔特权服务和非特权服务,把绝大多数的输入处理放在非特权服务中运行。再比如,在设计大容量计算系统时,可以将高优先级的任务单独设计一个队列,并限制所有worker能够容纳的任务总数,在运营时以逐步提高上限的方式来避免出现超载导致大家都无法使用的情况。

总之,我不认为中国人在宋代就已经想出来的方法,到了21世纪还可以被中国人认为是「非常特别的系统」「应用的场合很少」「中国目前研究这种系统的人不多」的高精尖。这么想的人,是的,你也就配做个末学。

VirtualBox可以在远程运行,并把界面通过 ssh 的 X11 转发放到管理员的桌面。

FreeBSD 上可以用 port 来安装 VirtualBox:

# portsnap fetch update
# cd /usr/ports/emulators/virtualbox-ose
# make install clean

接着配置 VirtualBox 所需要的内核模块:

echo 'vboxdrv_load="YES"' >> /boot/loader.conf
echo 'vboxnet_enable="YES"' >> /etc/rc.conf.local

将需要使用VirtualBox的用户添加到vboxusers组:

# pw groupmod vboxusers -m delphij

安装 xauth:

# cd /usr/ports/x11/xauth
# make install clean

重启系统,或手工加载模块之后,就可以从远程 ssh 进来运行 VirtualBox 了:

desktop% ssh -Y vsvc.example.com # 【注1】
vsvc% VirtualBox

VirtualBox的管理界面会出现在客户端系统上(当然,在列出文件时仍然是服务器端的文件)。

在安装、调试之后,就可以用VBoxHeadless来启动远程的虚拟机了。

【注1】这里使用的是"Trusted Forwarding",如果远程主机不可信,这样做会提高安全风险。

DNS中的SRV记录

| 1 Comment | No TrackBacks

最近看代码时了解到的,顺手查了一下,在此留个记录:

SRV记录的作用是指明某域名下提供的服务。

例子:

_http._tcp.example.com. SRV 10 5 80. www.example.com

SRV后面项目的含义:

10 - 优先级,类似MX记录
5 - 权重
80 - 端口
www.example.com - 实际提供服务的主机名。

不过实际在Internet上用这个的似乎非常之少。

新浪科技 报道,受强烈地震影响,中美海缆、亚太1号、亚太2号海缆、FLAG海缆、亚欧海缆、FNAL海缆等多条国际海底通信光缆发生中断,中断点在台湾以南15公里的海域,造成附近国家和地区的国际和地区性通信受到严重影响。

以下场景纯属虚构,请勿对号入座。

技术:现在您的计算机名叫“COMPUTER-X5V89KP”,您需要我帮您做点什么吗?
客户:我需要让我这台计算机的计算机名叫“电脑”。
技术:很抱歉,这样做不太好,我建议您把计算机命名为“COMPUTER-X5V89KP”,这是因为您的计算机名中只能出现字母、数字和连字号(-),并且连字号不能出现在第一个字符的位置,否则可能会给您的使用带来困难……
客户(不耐烦,打断):电脑是你的还是我的?我就要让它叫“电脑”!
技术:好吧。

右下角的“WooCall”。

Junsu has mentioned SCTP, a stream protocol that is quite interesting. A KAME implementation for FreeBSD is available for years.

Google了一下发现无数模块的实现……

New P2P framework

| 2 Comments | No TrackBacks

Today I have some ideas about P2P application framework. Would check if there is any available ones and whether they can fulfil my ideas. Maybe I would start a project to implement these ideas in Python and/or C++.

Monthly Archives

Pages

OpenID accepted here Learn more about OpenID
Powered by Movable Type 5.2.11