Skip to content

Commit

Permalink
ct101: Add some info about CAS-shield
Browse files Browse the repository at this point in the history
  • Loading branch information
iBug committed Jun 4, 2024
1 parent 0ae8237 commit 4e9d226
Showing 1 changed file with 36 additions and 6 deletions.
42 changes: 36 additions & 6 deletions docs/servers/ct101.md
Original file line number Diff line number Diff line change
Expand Up @@ -135,19 +135,20 @@ location /vscode/ {

容器里有一个 webhook 服务器,从 GitHub 接收用户文档仓库 [USTC-vlab/docs][user-docs] 的更新通知并拉取更新。

代码曾经是用 [Ruby Sinatra][sinatra] 写的,后来换成了 Go,参见 `/root/webhook/main.go`(或[这个 Gist](https://gist.github.com/iBug/34caff517617bfd0de2205d2466a3b78)
代码曾经是用 [Ruby Sinatra][sinatra] 写的,后来换成了 Go,参见 [ustclug-dev/webhook-go](https://github.com/ustclug-dev/webhook-go) 和服务器上的 `/etc/webhook-go.yml`

由于该 webhook 过于简单,它自己甚至没有一个 Git 仓库做版本管理(
[sinatra]: https://sinatrarb.com/
[user-docs]: https://github.com/USTC-vlab/docs

!!! info "注意"

这个 webhook 前面还是套了一层 Nginx 的,不是直连的
这个 webhook 前面还是套了一层 Nginx 的,不是直连的

## Grafana 与监控、统计 {#grafana}

### 安全维护 {#grafana-security}

根据相关要求,grafana 限制仅允许校园网访问。尽管如此,我们仍然需要保证 grafana 始终处在安全的最新版本。建议维护者使用 RSS 订阅 <https://grafana.com/tags/security/index.xml>,在有安全通知发布后检查版本并及时升级。
根据相关要求,Grafana 限制仅允许校园网访问,但我们仍然需要保证 Grafana 始终处在安全的最新版本。建议维护者使用 RSS 订阅 <https://grafana.com/tags/security/index.xml>,在有安全通知发布后检查版本并及时升级。

升级步骤:

Expand All @@ -157,5 +158,34 @@ location /vscode/ {

其他配置未完待续。

[sinatra]: https://sinatrarb.com/
[user-docs]: https://github.com/USTC-vlab/docs
### 限制校外访问 {#external-access}

采用与 VS Code 反代相同的方案,这次是将 CAS 用户名和过期时间放在一起 HMAC-SHA1 签名,格式为 `username/timestamp+signature`

校外用户访问 Grafana 时,会展示一个 403 页面并提示登录。Nginx 会将 `/ibug-auth` 转发给后端 Go 程序,后端程序会请求 `https://passport.ustc.edu.cn/serviceValidate` 验证 ticket,生成签名过的 cookie 并重定向回来。

对某个 location 启用校外 CAS 认证,只需要在当前 location 内 `include snippets/nginx-pass-location`,并在外层的 server 块中 `include snippets/nginx-pass` 即可。

```nginx title="/etc/nginx/snippets/nginx-pass"
location = /403-nginx-pass.html {
root /srv/www/html;
sub_filter "${dollar}host" "$http_host";
sub_filter_last_modified on;
sub_filter_once off;
}
location = /ibug-auth {
proxy_pass http://127.0.0.1:8002;
include snippets/proxy-common;
}
```

```nginx title="/etc/nginx/snippets/nginx-pass-location"
error_page 403 /403-nginx-pass.html;
set_by_lua_file $nginx_pass /etc/nginx/lua/nginx_pass.lua;
set $nginx_pass_status "$ustcnet:$nginx_pass";
if ($nginx_pass_status = "0:missing") { return 403; }
if ($nginx_pass_status = "0:invalid") { return 403; }
if ($nginx_pass_status = "0:failed") { return 403; }
if ($nginx_pass_status = "0:expired") { return 403; }
```

0 comments on commit 4e9d226

Please sign in to comment.