【IDCFクラウド】cloudstack-apiでFWの設定をする。

はじめに

前回【IDCFクラウド】cloudstack-apiで仮想マシンにパブリックIPを付与する。を行いました。 さらにその前の回(前々回)では【IDCFクラウド】cloudstack-apiで仮想マシンを作成する。を行いました。 これよって「仮想マシンを作成し、パブリックIPの付与」まで完了しました。 ただ、これでは外部との通信ができません。IDCFクラウドのFWはホワイトリスト方式のため、必要なポートを指定して開けてあげる必要があります。 ということで、今回は_cloudstack-api_コマンドでFWの設定を行います。


# 事前確認

まずは現在のFW状況を確認します。

$ cloudstack-api listFirewallRules --ipaddressid 8ac2bf54-e238-43b2-89be-4bec101d694e -t ipaddress,startport,endport,protocol,ciderlist,id
no data found
オプション内容
—ipaddressidパブリックIPアドレス

指定したパブリックIPに何もFWの設定がないためno data foundとなっています。


# FWルールの作成

FWルールの作成はcreateFirewallRuleコマンドで行います。

$ cloudstack-api createFirewallRule --ipaddressid 8ac2bf54-e238-43b2-89be-4bec101d694e --protocol TCP --startport 80 --endport 80
{
  "createfirewallruleresponse": {
    "id": "f47780b8-0507-4b10-9c8c-0ff08d0456ac",
    "jobid": "61c80d83-6e0b-4302-b004-738dbc40ba59"
  }
}

それではもう一度FWの設定を確認してみましょう。

$ cloudstack-api listFirewallRules --ipaddressid 8ac2bf54-e238-43b2-89be-4bec101d694e -t ipaddress,startport,endport,protocol,ciderlist,id
+----------------+-----------+---------+----------+-----------+--------------------------------------+
|   ipaddress    | startport | endport | protocol | ciderlist |                  id                  |
+----------------+-----------+---------+----------+-----------+--------------------------------------+
| 210.129.22.172 | 80        | 80      | tcp      | None      | f47780b8-0507-4b10-9c8c-0ff08d0456ac |
+----------------+-----------+---------+----------+-----------+--------------------------------------+

80番ポートが解放されたのが確認できました。

FWの解放は範囲を指定して行うことができます。その場合は_—startport_の値に始まりとなるポート番号、_—endport_に終わりとなるポート番号を指定します。

$ cloudstack-api createFirewallRule --ipaddressid 8ac2bf54-e238-43b2-89be-4bec101d694e --protocol TCP --startport 8000 --endport 8100
{
  "createfirewallruleresponse": {
    "id": "a3d25f8c-ebd0-458c-b86b-49cfcb6592d1",
    "jobid": "aeaa1a60-a754-40bb-8bc0-142fa7eee3a5"
  }
}
$ cloudstack-api listFirewallRules --ipaddressid 8ac2bf54-e238-43b2-89be-4bec101d694e -t ipaddress,startport,endport,protocol,ciderlist,id
+----------------+-----------+---------+----------+-----------+--------------------------------------+
|   ipaddress    | startport | endport | protocol | ciderlist |                  id                  |
+----------------+-----------+---------+----------+-----------+--------------------------------------+
| 210.129.22.172 | 80        | 80      | tcp      | None      | f47780b8-0507-4b10-9c8c-0ff08d0456ac |
| 210.129.22.172 | 8000      | 8100    | tcp      | None      | a3d25f8c-ebd0-458c-b86b-49cfcb6592d1 |
+----------------+-----------+---------+----------+-----------+--------------------------------------+

また、特定IPのみを許可する場合は_—cidrlist_を使います。

$ cloudstack-api createFirewallRule --ipaddressid e72d0249-b3e1-4841-9463-2f56ee9964f5 --protocol TCP --startport 22 --endport 22 --***.***.***.***/32
{
  "createfirewallruleresponse": {
    "id": "2fa54ca1-0ed9-4bd3-a977-a0b1bb5f19cc",
    "jobid": "109e9497-36bc-4250-84ca-bb9a8d89796c"
  }
}
$ cloudstack-api listFirewallRules --ipaddressid e72d0249-b3e1-4841-9463-2f56ee9964f5 -t ipaddress,startport,endport,protocol,ciderlist,id
+----------------+-----------+---------+----------+-----------+--------------------------------------+
|   ipaddress    | startport | endport | protocol | ciderlist |                  id                  |
+----------------+-----------+---------+----------+-----------+--------------------------------------+
| 210.129.22.172 | 22        | 22      | tcp      | None      | 2fa54ca1-0ed9-4bd3-a977-a0b1bb5f19cc |
| 210.129.22.172 | 80        | 80      | tcp      | None      | f47780b8-0507-4b10-9c8c-0ff08d0456ac |
| 210.129.22.172 | 8000      | 8100    | tcp      | None      | a3d25f8c-ebd0-458c-b86b-49cfcb6592d1 |
+----------------+-----------+---------+----------+-----------+--------------------------------------+

以下、利用したオプションについてです。

オプション内容
—ipaddressidパブリックIPアドレスID
—protocolプロトコル(TCP/UDP)
—startportスタートポート
—endportエンドポート
—cidrlist許可IP及びNW

# FWルールの削除

作成したFWルールの削除はdeleteFirewallRuleコマンドで行います。

$ cloudstack-api deleteFirewallRule --id a3d25f8c-ebd0-458c-b86b-49cfcb6592d1
{
  "deletefirewallruleresponse": {
    "jobid": "cf419432-24dc-404c-a4bf-8b478cfdf9ff"
  }
}
オプション内容
—idFWルールID
$ cloudstack-api listFirewallRules --ipaddressid 8ac2bf54-e238-43b2-89be-4bec101d694e -t ipaddress,startport,endport,protocol,ciderlist,id
+----------------+-----------+---------+----------+-----------+--------------------------------------+
|   ipaddress    | startport | endport | protocol | ciderlist |                  id                  |
+----------------+-----------+---------+----------+-----------+--------------------------------------+
| 210.129.22.172 | 22        | 22      | tcp      | None      | 2fa54ca1-0ed9-4bd3-a977-a0b1bb5f19cc |
| 210.129.22.172 | 80        | 80      | tcp      | None      | f47780b8-0507-4b10-9c8c-0ff08d0456ac |
+----------------+-----------+---------+----------+-----------+--------------------------------------+

削除されました。


# おわりに

 FWルールはあくまでもパブリックIPアドレスに対して行う設定です。なのでプライベートIPに対しては行えません。 もしプライベートネットワーク間での設定を行いたい場合は各サーバでiptablesの設定を行う必要があります。  また、今回設定したFWルールは**「仮想マシンにNAT接続している限り有効」という点にも注意が必要です。 一旦、IPの割り当てを解除してしまうと、そのパブリックIPに設定したFWルールは全て消えてしまいます。 そのためFW設定を行う際は「IPは使いまわせても、FWルールは使い回せない」**ということに気をつけておきましょう。