開発者ドキュメント

Droplanを使用してDigitalOceanプライベートネットワークインターフェイスを自動的にファイアウォールで保護する方法

序章

DigitalOceanのプライベートネットワーク機能は、同じチームまたはアカウントにあり、同じデータセンターにある他のDropletにのみアクセスできるネットワークインターフェイスをDropletsに提供します。

The droplan ユーティリティは、同じデータセンター内の他のドロップレットからのトラフィックのみを許可する iptables ファイアウォールルールを追加することにより、ドロップレット上のプライベートネットワークインターフェイスを保護するのに役立ちます。 各ドロップレットにユーティリティをインストールして実行することにより、システムが相互にローカルトラフィックのみを受け入れるようにすることができます。

このガイドでは、インストールについて説明します droplan 個々のドロップレットで、 cron 定期的に実行し、Dropletが再起動されたとき、または電源が切れたときにファイアウォールルールが持続することを確認するジョブ。

前提条件

このガイドでは、同じリージョンに2つ以上のLinuxドロップレットがあり、それぞれがroot以外のユーザーで構成されていることを前提としています。 sudo 管理タスクの特権。 具体的には、最近のDebian、Ubuntu、およびCentOSリリースの手順を提供します。 CentOSシステムでは、無効になります firewalld、したがって、既存のファイアウォール構成を上書きする可能性があることに注意する必要があります。

読み取り専用のパーソナルアクセストークンの取得

The droplan ユーティリティドロップレットのリストをAPIに要求するために、 droplan コマンドは、読み取りスコープを持つパーソナルアクセストークンにアクセスする必要があります。 トークンを取得するには、DigitalOceanコントロールパネルにアクセスし、トップメニューの API をクリックして、新しいトークンの生成ボタンをクリックします。 トークン名フィールドに「droplanreadonly」などの新しいトークンのわかりやすい名前を入力し、書き込み(オプション)ボックスのチェックを外します。

トークンの生成をクリックし、結果のトークンをローカルマシンにコピーします。

:トークンのコピーを必ず保持してください。そうしないと、新しいトークンを生成する必要があります。 初めて表示された後は、コントロールパネルから取得できません。

このプロセスの詳細とAPIの使用の基本については、 DigitalOcean APIv2の使用方法を参照してください。

Droplanのインストール

DebianとUbuntuの前提条件のインストール

DebianまたはUbuntuなどのDebianから派生したディストリビューションを使用している場合は、 unzip を使用したパッケージ apt-get:

  1. sudo apt-get install unzip iptables-persistent

必要になります iptables-persistent 永続的なファイアウォールルールを構成する瞬間に。 インストール時に現在のファイアウォールルールを保存するかどうかをインストーラーから尋ねられる可能性があります。 はいと言っても害はありません。

CentOSの前提条件のインストール

CentOS 7を使用している場合は、 unzipiptables-services を使用したパッケージ yum:

  1. sudo yum install unzip iptables-services

必要になります iptables-services 永続的なファイアウォールルールを構成する瞬間に。

アーカイブの取得と抽出

リリースページにアクセスしてください droplan GitHubプロジェクトを作成し、アーキテクチャをサポートする最新リリースのURLを見つけます。 URLをコピーし、ドロップレットの1つにログインして、次のコマンドでファイルを取得します。 wget また curl:

  1. wget https://github.com/tam7t/droplan/releases/download/v1.0.0/droplan_1.0.0_linux_amd64.zip

今、使用します unzip を抽出するコマンド droplan リリースアーカイブからのバイナリ:

  1. unzip droplan_1.0.0_linux_amd64.zip

にディレクトリを作成します /opt 為に droplan、そしてそこにバイナリを移動します:

  1. sudo mkdir /opt/droplan
  2. sudo mv ./droplan /opt/droplan/

The /opt ディレクトリは、ディストリビューションの公式パッケージリポジトリ以外のソースからインストールされたソフトウェアの標準的な場所です。

Iptablesルールの作成

とともに droplan バイナリが配置されている場合は、それを使用してルールを作成できます。 下のコマンドを実行します sudo、設定 DO_KEY トークンの環境変数:

  1. sudo DO_KEY=personal_access_token /opt/droplan/droplan

次に、iptablesのルールを確認します。

  1. sudo iptables -L

同じリージョンに他に2つのドロップレットがあるとすると、次のように表示されます。

Output
Chain INPUT (policy ACCEPT) target prot opt source destination droplan-peers all -- anywhere anywhere DROP all -- anywhere anywhere Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain droplan-peers (1 references) target prot opt source destination ACCEPT all -- droplet_ip1 anywhere ACCEPT all -- droplet_ip2 anywhere

