序章
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を使用しますが、次のコマンドですべてのリージョンとそのスラッグを確認できます。
- doctl compute region list
OutputSlug 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キーの指紋が必要です。これは、次のコマンドで取得できます。
- doctl compute ssh-key list
OutputID Name FingerPrint
9763174 sammy_rsa your_ssh_key_fingerprint
ドロップレットで使用するSSHキーのフィンガープリントをコピーします。
それでは、Ubuntu 16.04を実行しているワンクリックのLAMPスタックイメージを使用して、nyc1リージョンにweb-1という名前の512MBドロップレットを作成する1つのコマンドにすべてをまとめましょう。 SSHキー。
- doctl compute droplet create web-1 \
- --region nyc1 \
- --image lamp-16-04 \
- --ssh-keys your_ssh_key_fingerprint \
- --size 512mb
出力には、ドロップレットのID、名前、IPv4アドレス、メモリなど、作成したばかりのドロップレットの概要が表示されます。
OutputID 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
.
- doctl compute droplet list web-1
OutputID 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
続行する前に。
- 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セッションを終了します。
- [environment]
- 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
コマンドはファイアウォールを作成します:
- doctl compute firewall create --name web-firewall \
- --droplet-ids your_droplet_id \
- --inbound-rules "protocol:tcp,ports:22,address:0.0.0.0/0,address:::/0" \
- --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をメモしておきます。
OutputID 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
.
- doctl compute ssh web-1
ドロップレットに接続できない場合は、 SSHのトラブルシューティング方法チュートリアルシリーズが、問題の診断に役立ちます。
ドロップレットに正常に接続したら、SSHセッションを終了します。
- [environment]
- exit
クラウドファイアウォールが正しく機能していることを確認したので、Webサーバーへの着信トラフィックを許可するルールを追加します。
ステップ3—ルールを追加する
から取得したファイアウォールIDを使用する doctl compute firewall create
ステップ2のコマンドでは、ポートでApacheのインバウンドTCPトラフィックを許可するルールを追加します。 80
.
を使用します add-rules
コマンド。ファイアウォールIDと少なくとも1つのルールが必要です。 ルールはを使用して指定されます --outbound-rules
と --inbound-rules
手順2と同じようにフラグを立てます。
- doctl compute firewall add-rules c7b39b43-4fcc-4594-88f2-160a64aaddd4 \
- --inbound-rules "protocol:tcp,ports:80,address:0.0.0.0/0,address:::/0"
HTTPSが必要な場合は、ポートでインバウンドTCPトラフィックを許可します 443
.
- doctl compute firewall add-rules c7b39b43-4fcc-4594-88f2-160a64aaddd4 \
- --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
指図:
- doctl compute firewall list
OutputID 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を取得するコマンド:
- doctl compute droplet list
OutputID 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
:
- doctl compute firewall add-droplets c7b39b43-4fcc-4594-88f2-160a64aaddd4 \
- --droplet-ids 51146959
出力が表示されない場合、コマンドは成功しています。 エラーメッセージが表示された場合は、画面の指示に従って問題を診断してください。
また、一度に複数のドロップレットを追加する場合は、コンマを使用してそれらを区切ります。 2つのIDの間にスペースがないことに注意してください。
--droplet-ids 51146959,52059458
それでは、クラウドファイアウォールの管理を容易にするためにタグを使用しましょう。
ステップ5—タグの使用
この時点で、クラウドファイアウォールに個別のドロップレットを追加しましたが、クラウドファイアウォールは、複数のリソースの管理を容易にするためのタグもサポートしています。 タグがどのように機能するかをよりよく理解するには、DigitalOceanドロップレットにタグを付ける方法を参照してください。
このステップでは、ドロップレットにタグを付け、クラウドファイアウォールにタグを追加してから、ファイアウォールから個々のドロップレットIDを削除し、タグを使用してドロップレットを安全に保ちます。
を使用してドロップレットにタグを追加する前に doctl
、最初にタグを作成する必要があります tag create
指図:
- doctl compute tag create web-servers
OutputName Droplet Count
web-servers 0
タグが作成されたら、を使用してドロップレットに適用します droplet tag
指図。 このコマンドは、ドロップレットIDを引数として取り、タグ名を --tag-name
国旗。
- doctl compute droplet tag 52059458 \
- --tag-name "web-servers"
1つのクラウドファイアウォールで複数のドロップレットを保護する場合は、ドロップレットごとに前のコマンドを繰り返します。
次に、タグをクラウドファイアウォールに追加します。 add-tags
コマンド。ファイアウォールIDを引数として取り、使用するタグ名のリストをから取得します。 --tag-names
国旗:
- doctl compute firewall add-tags c7b39b43-4fcc-4594-88f2-160a64aaddd4 \
- --tag-names web-servers
出力が表示されない場合、コマンドは成功しています。 エラーメッセージが表示された場合は、画面の指示に従って問題を診断してください。
また、複数のタグを追加する必要がある場合は、それらをコンマ区切りのリストとして提供します。
--tag-names web-servers,backend-servers
最後に、ドロップレットはファイアウォールの一部であるため、ファイアウォールからドロップレットのIDを削除できます。 web-servers
タグ、およびそのタグ全体が保護されるようになりました。
- doctl compute firewall remove-droplets c7b39b43-4fcc-4594-88f2-160a64aaddd4 \
- --droplet-ids 52059458
タグのみで保護するドロップレットごとに、前の手順を繰り返します。
警告:タグ付けされていないドロップレットをクラウドファイアウォールから削除すると、ドロップレットは不正なトラフィックから保護されなくなります。
これで、許可されていないトラフィックからWebサーバーを保護する完全に構成されたクラウドファイアウォールができました。 ファイアウォールからルールも削除する場合は、手順6に進みます。
(オプション)ステップ6 —ファイアウォールからのルールの削除
クラウドファイアウォールからルールを削除する場合は、 remove-rules
指図。
The remove-rules
コマンドは引数としてファイアウォールIDを取り、ルールはを使用して指定されます --outbound-rules
と --inbound-rules
フラグ。 指定するルールは、作成時に使用したルールと完全に同じである必要があることに注意してください。
- doctl compute firewall remove-rules c7b39b43-4fcc-4594-88f2-160a64aaddd4 \
- --inbound-rules protocol:tcp,ports:80,address:0.0.0.0/0,address:::/0
出力が表示されない場合、コマンドは成功しています。 エラーメッセージが表示された場合は、画面の指示に従って問題を診断してください。
結論
このチュートリアルでは、 doctl
DigitalOceanクラウドファイアウォールを作成するには、それらのファイアウォールにルールを追加し、ファイアウォールにドロップレットを追加し、タグを使用してファイアウォールを管理し、ファイアウォールからルールを削除します。
クラウドファイアウォールを使用する他の方法については、DigitalOceanクラウドファイアウォールを整理する方法を参照してください。
また、クラウドファイアウォールのトラブルシューティングについては、DigitalOceanファイアウォールのトラブルシューティング方法にアクセスしてください。