序章

DigitalOcean クラウドファイアウォールは、ネットワークレベルで強力なファイアウォールサービスを提供し、不正なトラフィックからリソースを保護します。

DigitalOceanコントロールパネルを介してクラウドファイアウォールを構成できますが、管理するドロップレットが多数ある場合、プロセスのスクリプトを作成する必要がある場合、またはターミナルから作業する場合は、コマンドラインインターフェイスの方が適しています。

このチュートリアルでは、使用方法を学習します doctl—公式のDigitalOceanコマンドラインクライアント—Webサーバーのクラウドファイアウォールを作成および管理します。

前提条件

このチュートリアルでは、次のものが必要になります。

  • doctl バージョン1.7.0は、doctlGitHubリポジトリ公式インストール手順に従ってインストールおよび認証されます。 (使用 doctl version のバージョンを確認するコマンド doctl あなたが走っています。)

  • DigitalOceanドロップレットでSSHキーを使用する方法チュートリアルに従って、DigitalOceanアカウントにSSHキーを追加します。

nyc1 リージョンでUbuntu16.04を実行するワンクリックLAMP(Linux、Apache、MySQL、PHP)スタックイメージを作成し、これを512MBのドロップレットに配置します。 ただし、このチュートリアルを開始する前に、よく理解しておくことをお勧めします。 doctl およびクラウドファイアウォールについては、 Doctlの使用方法、公式のDigitalOceanコマンドラインクライアントおよびDigitalOceanクラウドファイアウォールの概要をお読みください。

ステップ1—Webサーバーのセットアップ

まず、ドロップレットのリージョンを選択します。 このチュートリアルではnyc1を使用しますが、次のコマンドですべてのリージョンとそのスラッグを確認できます。

  1. doctl compute region list
Output
Slug Name Available nyc1 New York 1 true sfo1 San Francisco 1 true ams2 Amsterdam 2 true sgp1 Singapore 1 true lon1 London 1 true nyc3 New York 3 true ams3 Amsterdam 3 true fra1 Frankfurt 1 true tor1 Toronto 1 true sfo2 San Francisco 2 true blr1 Bangalore 1 true

ネットワーク経由でパスワードを送信したくないし、ブルートフォース攻撃の可能性を減らしたいので、SSHキー認証でWebサーバーを保護します。

SSHキーを含むドロップレットを作成するには、 doctl SSHキーの指紋が必要です。これは、次のコマンドで取得できます。

  1. doctl compute ssh-key list
Output
ID Name FingerPrint 9763174 sammy_rsa your_ssh_key_fingerprint

ドロップレットで使用するSSHキーのフィンガープリントをコピーします。

それでは、Ubuntu 16.04を実行しているワンクリックのLAMPスタックイメージを使用して、nyc1リージョンにweb-1という名前の512MBドロップレットを作成する1つのコマンドにすべてをまとめましょう。 SSHキー。

  1. doctl compute droplet create web-1 \
  2. --region nyc1 \
  3. --image lamp-16-04 \
  4. --ssh-keys your_ssh_key_fingerprint \
  5. --size 512mb

出力には、ドロップレットのID、名前、IPv4アドレス、メモリなど、作成したばかりのドロップレットの概要が表示されます。

Output
ID Name Public IPv4 Private IPv4 Public IPv6 Memory VCPUs Disk Region Image Status Tags 52059458 web-1 512 1 20 nyc1 Ubuntu LAMP on 16.04 new

注:プロビジョニングプロセスが完了するまで数分待つ必要があります。 プロビジョニングされると、ドロップレットのIPv4アドレスとステータスは active それ以外の new.

次のコマンドを使用してドロップレットのステータスを確認し、完全にプロビジョニングされている場合は、手順2でファイアウォールをドロップレットに割り当てるときに必要になるIDをメモします。 ドロップレットのステータスが表示されるまで、このステップを超えないでください active.

  1. doctl compute droplet list web-1
Output
ID Name Public IPv4 Private IPv4 Public IPv6 Memory VCPUs Disk Region Image Status Tags 52059458 web-1 203.0.113.1 512 1 20 nyc1 Ubuntu LAMP on 16.04 active

