コンテンツへスキップ
CivoCloudManager

Civo のファイアウォールを自分の IP に開き、また閉じる。

手作業の手順、そのあとに残る動的 IP の罠、そして期限でルールを閉じる無料のメニューバー経路。

いま座っている場所から Civo のインスタンスやクラスタの API に届きたい。答えはファイアウォールルール一つです。自分のパブリック IPv4 を調べ、その 1 アドレスだけを CIDR の /32 で書いてポートを許可する。Civo は前半を簡単にしてくれますが、後半は危険なままです。手で足したルールは、誰かが消すまでそこに残るからです。ここでは手作業の手順を最後まで書き、そのあと、ほとんど誰も面倒を見ない部分を扱います。閉じ直すことです。

同じルールを、メニューバーから開く

  1. 01

    管理するファイアウォールをアプリに伝える

    初回起動でメニューバーの盾がオンボーディングを走らせます。Civo の API キーを入れると macOS Keychain に入り、リージョンを選び、操作したいファイアウォールを選びます。選んだファイアウォールにはポートが付き、その欄は 6443 から始まります。

  2. 02

    パブリック IPv4 を検出させる

    検出はまず api.ipify.org、次に ifconfig.me/ip、その次に icanhazip.com の順で走り、有効なパブリックアドレスを返した最初のプロバイダで止まります。IPv6 の応答やプライベートアドレスはルールに書き込まれず、メッセージで弾かれます。Civo のファイアウォールルールは IPv4 の CIDR を必要とするからです。

  3. 03

    ワンクリックでルールが書かれる

    アプリは選んだポートに ingress ルールを作り、CIDR には検出したアドレスと /32 を入れ、ラベルを civo-cloud-<hostname>-<firewall-name> にします。Civo は作成レスポンスで正確なルール ID を返すので、どれが自分のルールだったかをあとから推測する必要はありません。

  4. 04

    開けておく時間を決める

    時間指定アクセスは 15 分、30 分、1 時間、2 時間から選べます。Unlimited もありますが、これはルールを開くだけで閉じる予定を一切入れません。自分で閉じるつもりのときだけ選んでください。

  5. 05

    期限はディスクに書かれる

    クローズジョブはファイアウォール ID、ルール ID、リージョン、期限を持ち、アプリの Application Support ディレクトリにある firewall-closures.json へアトミックに書かれます。アプリを終了しても期限は残ります。次の起動時に、ポップオーバーを開かないまま期限切れのジョブが閉じられます。正直な限界は、ルールを削除するにはアプリが動いていて Civo に届く必要があることです。終了やスリープがサーバ側の削除を予約してくれるわけではありません。

  6. 06

    アドレスを名前付きプリセットにする

    いまの IP を Home や Office といった名前で保存しておけば、次からは再検出せずにそのプリセットでファイアウォールを開けます。別の場所にいながら、固定のオフィスアドレス向けにアクセスを開けたいときに便利です。

新しい Civo ファイアウォールが実際にすること

Civo の API ドキュメントははっきり書いています。ルールを作るときに allow か deny かの選択はありません。新しいファイアウォールの既定が全拒否で、必要なポートだけを開ける形だからです。つまり自分で作ったファイアウォールは閉じた状態から始まり、足すルールはすべて許可ルールです。罠はもう一方にあります。どのリージョンにも Default (all open) という名前そのままのファイアウォールが最初からあり、Civo 自身のドキュメントも全ポートが開いていると書き、カスタマイズを勧めています。だから、よく聞かれる質問への正しい答えはこうなります。自分で作ったファイアウォールは既定で拒否、リージョンの Default ファイアウォールはそうではない。

手作業の手順、省略なし

まずパブリック IPv4 を取ります。curl -s https://api.ipify.org です。次にルールを足します。Civo CLI なら civo firewall rule create <firewall_id> --protocol=TCP --startport=6443 --endport=6443 --cidr=203.0.113.42/32 --direction=ingress --label='laptop' です。そして三つめ、ここが飛ばされがちですが、返ってきたルール ID を控えておいてください。あとで消すのに要ります。既定値には注意します。--cidr を省くと CLI は 0.0.0.0/0 を当て、あなたではなくインターネット全体にポートが開きます。ダッシュボード経由でも形は同じです。Actions、Rules と進み、単一ポートか範囲、プロトコル、方向、そして CIDR を入れます。

ルールは、足した理由より長く生きる

Civo のファイアウォールルールに有効期限はありません。人か API 呼び出しが消すまで残ります。固定アドレスの法人回線なら、せいぜい散らかっているだけです。家庭の回線では本物の露出になります。一般的な ISP は再接続時や夜間のリース更新でアドレスを回すからです。許可した /32 はよそのルータに渡り、あなたのルールは見知らぬ相手をポート 6443 まで通す一方、あなた自身は締め出されて二つめのルールを書いている。手書きのルールは一つひとつが小さな負債で、消すのを覚えていたときにだけ返済されます。

