教程[22] 飞塔防火墙(Fortigate)制作脚本自动更新 SSL VPN 的证书

开篇废话

最近收了个已经 EOL 的奇妙防火墙产品用于替换我一行都不会配的雅马哈路由器,在这里记录一下其中的一部分折腾步骤。
在这之前没用过这个厂商的产品,还算是学习了一下。

这是已经 EOL 的产品的手动配置,然而新版防火墙里面已经自带 acme 了,不过实际情况是 ip 可能还拿来做别的业务需求,因此 80 443 不能被防火墙占用,因此本文依然有参考价值¿

正文

思路

既然防火墙内没有办法自动签证书,我们就得安排一台机器定时传证书上去。

自动续证书

这里是自己机器的自动续费证书部分 这里没什么好说的了,安排 acme.sh / certbot 自己搞。
这里我用了 certbot (因为 Debian 自带)

certbot certonly --webroot -d [你的域名] --register-unsafely-without-email --agree-tos -w /var/www/html/

然后 Nginx 配置参考:

server {
        listen 80 default_server;
        location ^~ /.well-known/acme-challenge/ {
                root /var/www/html;
        }
        location / {
                return 301 https://$host$request_uri;
        }
}

计划任务:

systemctl enable certbot.timer

其它配置步骤省略。

防火墙内开通 API 账户

在 network / administrators 里面添加一个 api 账户,ACL 如下: ACL
这是目前能找到的最小权限,不过范围还是很大。

制作脚本上传

以下是适用于 certbot 的脚本,路径域名什么的有出入自己改:



输出
(不会有任何数据传到我服务器,可以 F12 自行验证)

大概脚本就是这样,主要是上传证书 /api/v2/monitor/vpn-certificate/local/import,然后更换 SSL VPN 里面的证书 /api/v2/cmdb/vpn.ssl/settings
然后依赖为 curl 和 jq (base64 应该都自带就不说了) 就这么简单的脚本也折腾了 1 小时+

然后本脚本还少了需要删除老证书的 gc 操作,这个应该无所谓,证书才多大。

计划任务

我们测试一下:

chmod +x cert2fw.sh
./cert2fw.sh

显示两个 status success 就代表 OK 了。
然后安排计划任务,每周上传一次证书过去防火墙。
这里我是直接丢文件夹里面,懒得配了,理论上是安排 certbot 签发证书后的 hook 才对:

mv cert2fw.sh /etc/cron.weekly

总结

总之这也还算运维的基本功,写写简单脚本方便以后操作。

另外这防火墙可能之后会出一系列的折腾回顾,尽情期待。