次に、 doctl SSH経由でDropletにログインし、LAMPのインストールを有効にして、サーバーを本番環境で使用するための準備方法に関する追加の手順を取得します。 あなたが得る場合 connection refused エラーメッセージ、ドロップレットはまだ準備ができていません。 数分待ってから、 list ドロップレットのステータスがに設定されていることを確認するコマンド active 続行する前に。

  1. doctl compute ssh web-1
Output
... ------------------------------------------------------------------------------- Thank you for using DigitalOcean's LAMP Application. LAMP has now been enabled. You can access your LAMP instance at: Your web root is located at /var/www/html and can be seen from http://203.0.113.1 ...

必要に応じてドロップレットを構成したら、SSHセッションを終了します。

  1. [environment]
  2. exit

最後に、WebブラウザでDropletのIPアドレスを指定して、LAMPスタックが正しく機能していることを確認します。 デフォルトのDigitalOceanワンクリックLAMPスタックランディングページに、「SSH経由でドロップレットにログインしてLAMPインストールを構成してください」というメッセージが表示されます。 そうでない場合は、前の手順をたどって、LAMPが有効になっていることと、DropletのIPアドレスがブラウザに正しくコピーされていることを確認してください。

このチュートリアルに必要なLAMP構成はすでに完了しているので、許可されていないトラフィックからDropletを保護する準備ができています。

手順2—Webサーバーのファイアウォールを作成する

まず、から取得したドロップレットIDを使用します。 doctl compute droplet list 手順1でコマンドを実行して、という名前のクラウドファイアウォールを作成します web-firewall これにより、ポートでのインバウンドSSH接続が可能になります 22 およびすべてのアウトバウンドTCP、UDP、およびICMP接続。 これにより、多くの基本的なサービスに正常に動作する機能を提供しながら、コマンドラインからサーバーを管理できるようになります。

The protocol フィールドは必須であり、次のいずれかに設定する必要があります tcp, udp、 また icmp、およびを含める必要があります ports を除くすべてのプロトコルの値 icmp 仕様により、これは必要ありません。

The address フィールドは、特定のポートへのアクセスを許可するIPアドレスを指定します。 すべてのIPv4アドレスからのトラフィックを許可する場合は、 0:0:0:0/0、およびすべてのIPv6アドレスからのトラフィックを許可する場合は、 ::0/0.

最後に、作成する各ファイアウォールには、少なくとも1つのルールが必要です。 --inbound-rules また --outbound-rules フラグ。すべての値はコンマ区切りで入力する必要があります key:value リスト。 複数のルールには、スペースで区切られた値の引用符で囲まれた文字列を使用します。

今、使用します create コマンドはファイアウォールを作成します:

  1. doctl compute firewall create --name web-firewall \
  2. --droplet-ids your_droplet_id \
  3. --inbound-rules "protocol:tcp,ports:22,address:0.0.0.0/0,address:::/0" \
  4. --outbound-rules "protocol:icmp,address:0.0.0.0/0,address:::/0 protocol:tcp,ports:all,address:0.0.0.0/0,address:::/0 protocol:udp,ports:all,address:0.0.0.0/0,address:::/0"

出力には、新しいクラウドファイアウォールの基本的な概要が含まれています。 手順3でファイアウォールにルールを追加するために使用するため、クラウドファイアウォールのIDをメモしておきます。

Output
ID Name Status Created At Inbound Rules Outbound Rules Droplet IDs Tags Pending Changes c7b39b43-4fcc-4594-88f2-160a64aaddd4 web-firewall waiting 2017-06-17T21:20:38Z protocol:tcp,ports:22,address:0.0.0.0/0,address:::/0 protocol:icmp,ports:0,address:0.0.0.0/0,address:::/0 protocol:tcp,ports:0,address:0.0.0.0/0,address:::/0 protocol:udp,ports:0,address:0.0.0.0/0,address:::/0 your_droplet_id droplet_id:your_droplet_id,removing:false,status:waiting

ポート範囲を指定する必要がある場合は、次の形式を使用してください。

--inbound-rules "protocol:tcp,ports:8000-8080,address:0.0.0.0/0,address:::/0"

また、使用することができます droplet_id の代わりにフラグ address 国旗。 これは、複数のドロップレットが相互に通信するセットアップで特に役立ちます。

--inbound-rules "protocol:tcp,ports:8000-8080,droplet_id:your_droplet_id"

そして、あなたは複数を組み合わせることができます address また droplet_id 次のように、フィールドを1つのルールにまとめます。

