前言
在tls伪装为主流代理方案的时代,一个典型的v2ray构建通常是WebSocket协议+TLS传输+Web站点伪装(特殊情况下还会前置CDN抵抗针对源IP的封锁),很多用户选择使用一个Web服务器管理面板一举两得地作为伪装站点内容同时管理服务器、监控运行状态。但我相信还是有不少用户抵触诸如1Panel、宝塔面板之类缺乏中立性背景或存在后门隐患的面板。本文为存在顾虑的站长们推荐由红帽公司推出并用于自家商业发行版RHEL的Cockpit。
安装与配置
Cockpit已经被收录在常见发行版的包管理器中,例如debian-based发行版就可以直接用命令sudo apt install cockpit
完成安装。
可选功能组件
容器管理
除了cockpit本体,为了管理容器我们还需要安装其功能插件cockpit-podman
(当然,服务器也必须安装有podman)。
Cockpit在理念上与红帽公司本家的发行版一脉相承,一般用户感知最强的容器管理服务就早早地从docker转向了podman。但是这种转变对于容器的部署与管理并没有影响,Podman完全兼容docker容器镜像且二者在指令语法上的几乎完全相同。podman具备允许用户以无根方式部署低权限容器服务、无需依赖daemon守护进程、支持一键无痛更新容器且支持服务化自动更新而无需watchtower等优点。
2FA认证
默认状态下Cockpit直接通过服务器Linux系统的用户名密码进行登录,但这在充斥着暴力破解的公网环境是十分危险的。所幸Cockpit支持Linux原生PAM身份认证框架,因此也可以使用libpam
的2FA令牌认证插件。
本文中我们将以google-authenticator
为例,在debian-based发行版中,它的包名是libpam-google-authenticator
。完成安装后使用google-authenticator -t -d -f -r 3 -R 30 -W
命令生成一个带有密钥的二维码,在智能手机上安装诸如google authentificator之类的令牌管理器扫描此二维码,通过向导它会要求您输入密钥(或者刷新二维码重试)以完成令牌激活。之后您可以找到记载了该令牌紧急恢复码的文本文件~/.google_authenticator
,请妥善保管。
接下来我们需要使用以下命令改变Cockpit的登录策略为必须使用2FA令牌:
1 | echo "auth required pam_google_authenticator.so" >> /etc/pam.d/cockpit && systemctl restart cockpit.service |
修改访问链接
正常情况下,Cockpit服务会运行在本地9090
端口上,我们需要使用SSL加密访问面板的通信避免敏感数据泄露,这通常由http server配合acme证书申请服务来完成,本文中我们使用Caddy签发证书和反向代理。有关此工具的介绍和安装不再赘述。
为了体现Cockpit的寄宿灵活性,我们使面板与服务器上网站共用域名blog.mydomain.com
。首先新建一个面板配置文件声明该网址:
/etc/cockpit/cockpit.conf
1 | [WebService] |
Caddy反代参数应匹配面板:
/etc/caddy/Caddyfile(节选)
1 | { |
补全tls证书配置项、创建日志文件/log/path/error.log
和/log/path/access.log
后重启服务,此时https://blog.mydomain.com:8443/mgmt
即为Cockpit管理面板的访问链接。