Linodeインスタンスにファイアウォールを設定する

# LinodeのCloud Firewallとは
LinodeのCloud FirewallはLinodeのインスタンスによるインバウンド、またはアウトバウンドのネットワークトラフィックに対し、無償かつ簡単に適用することができるステートフルなファイアウォール機能です。

https://www.linode.com/docs/products/networking/cloud-firewall/get-started/

# Cloud Firewallの設定方法
本ブログでは作成したLinodeインスタンスに対し、所定のIPアドレスからインバウンドでSSHアクセスするための許可設定をおこない、その他のポートはブロックするような設定をしていきます。実際の設定作成においては、アプリケーションの仕様等に応じて必要なインバウンド、およびアウトバウンドのポートを許可するように設定してください。

Linodeのコンソールメニューより「Firewalls」メニューに遷移し、「Create Firewall」ボタンを押下します。
![firewalls_capture1(1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2731599/fba941d0-9a69-13a1-27b2-fdf473c221c0.png)
任意のLabel（Firewall設定の名称）と適用対象のLinodeインスタンスを選択します。この際に「All Linodes」を選択するとすべてのLinodeインスタンスが選択されます。選択完了後に「Create Firewall」を押下すると設定が作成されます。
![firewallcapture2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2731599/755ef883-0a0c-a9df-72bf-b293df5d5279.png)
作成したFirewall設定に遷移し、ポリシーを設定します。
![firewallcapture3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2731599/5eb60f7c-0312-f671-5a22-aed766284fd1.png)
まず、インバウンドおよびアウトバウンドのデフォルトポリシーを設定し、続いて各インバウンドルールおよびアウトバウンドルールを追加していきます。この例ではインバウンドのトラフィックはデフォルトでDrop、アウトバウンドのトラフィックはAcceptするように設定しています。
![Capture0004-11-09 15-46-46(1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2731599/5a7d5a6e-264a-a9ee-4e0b-05bf4f6fdc7b.png)
下記の例では所定のIPアドレス(1.1.1.1/32)に対しSSHポート(22)へのインバウンドトラフィックを許可しています。ルールの編集が完了したら「Add Changes」を押下してルールを追加します。
![firewallcapture4(1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2731599/6a11a4c6-5194-b882-2156-ed9abfeb1caa.png)
全てのルール編集が終わったら「Save Changes」を押下して作成完了です。
![firewallcapture5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2731599/034cfb25-2d32-55f5-7f0f-716bf17e03db.png)
実際に許可されたIPアドレスおよびプロトコルによるアクセスが許可され、それ以外のIPアドレスやプロトコルによるアクセスがブロックされることを確認しましょう。

Firewall作成後に適用対象のLinodeインスタンスを編集する場合は、Firewall編集画面の「Linodes」タブでインスタンスを追加・削除することができます。
![firewallcapture6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2731599/589f8ee7-a35c-e671-a190-83d213009bec.png)

# Linode CLIによるCloud Firewallの設定方法
LinodeはAPIやコマンドラインインターフェースを備えており、このようなFirewallの設定をAPIまたはCLIベースで実施することも可能です。ここでは上記のGUIで設定したファイアウォール設定と同じ内容をCLIで設定した場合の実行例をご紹介します。

Linode CLIについては下記の記事も併せてご参照ください。

Linode CLI のインストール
https://qiita.com/isss802/items/0b1be79031ee16ced521

またCloud FirewallのAPIおよびCLIの利用方法に関しては下記URLに掲載されております。
https://www.linode.com/docs/api/networking/

##### ファイアウォール設定の新規作成
```
 % linode-cli firewalls create \
--label 'firewall-group' \
--rules.inbound_policy DROP \
--rules.outbound_policy ACCEPT \
--rules.inbound \
'[{
    "action": "ACCEPT",
                "addresses": {
                  "ipv4": [
                    "1.1.1.1/32"
                  ]
                },
                "description": "SSH Inbound Rule",
                "label": "accept-inbound-SSH",
                "ports": "22",
                "protocol": "TCP"
              }]'
┌───────┬────────────────┬─────────┬─────────────────────┬─────────────────────┐
│ id    │ label          │ status  │ created             │ updated             │
├───────┼────────────────┼─────────┼─────────────────────┼─────────────────────┤
│ 99039 │ firewall-group │ enabled │ 2022-11-09T10:38:58 │ 2022-11-09T10:38:58 │
└───────┴────────────────┴─────────┴─────────────────────┴─────────────────────┘
```
##### LinodeインスタンスIDの確認
```
% linode-cli linodes list
┌──────────┬──────────────────────────────┬──────────────┬───────────────┬────────────────────┬─────────┬──────────────────────────────────┐
│ id       │ label                        │ region       │ type          │ image              │ status  │ ipv4                             │
├──────────┼──────────────────────────────┼──────────────┼───────────────┼────────────────────┼─────────┼──────────────────────────────────┤
│ 40094161 │ instance1-ap-northeast       │ ap-northeast │ g6-nanode-1   │ linode/ubuntu22.10 │ running │ 192.168.2.250 │
└──────────┴──────────────────────────────┴──────────────┴───────────────┴────────────────────┴─────────┴──────────────────────────────────┘
```
##### ファイアウォール設定へのLinodeインスタンス追加
```
% linode-cli firewalls device-create 99039 \
  --id 40094161 \
  --type "linode"
┌────────┬─────────────────────┬─────────────────────┐
│ id     │ created             │ updated             │
├────────┼─────────────────────┼─────────────────────┤
│ 191167 │ 2022-11-09T10:39:08 │ 2022-11-09T10:39:08 │
└────────┴─────────────────────┴─────────────────────┘
```
##### 作成したファイアウォール設定の参照
```
 % linode-cli firewalls list
┌───────┬────────────────┬─────────┬─────────────────────┬─────────────────────┐
│ id    │ label          │ status  │ created             │ updated             │
├───────┼────────────────┼─────────┼─────────────────────┼─────────────────────┤ │
│ 99039 │ firewall-group │ enabled │ 2022-11-09T10:38:58 │ 2022-11-09T10:38:58 │
└───────┴────────────────┴─────────┴─────────────────────┴─────────────────────┘
% linode-cli firewalls rules-list 99039
┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬──────────┬────────────────┬─────────────────┐
│ inbound                                                                                                                                                         │ outbound │ inbound_policy │ outbound_policy │
├─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼──────────┼────────────────┼─────────────────┤
│ {'action': 'ACCEPT', 'addresses': {'ipv4': ['1.1.1.1/32']}, 'description': 'SSH Inbound Rule', 'label': 'accept-inbound-SSH', 'ports': '22', 'protocol': 'TCP'} │          │ DROP           │ ACCEPT          │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴──────────┴────────────────┴─────────────────┘
```
# まとめ
本記事においては、Linodeのインスタンスに対しCloud Firewallを適用する方法についてご紹介しました。ファイアウォールを適用せずにLinodeインスタンスを作成するとインスタンスがインターネットに公開されてしまうため、Cloud FirewallやOSのファイアウォール機能を用いてLinodeインスタンスを安全に管理するようにしましょう。

# 関連記事
アカマイ・テクノロジーズ合同会社のQiitaではLinode関連など開発者向けの記事を記載しております。

https://qiita.com/organizations/Akamai