0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Vultr APIでファイアウォールのグループとルールを作成する

Last updated at Posted at 2025-08-05

前回の記事ではOSの一覧を取得したので、今回はVultr APIを使ってファイアウォールのグループとグループに紐づくルールを作成してみます。


「Vultr API」のドキュメントで「Firewall」の「Create Firewall Group」を参照すると、「/v2/firewalls」でファイアウォールのグループが作成できるようです。

image.png


発行済のAPIキーを環境変数「VULTR_API_KEY」に格納します。

$ export VULTR_API_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

ドキュメント内の「Copy」ボタンをクリックしてターミナルに貼り付けて、 jq コマンドで整形するようにして実行します。
ファイアウォールのグループの作成に成功すると、以下のようにidや作成日付などが表示されます。

$ curl "https://api.vultr.com/v2/firewalls" \
  -s \
  -X POST \
  -H "Authorization: Bearer ${VULTR_API_KEY}" \
  -H "Content-Type: application/json" \
  --data '{
    "description" : "My First Vultr Firewall Group"
  }' | jq .
{
  "firewall_group": {
    "id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
    "description": "My First Vultr Firewall Group",
    "date_created": "2025-08-05T14:55:40+00:00",
    "date_modified": "2025-08-05T14:55:40+00:00",
    "instance_count": 0,
    "rule_count": 0,
    "max_rule_count": 50
  }
}

Vultrのページにログインした状態で、左側のメニューから「Dashboard」>「Network」>「Firewall」をクリックします。

image.png


「Firewall Groups」の画面に先ほど作成した「My First Vultr Firewall Group」が表示されています。

Screenshot from 2025-08-06 00-05-49.png


「My First Vultr Firewall Group」を選択すると、まだルールが1件も登録されていないことがわかります。

Screenshot from 2025-08-06 00-08-19.png


次に、ファイアウォールのグループに紐づくルールを作成していきます。
「Vultr API」のドキュメントで「Firewall」の「Create Firewall Rules」を参照すると、「/v2/firewalls/{firewall-group-id}/rules」でファイアウォールのグループに紐づくルールが作成できるようです。

image.png


ルールを作成する前に、現在接続中のIPアドレスを取得しておきます。

$ curl -s https://httpbin.org/ip |jq -r '.origin'
XXX.XXX.XXX.XXX

ドキュメント内の「Copy」ボタンをクリックしてターミナルに貼り付けて、 jq コマンドで整形するようにして実行します。

まず、22番ポートに対して、事前に取得しておいた現在接続中のIPアドレスを許可するルールを作成しました。

$ curl "https://api.vultr.com/v2/firewalls/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/rules" \
  -s \
  -X POST \
  -H "Authorization: Bearer ${VULTR_API_KEY}" \
  -H "Content-Type: application/json" \
  --data '{
    "ip_type" : "v4",
    "protocol" : "tcp",
    "port" : "22",
    "subnet" : "XXX.XXX.XXX.XXX",
    "subnet_size" : 32,
    "source" : "",
    "notes" : "inbound ssh from my ip"
  }' | jq .
{
  "firewall_rule": {
    "id": 1,
    "type": "v4",
    "ip_type": "v4",
    "action": "accept",
    "protocol": "tcp",
    "port": "22",
    "subnet": "XXX.XXX.XXX.XXX",
    "subnet_size": 32,
    "source": "",
    "notes": "inbound ssh from my ip"
  }
}

「My First Vultr Firewall Group」の画面をリロードすると、先ほど作成したルールが表示されます。

Screenshot from 2025-08-06 00-28-51.png

noteを確認すると、API実行時に指定した「inbound ssh from my ip」が登録されていることがわかります。

image.png


次は、すべてのIPアドレスからICMPに対してのリクエストを受け付けるルールを作成しました。


$ curl "https://api.vultr.com/v2/firewalls/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/rules" \
  -s \
  -X POST \
  -H "Authorization: Bearer ${VULTR_API_KEY}" \
  -H "Content-Type: application/json" \
  --data '{
    "ip_type" : "v4",
    "protocol" : "icmp",
    "port" : "",
    "subnet" : "0.0.0.0",
    "subnet_size" : 0,
    "source" : "",
    "notes" : "inbound icmp from anywhere"
  }' | jq .
{
  "firewall_rule": {
    "id": 2,
    "type": "v4",
    "ip_type": "v4",
    "action": "accept",
    "protocol": "icmp",
    "port": "",
    "subnet": "0.0.0.0",
    "subnet_size": 0,
    "source": "",
    "notes": "inbound icmp from anywhere"
  }
}

「My First Vultr Firewall Group」の画面をリロードすると、新たに作成したルールが表示されます。

Screenshot from 2025-08-06 07-39-20.png

noteを確認すると、API実行時に指定した「inbound ssh from my ip」が登録されていることがわかります。

image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?