--inbound-rules "protocol:tcp,ports:8000-8080,droplet_id:your_first_droplet_id,droplet_id:your_second_droplet_id"

この時点で、WebブラウザでDropletのIPアドレスを指定して、クラウドファイアウォールが正しく機能していることを確認します。 サイトにアクセスできなくなったことを示すメッセージが表示されます。 そうでない場合は、前の出力を再確認してください create エラーメッセージを見逃していないことを確認するコマンド。

最後に、インバウンドルールでSSHがすでに許可されているはずですが、 doctl.

  1. doctl compute ssh web-1

ドロップレットに接続できない場合は、 SSHのトラブルシューティング方法チュートリアルシリーズが、問題の診断に役立ちます。

ドロップレットに正常に接続したら、SSHセッションを終了します。

  1. [environment]
  2. exit

クラウドファイアウォールが正しく機能していることを確認したので、Webサーバーへの着信トラフィックを許可するルールを追加します。

ステップ3—ルールを追加する

から取得したファイアウォールIDを使用する doctl compute firewall create ステップ2のコマンドでは、ポートでApacheのインバウンドTCPトラフィックを許可するルールを追加します。 80.

を使用します add-rules コマンド。ファイアウォールIDと少なくとも1つのルールが必要です。 ルールはを使用して指定されます --outbound-rules--inbound-rules 手順2と同じようにフラグを立てます。

  1. doctl compute firewall add-rules c7b39b43-4fcc-4594-88f2-160a64aaddd4 \
  2. --inbound-rules "protocol:tcp,ports:80,address:0.0.0.0/0,address:::/0"

HTTPSが必要な場合は、ポートでインバウンドTCPトラフィックを許可します 443.

  1. doctl compute firewall add-rules c7b39b43-4fcc-4594-88f2-160a64aaddd4 \
  2. --inbound-rules "protocol:tcp,ports:443,address:0.0.0.0/0,address:::/0"

成功した場合、このコマンドは出力を生成しません。 エラーメッセージが表示された場合は、画面の指示に従って問題を診断してください。

次に、WebブラウザでDropletのIPアドレスを指定し直します。 今回は、デフォルトのDigitalOceanワンクリックLAMPスタックランディングページが再び表示されるはずです。 そうでない場合は、IPアドレスがWebブラウザに正しくコピーされていることを再確認してから、前の手順を再度トレースしてください。

保護したい追加のWebサーバーがある場合は、ステップ4に進みます。 それ以外の場合は、ステップ5に進んでください。ここでは、タグを使用してクラウドファイアウォールを管理します。

(オプション)ステップ4 —ファイアウォールへのドロップレットの追加

複数のドロップレットがある場合は、それぞれに同じクラウドファイアウォールを適用できます。

使用 add-droplets クラウドファイアウォールにドロップレットを追加するコマンド。 このコマンドは引数としてクラウドファイアウォールIDを必要とし、 droplet-ids ファイアウォールを適用するドロップレットを決定するフラグ。

クラウドファイアウォールのIDがわからない場合は、 list 指図:

  1. doctl compute firewall list
Output
ID Name Status Created At Inbound Rules Outbound Rules Droplet IDs Tags Pending Changes c7b39b43-4fcc-4594-88f2-160a64aaddd4 web-firewall succeeded 2017-06-17T21:20:38Z protocol:tcp,ports:22,address:0.0.0.0/0,address:::/0 protocol:tcp,ports:80,address:0.0.0.0/0,address:::/0 protocol:icmp,ports:0,address:0.0.0.0/0,address:::/0 protocol:tcp,ports:0,address:0.0.0.0/0,address:::/0 protocol:udp,ports:0,address:0.0.0.0/0,address:::/0 52059458

また、使用することができます list ドロップレットのIDを取得するコマンド:

  1. doctl compute droplet list
Output
ID Name Public IPv4 Private IPv4 Public IPv6 Memory VCPUs Disk Region Image Status Tags 51146959 test-1 203.0.113.1 512 1 20 nyc1 Ubuntu LAMP on 16.04 active 52059458 web-1 203.0.113.2 512 1 20 nyc1 Ubuntu LAMP on 16.04 active

