序章
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
:
- sudo apt-get install unzip iptables-persistent
必要になります iptables-persistent
永続的なファイアウォールルールを構成する瞬間に。 インストール時に現在のファイアウォールルールを保存するかどうかをインストーラーから尋ねられる可能性があります。 はいと言っても害はありません。
CentOSの前提条件のインストール
CentOS 7を使用している場合は、 unzip
と iptables-services
を使用したパッケージ yum
:
- sudo yum install unzip iptables-services
必要になります iptables-services
永続的なファイアウォールルールを構成する瞬間に。
アーカイブの取得と抽出
のリリースページにアクセスしてください droplan
GitHubプロジェクトを作成し、アーキテクチャをサポートする最新リリースのURLを見つけます。 URLをコピーし、ドロップレットの1つにログインして、次のコマンドでファイルを取得します。 wget
また curl
:
- wget https://github.com/tam7t/droplan/releases/download/v1.0.0/droplan_1.0.0_linux_amd64.zip
今、使用します unzip
を抽出するコマンド droplan
リリースアーカイブからのバイナリ:
- unzip droplan_1.0.0_linux_amd64.zip
にディレクトリを作成します /opt
為に droplan
、そしてそこにバイナリを移動します:
- sudo mkdir /opt/droplan
- sudo mv ./droplan /opt/droplan/
The /opt
ディレクトリは、ディストリビューションの公式パッケージリポジトリ以外のソースからインストールされたソフトウェアの標準的な場所です。
Iptablesルールの作成
とともに droplan
バイナリが配置されている場合は、それを使用してルールを作成できます。 下のコマンドを実行します sudo
、設定 DO_KEY
トークンの環境変数:
- sudo DO_KEY=personal_access_token /opt/droplan/droplan
次に、iptablesのルールを確認します。
- sudo iptables -L
同じリージョンに他に2つのドロップレットがあるとすると、次のように表示されます。
OutputChain 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
より詳細な出力のオプション。これにはインターフェイスが含まれます。
- sudo iptables -L -v
永続的なIptablesルール
今のところ、同じリージョン内の他のすべてのドロップレットは現在のシステムに接続できますが、制御していないシステムからのトラフィックはブロックされます。 ただし、システムが再起動すると、iptablesルールは表示されなくなります。 また、将来のある時点で新しいドロップレットを作成する(または既存のドロップレットを削除する)可能性があります。 これらの問題に対処するために、ルールが再起動時に持続することを確認し、スケジュールを設定します droplan
定期的に実行し、ファイアウォールに必要な変更を加えます。
DebianまたはUbuntuでのルールの永続化
ファイアウォールルールは保持されます /etc/iptables/rules.v4
(と /etc/iptables/rules.v6
ipv6ルールの場合)。 このファイルの新しいバージョンは、 iptables-save
指図:
- sudo iptables-save | sudo tee /etc/iptables/rules.v4
CentOS7での永続的なルール
デフォルトでは、CentOS7はiptablesの代わりにfirewalldサービスを使用します。 すでにインストールしているので iptables-services
上記のパッケージでは、 systemctl
このサービスを停止してマスクし、再起動されないようにします。
- sudo systemctl stop firewalld
- sudo systemctl mask firewalld
次に、を有効にします iptables
サービス:
- systemctl enable iptables
とともに iptables
サービスを実施し、現在のファイアウォールルールを保存します。
- sudo service iptables save
ルールの永続性のテスト
システムを再起動して再接続し、ルールが保持されていることを確認することをお勧めします。 まず、再起動します。
- sudo reboot
次に、ドロップレットに再接続し(これには数秒かかります)、ルールを確認します。
- sudo iptables -L
Iptablesルールを更新するためのcronジョブのスケジューリング
最後のステップとして、次のことを確認します droplan
ドロップレットのコレクションの変更をキャッチするために定期的に実行されます。
と呼ばれる新しいスクリプトを作成することから始めます /opt/droplan/refresh.sh
、を使用して nano
(または選択したエディター):
- sudo nano /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
ファイルを終了して保存し、実行可能としてマークします。
- sudo chmod +x /opt/droplan/refresh.sh
次に、で新しいファイルを作成します /etc/cron.d/droplan
:
- sudo nano /etc/cron.d/droplan
5分ごとにrootとしてスクリプトを実行するには、ファイルに次の行を追加します。
*/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
コマンド。スクリプトが正常に実行されることを確認するために、数秒ごとに別のコマンドの出力を表示します。
- sudo watch cat /var/log/droplan.log
スクリプトを実行すると、次のような出力が表示されます。
Sample CentOS OutputEvery 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
.
結論と次のステップ
単一のドロップレットでファイアウォールを構成したので、残りのインフラストラクチャでこのプロセスを繰り返す必要があります。 一握り以上のドロップレットの場合、このプロセスを自動化するのがおそらく最も簡単でしょう。 システムのプロビジョニングにHashicorpのTerraformを使用している場合は、DroplanGitHubプロジェクトにサンプルテンプレートがあります。 このような自動化タスクの概要については、構成管理の概要を参照してください。
ファイアウォールの詳細については、ファイアウォールとは何ですか?を参照してください。