前回の記事ではOSの一覧を取得したので、今回はVultr APIを使ってファイアウォールのグループとグループに紐づくルールを作成してみます。
「Vultr API」のドキュメントで「Firewall」の「Create Firewall Group」を参照すると、「/v2/firewalls」でファイアウォールのグループが作成できるようです。
発行済の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」をクリックします。
「Firewall Groups」の画面に先ほど作成した「My First Vultr Firewall Group」が表示されています。
「My First Vultr Firewall Group」を選択すると、まだルールが1件も登録されていないことがわかります。
次に、ファイアウォールのグループに紐づくルールを作成していきます。
「Vultr API」のドキュメントで「Firewall」の「Create Firewall Rules」を参照すると、「/v2/firewalls/{firewall-group-id}/rules」でファイアウォールのグループに紐づくルールが作成できるようです。
ルールを作成する前に、現在接続中の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」の画面をリロードすると、先ほど作成したルールが表示されます。
noteを確認すると、API実行時に指定した「inbound ssh from my ip」が登録されていることがわかります。
次は、すべての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」の画面をリロードすると、新たに作成したルールが表示されます。
noteを確認すると、API実行時に指定した「inbound ssh from my ip」が登録されていることがわかります。