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

前書き

DigitalOceanのプライベートネットワーキング機能は、Dropletsにhttps://www.digitalocean.com/community/tutorials/digitalocean-private-networking-faqのネットワークインターフェイスを提供します。同じチームまたはアカウントの他の同じDropletにのみアクセスできますデータセンター]。

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

このガイドでは、個々のドロップレットに「+ droplan 」をインストールし、定期的に「 cron +」ジョブを実行するようにスケジュールし、ドロップレットが再起動または電源を切ってもファイアウォールルールが維持されるようにします。

前提条件

このガイドでは、同じ領域に2つ以上のLinuxドロップレットがあり、それぞれが管理タスクの `+ sudo `権限を持つ非ルートユーザーで設定されていることを前提としています。 具体的には、最近のDebian、Ubuntu、およびCentOSのリリースに関する指示を提供します。 CentOSシステムでは、 ` firewalld +`が無効になるため、既存のファイアウォール設定を上書きする可能性があることに注意する必要があります。

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

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

image:https://assets.digitalocean.com/articles/droplan/enter_name_small.png [新しいトークンを生成]

[* Generate Token *]をクリックし、結果のトークンをローカルマシンにコピーします。

image:https://assets.digitalocean.com/articles/droplan/display_token_small.png [パーソナルアクセストークン]

このプロセスの詳細、およびAPIの使用の基本については、https://www.digitalocean.com/community/tutorials/how-to-use-the-digitalocean-api-v2 [DigitalOcean API v2の使用方法]を参照してください。 ]。

Droplanのインストール

DebianおよびUbuntuの前提条件のインストール

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

sudo apt-get install unzip iptables-persistent

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

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

CentOS 7を使用している場合は、「+ yum」を使用して「+ unzip」および「+ iptables-services」パッケージをインストールします。

sudo yum install unzip iptables-services

永続的なファイアウォールルールを設定するときに、「+ iptables-services」が必要になります。

アーカイブの取得と抽出

+ droplan + GitHubプロジェクトのhttps://github.com/tam7t/droplan/releases [リリースページ]にアクセスし、アーキテクチャをサポートする最新リリースのURLを見つけます。 URLをコピーし、ドロップレットの1つにログインして、 `+ wget `または ` curl +`でファイルを取得します。

wget https://github.com/tam7t/droplan/releases/download//

次に、 `+ unzip `コマンドを使用して、リリースアーカイブから ` droplan +`バイナリを抽出します。

unzip

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

sudo mkdir /opt/droplan
sudo mv ./droplan /opt/droplan/

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

Iptablesルールの作成

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

sudo DO_KEY= /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  --         anywhere
ACCEPT     all  --          anywhere

これらのルールが* eth1 *のみに適用されることを確認するために、インターフェースを含むより詳細な出力のための `+ -v +`オプションを追加できます:

sudo iptables -L -v

Iptablesルールの永続化

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

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

ファイアウォールルールは + / etc / iptables / rules.v4 +(およびipv6ルールの場合は + / etc / iptables / rules.v6 +)に保持されます。 `+ iptables-save +`コマンドを使用して、このファイルの新しいバージョンを生成できます:

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

CentOS 7でのルールの永続化

デフォルトでは、CentOS 7は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 +`が定期的に実行され、ドロップレットのコレクションの変更がキャッチされるようにします。

まず、 + nano +(または選択したエディター)を使用して、 `+ / opt / droplan / refresh.sh +`という新しいスクリプトを作成します。

sudo nano /opt/droplan/refresh.sh

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

/opt/droplan/refresh.sh

#!/usr/bin/env bash

/opt/droplan/droplan

# Uncomment for Centos:


# Uncomment for Debian or Ubuntu:

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

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

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

sudo nano /etc/cron.d/droplan

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

crontab

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

これにより、最初のフィールドの「+ * / 5+」で示されるように、5分ごとに「+ refresh.sh 」スクリプトが実行され、最新の出力が「 / 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のhttps://www.terraform.io/[Terraform]をプロビジョニングシステムに使用している場合は、https://github.com/tam7t/droplan/tree/master/examples [Droplan GitHubのサンプルテンプレート]を検索できます。事業]。 このような自動化タスクの概要については、https://www.digitalocean.com/community/tutorials/an-introduction-to-configuration-management [構成管理の概要]を参照してください。

ファイアウォールの詳細については、https://www.digitalocean.com/community/tutorials/what-is-a-firewall-and-how-does-it-work [ファイアウォールとは何ですか?]を参照してください。

Related