これらのルールがeth1にのみ適用されることを確認するには、 -v より詳細な出力のオプション。これにはインターフェイスが含まれます。

  1. sudo iptables -L -v

永続的なIptablesルール

今のところ、同じリージョン内の他のすべてのドロップレットは現在のシステムに接続できますが、制御していないシステムからのトラフィックはブロックされます。 ただし、システムが再起動すると、iptablesルールは表示されなくなります。 また、将来のある時点で新しいドロップレットを作成する(または既存のドロップレットを削除する)可能性があります。 これらの問題に対処するために、ルールが再起動時に持続することを確認し、スケジュールを設定します droplan 定期的に実行し、ファイアウォールに必要な変更を加えます。

DebianまたはUbuntuでのルールの永続化

ファイアウォールルールは保持されます /etc/iptables/rules.v4 (と /etc/iptables/rules.v6 ipv6ルールの場合)。 このファイルの新しいバージョンは、 iptables-save 指図:

  1. sudo iptables-save | sudo tee /etc/iptables/rules.v4

CentOS7での永続的なルール

デフォルトでは、CentOS7はiptablesの代わりにfirewalldサービスを使用します。 すでにインストールしているので iptables-services 上記のパッケージでは、 systemctl このサービスを停止してマスクし、再起動されないようにします。

  1. sudo systemctl stop firewalld
  2. sudo systemctl mask firewalld

次に、を有効にします iptables サービス:

  1. systemctl enable iptables

とともに iptables サービスを実施し、現在のファイアウォールルールを保存します。

  1. sudo service iptables save

ルールの永続性のテスト

システムを再起動して再接続し、ルールが保持されていることを確認することをお勧めします。 まず、再起動します。

  1. sudo reboot

次に、ドロップレットに再接続し(これには数秒かかります)、ルールを確認します。

  1. sudo iptables -L

Iptablesルールを更新するためのcronジョブのスケジューリング

最後のステップとして、次のことを確認します droplan ドロップレットのコレクションの変更をキャッチするために定期的に実行されます。

と呼ばれる新しいスクリプトを作成することから始めます /opt/droplan/refresh.sh、を使用して nano (または選択したエディター):

  1. sudo nano /opt/droplan/refresh.sh

以下を貼り付け、先頭を削除してディストリビューションの適切な行のコメントを解除します #:

/opt/droplan/refresh.sh
#!/usr/bin/env bash

/opt/droplan/droplan

# Uncomment for Centos:
# service iptables save

# Uncomment for Debian or Ubuntu:
# iptables-save > /etc/iptables/rules.v4

ファイルを終了して保存し、実行可能としてマークします。

  1. sudo chmod +x /opt/droplan/refresh.sh

次に、で新しいファイルを作成します /etc/cron.d/droplan:

  1. sudo nano /etc/cron.d/droplan

5分ごとにrootとしてスクリプトを実行するには、ファイルに次の行を追加します。

crontab
*/5 * * * * root PATH=/sbin:/usr/bin:/bin DO_KEY=personal_access_token /opt/droplan/refresh.sh > /var/log/droplan.log 2>&1

これにより、 refresh.sh で示されるように、5分ごとに1回スクリプト */5 最初のフィールドに入力し、最新の出力をに記録します /var/log/droplan.log.

終了してファイルを保存します。 これで、 watch コマンド。スクリプトが正常に実行されることを確認するために、数秒ごとに別のコマンドの出力を表示します。

  1. sudo watch cat /var/log/droplan.log

スクリプトを実行すると、次のような出力が表示されます。

Sample CentOS Output
Every 2.0s: cat droplan.log Fri Mar 25 01:14:45 2016 2016/03/25 01:14:02 Added 2 peers to droplan-peers iptables: Saving firewall rules to /etc/sysconfig/iptables: [ OK ]

Debianから派生したシステムでは、 systemctl iptables save 出力は表示されません。

Ctrl-Cを押して終了します watch.

:APIはレート制限されているため、ドロップレットが多数ある場合は、更新の頻度を調整する必要がある場合があります。 cronまたはAPI自体の詳細を読むことができます。

結論と次のステップ

単一のドロップレットでファイアウォールを構成したので、残りのインフラストラクチャでこのプロセスを繰り返す必要があります。 一握り以上のドロップレットの場合、このプロセスを自動化するのがおそらく最も簡単でしょう。 システムのプロビジョニングにHashicorpのTerraformを使用している場合は、DroplanGitHubプロジェクトサンプルテンプレートがあります。 このような自動化タスクの概要については、構成管理の概要を参照してください。

ファイアウォールの詳細については、ファイアウォールとは何ですか?を参照してください。

モバイルバージョンを終了