以下を使用する doctl コマンド、追加します test-1 ドロップレット web-servers IDが c7b39b43-4fcc-4594-88f2-160a64aaddd4:

  1. doctl compute firewall add-droplets c7b39b43-4fcc-4594-88f2-160a64aaddd4 \
  2. --droplet-ids 51146959

出力が表示されない場合、コマンドは成功しています。 エラーメッセージが表示された場合は、画面の指示に従って問題を診断してください。

また、一度に複数のドロップレットを追加する場合は、コンマを使用してそれらを区切ります。 2つのIDの間にスペースがないことに注意してください。

--droplet-ids 51146959,52059458

それでは、クラウドファイアウォールの管理を容易にするためにタグを使用しましょう。

ステップ5—タグの使用

この時点で、クラウドファイアウォールに個別のドロップレットを追加しましたが、クラウドファイアウォールは、複数のリソースの管理を容易にするためのタグもサポートしています。 タグがどのように機能するかをよりよく理解するには、DigitalOceanドロップレットにタグを付ける方法を参照してください。

このステップでは、ドロップレットにタグを付け、クラウドファイアウォールにタグを追加してから、ファイアウォールから個々のドロップレットIDを削除し、タグを使用してドロップレットを安全に保ちます。

を使用してドロップレットにタグを追加する前に doctl、最初にタグを作成する必要があります tag create 指図:

  1. doctl compute tag create web-servers
Output
Name Droplet Count web-servers 0

タグが作成されたら、を使用してドロップレットに適用します droplet tag 指図。 このコマンドは、ドロップレットIDを引数として取り、タグ名を --tag-name 国旗。

  1. doctl compute droplet tag 52059458 \
  2. --tag-name "web-servers"

1つのクラウドファイアウォールで複数のドロップレットを保護する場合は、ドロップレットごとに前のコマンドを繰り返します。

次に、タグをクラウドファイアウォールに追加します。 add-tags コマンド。ファイアウォールIDを引数として取り、使用するタグ名のリストをから取得します。 --tag-names 国旗:

  1. doctl compute firewall add-tags c7b39b43-4fcc-4594-88f2-160a64aaddd4 \
  2. --tag-names web-servers

出力が表示されない場合、コマンドは成功しています。 エラーメッセージが表示された場合は、画面の指示に従って問題を診断してください。

また、複数のタグを追加する必要がある場合は、それらをコンマ区切りのリストとして提供します。

--tag-names web-servers,backend-servers

最後に、ドロップレットはファイアウォールの一部であるため、ファイアウォールからドロップレットのIDを削除できます。 web-servers タグ、およびそのタグ全体が保護されるようになりました。

  1. doctl compute firewall remove-droplets c7b39b43-4fcc-4594-88f2-160a64aaddd4 \
  2. --droplet-ids 52059458

タグのみで保護するドロップレットごとに、前の手順を繰り返します。

警告:タグ付けされていないドロップレットをクラウドファイアウォールから削除すると、ドロップレットは不正なトラフィックから保護されなくなります。

これで、許可されていないトラフィックからWebサーバーを保護する完全に構成されたクラウドファイアウォールができました。 ファイアウォールからルールも削除する場合は、手順6に進みます。

(オプション)ステップ6 —ファイアウォールからのルールの削除

クラウドファイアウォールからルールを削除する場合は、 remove-rules 指図。

The remove-rules コマンドは引数としてファイアウォールIDを取り、ルールはを使用して指定されます --outbound-rules--inbound-rules フラグ。 指定するルールは、作成時に使用したルールと完全に同じである必要があることに注意してください。

  1. doctl compute firewall remove-rules c7b39b43-4fcc-4594-88f2-160a64aaddd4 \
  2. --inbound-rules protocol:tcp,ports:80,address:0.0.0.0/0,address:::/0

出力が表示されない場合、コマンドは成功しています。 エラーメッセージが表示された場合は、画面の指示に従って問題を診断してください。

結論

このチュートリアルでは、 doctl DigitalOceanクラウドファイアウォールを作成するには、それらのファイアウォールにルールを追加し、ファイアウォールにドロップレットを追加し、タグを使用してファイアウォールを管理し、ファイアウォールからルールを削除します。

クラウドファイアウォールを使用する他の方法については、DigitalOceanクラウドファイアウォールを整理する方法を参照してください。

また、クラウドファイアウォールのトラブルシューティングについては、DigitalOceanファイアウォールのトラブルシューティング方法にアクセスしてください。