アプリがあなたの書いたルールを消せない理由

持ち主を決めるのはラベルです。ポートでもアドレスでもありません。アプリが作るのは civo-cloud-<hostname>-<firewall-name> というラベルのルールだけで、Kubernetes API 接続のために開いたものには k8s-api の接尾辞が付きます。Bulk Close All は管理下の各ファイアウォールのルール一覧を取り、このマシンのそのプレフィックスで始まるラベルのものだけを消します。手で書いた本番のルールにはそのラベルがないので、候補にすら入りません。書いておくべき注意が一つあります。状態の取得に失敗したときも、メニューバーの表示は closed か unknown になります。表示はサーバ側で閉じた証拠ではありません。重要な場面では Civo のダッシュボードを確認してください。

ポート 6443 が繰り返し出てくる理由

6443 は Kubernetes API サーバのポートです。Civo の k3s クラスタはエンドポイントを https://<master-ip>:6443 として公開し、kubectl も kubeconfig も、およそすべての Kubernetes クライアントがそこへ話しかけます。クラスタのファイアウォールがあなたのアドレスから 6443 を許していなければ、どのコマンドもタイムアウトします。Civo のファイアウォール検索でこの数字ばかり出てくるのはそのためです。アプリではオンボーディングの既定ポートが 6443 で、クラスタに接続するときに API へのアクセスを確認し、ルールがなければ開きます。この Kubernetes 経路はルールをメモリ上で追いかけ、切断時に片付けます。時間指定のメニューバーのキューが持つ永続化と再試行の挙動は引き継ぎません。

実際によく聞かれること

Civo のファイアウォールを自分の IP だけに開くにはどうしますか?
curl -s https://api.ipify.org でパブリック IPv4 を取り、そのアドレスを /32 の CIDR として対象のファイアウォールに ingress ルールを作ります。Civo CLI なら civo firewall rule create <firewall_id> --protocol=TCP --startport=6443 --endport=6443 --cidr=203.0.113.42/32 --direction=ingress です。API に allow と deny の選択はありません。自分で作ったファイアウォールは、ポートを開くまですべて拒否だからです。あとで消せるよう、返ってきたルール ID は控えておいてください。
Civo のファイアウォールルールの /32 は何を意味しますか?
CIDR 記法でスラッシュの後ろの数字は、アドレスの先頭何ビットを固定するかを表します。IPv4 は 32 ビットなので、/32 は全ビットを固定し、ルールはちょうど 1 アドレスだけに一致します。203.0.113.42/32 はそのホストであって、それ以外ではありません。比べると /24 は 256 アドレス、0.0.0.0/0 はインターネット全体を覆います。後者は CIDR なしでルールを作ったときに Civo が当てる値です。
IP アドレスが変わったらどうなりますか?
ルールはあなたに付いてきません。古いアドレスを許可したままなので、あなたはアクセスを失って二つめのルールを足すことになり、そのアドレスを次に受け取った誰かがあなたの開口部を引き継ぎます。家庭の回線では普通に起きることで、アドレスは再接続時や夜間のリース更新で入れ替わります。解決は良い IP ではなく、自分で閉じるルールです。決めた時間だけポートを開き、期限に消させてください。
CivoCloudManager は既存のファイアウォールルールに触りますか?
触りません。消すのは自分で作ったルールだけで、判別は civo-cloud-<hostname>-<firewall-name> というラベル、Kubernetes API アクセス用には k8s-api の接尾辞で行います。Bulk Close All は管理下のファイアウォールのルール一覧をそのプレフィックスで絞ってから削除するので、Civo ダッシュボードや CLI、Terraform で手書きしたルールは一致するラベルを持たず、消されることはありません。
自動クローズのタイマーはアプリを終了しても生き残りますか?
期限は生き残ります。各ジョブはファイアウォール ID、ルール ID、リージョン、閉じる時刻を Application Support の下にアトミックに書かれる JSON ファイルへ保存し、期限切れのジョブは次の起動時に閉じられます。生き残らないのは無人でのクローズです。削除はあなたの Mac からの API 呼び出しなので、アプリが動いていて Civo に届く必要があります。期限をまたいで終了したりスリープしたりすると、閉じるのはアプリを次に起動したときまで遅れます。サーバ側に何かを予約するわけではありません。

ファイアウォールの操作が無料の範囲です。

現在の IP 向けのメニューバーからの開閉、名前付きプリセット、自動クローズの期限は、7 日間のフルアクセスが終わったあとも無料のまま残ります。このページの内容を試すのに費用はかかりません。