あらすじ
Cloudflaredはとても便利なツールですがダッシュボードで紹介されてる方法でインストールすると色々危険です。
- rootとして実行される
- シークレットをコマンドライン引数として渡してるのでhtopとかで誰でも見れる
↑お前本当にセキュリティ企業かよ
いい感じのインストール方法を探して見つけたので書いておきます
1. apt(もしくはdnf)リポジトリからCloudflaredのバイナリをインストール
公式ページ の指示に従ってリポジトリを追加してインストールします。jammy
ですが普通に24.04でも動きました。
# Add cloudflare gpg key
sudo mkdir -p --mode=0755 /usr/share/keyrings
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null
# Add this repo to your apt repositories
echo 'deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared jammy main' | sudo tee /etc/apt/sources.list.d/cloudflared.list
# install cloudflared
sudo apt-get update && sudo apt-get install cloudflared
2. Tunnelのトークン発行
ダッシュボードのTunnel新規作成画面から適当に名前を設定してトークンを生成します。sudo cloudflared service install TOKEN
を実行しろとか出てきますが必要なのはTOKENの部分だけです。安全な場所にメモします。
3. サービスファイル生成
/etc/systemd/system/cloudflared.service
のような適当な名前でサービスファイルを作って以下の内容を書き込みます。
systemdのセキュリティ機能を活用して安全性を高めています。
[Unit]
Description=Cloudflare Tunnel
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
DynamicUser=true
# [YOUR_TOKEN]をダッシュボードで発行したトークンに変える
Environment=TUNNEL_TOKEN=[YOUR_TOKEN]
ExecStart=/usr/bin/cloudflared --no-autoupdate tunnel run --post-quantum
TimeoutStartSec=0
Restart=on-failure
RestartSec=5s
UMask=0077
LockPersonality=true
SystemCallArchitectures=native
SystemCallFilter=~ @privileged @clock @debug @module @mount @raw-io @reboot @swap @cpu-emulation @obsolete @chown @reboot
CapabilityBoundingSet=
RestrictNamespaces=true
MemoryDenyWriteExecute=true
PrivateDevices=true
PrivateTmp=true
ProtectHome=true
PrivateUsers=true
ProtectSystem=strict
NoNewPrivileges=true
ProtectKernelTunables=true
ProtectKernelModules=true
ProtectKernelLogs=true
ProtectControlGroups=true
ProtectClock=true
ProtectHostname=true
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
RestrictSUIDSGID=true
RestrictRealtime=true
ProtectProc=invisible
ProcSubset=pid
InaccessiblePaths=/var
IPAddressDeny=any
# localhost以外にプロキシする場合はそのアドレスを追加してください
IPAddressAllow=127.0.0.1
IPAddressAllow=127.0.0.53
# Cloudflaredがトンネル確立するときに使うCIDR
# ref: https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/deploy-tunnels/tunnel-with-firewall/
IPAddressAllow=198.41.128.0/17
IPAddressAllow=2606:4700::/32
[Install]
WantedBy=multi-user.target
4. Done
sudo systyemctl daemon-reload
してからsudo systemctl enable --now cloudflared
を実行して有効化します。
これで完了です。