クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

Web サーバー堅牢化の基本

レッスン全文をここで読めます。無料アカウントを作成すると、実際のラボで実践できます。

コンテナラボ読了目安 10分コマンド7個

このレッスンでやること

ウェブサーバーは、必要以上のことを話してしまいがちです。正確なバージョン、フォルダーの中身、公開するつもりのなかったファイルなどです。堅牢化とは、サーバーが話すことや見せることを減らすように、設定を変えることです。小さなウェブサイトを見て、問題を一覧にするチェックを実行し、動いているサーバーの中で1つ直し、もう一度チェックを実行します。あなたのコピーはインターネットへの出口がないので、触れるのは自分のサイトだけです。

はじめる前に

メモ

このレッスンの上にあるバーのラボを起動を押して、動いていると表示されるまで待ってください。ウェブサイトは web というサービスで、ターミナルはその名前でつながります。下の実行ボタンを押すと、コマンドが順番に、同じセッションのラボのターミナルへ入力されます。実行の様子を見たり、自分でコマンドを打ったりするときは、バーのターミナルを開く(新しいタブ)を押します。

1. サーバーが何を話すか見る

curl -I は、ヘッダーだけを求めます。Server: で始まる行を見てください。nginx の正確なバージョン、nginx/1.27.5 を、訪れた人みんなに、そして攻撃者にも教えています。

コマンド
curl -I http://web

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

2. サーバーが何を見せるか見る

このフォルダーには専用のトップページがないので、サーバーは中にあるものの一覧を表示します。答えは、Index of /files/ という見出しのページで、prices.csv と suppliers.txt の2つのファイルが並びます。一覧を見せてほしいと頼んだ人は、だれもいません。

コマンド
curl http://web/files/

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

3. チェックを実行する

このターミナルの docker は、ラボのサービスを見たり、中に入ったり、再起動したりできます。このコマンドは、その中でコマンドを実行します。lab-check は、動いているサーバーに9つの質問をして、それぞれに PASS か FAIL を表示します。最初はすべて FAIL で、最後の行は Some checks fail. です。

コマンド
docker exec web lab-check

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

4. 1つ直す

設定は、コンテナの中の /etc/nginx/conf.d/default.conf というファイルです。そこに server_tokens on; と書いてあり、これがヘッダーにバージョンを出している原因です。このコマンドは、on を off に変えます。sed は、コマンドラインから1か所だけ書き換えるエディターです。もっと大きく変えたいときは、docker exec -it web sh でファイルを開いて、vi で編集します。

コマンド
docker exec web sed -i 's/server_tokens on/server_tokens off/' /etc/nginx/conf.d/default.conf

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

5. 読み込ませる

nginx は設定を起動時に1回だけ読みます。だから、もう一度読むように伝えます。reload なら、サイトを止めずにそれができます。signal process started というお知らせが1つ表示されますが、エラーではありません。

コマンド
docker exec web nginx -s reload

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

6. もう一度見る

Server: の行は、数字なしの nginx だけになりました。

コマンド
curl -I http://web

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

7. もう一度チェックを実行する

1行目が PASS the Server header shows no version number に変わりました。残りの8つはまだ FAIL です。1つ直すと、その行だけが変わります。フォルダーの一覧表示、足りないセキュリティヘッダー、.git フォルダー、バックアップファイル、開いたままの管理画面は、同じ方法で、あなたが直す番です。最後の行が All checks pass. になるまで続けてください。

コマンド
docker exec web lab-check

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

8. 何が残るかを見る

ラボのバーのラボを停止を押し、もう一度ラボを起動を押してから、チェックをもう一度実行してください。直した内容は残っています。設定フォルダーは名前付きボリュームで、プラットフォームはボリュームを保存します。コンテナの中のほかの場所で変えたものは、消えてしまいます。

先生へ

ヒント

このレッスンは、ラボで進めるレッスンの小さな例です。手順と実行ボタンがレッスンで、ラボは生徒一人ひとりのコピーです。ここでは自動採点は行いません。生徒は、直す前と直した後の curl -I の出力と、最後の lab-check を提出します。先生は、その証拠を見て採点してください。自分のモジュールにコピーして変更するか、レッスンビルダーのラボメニューから最初から作ってください。

このラボとソースについて: Web サーバー堅牢化のラボ:弱い nginx の設定を直して curl で確かめる

授業で教えていますか?これらのレッスンを生徒に割り当て、採点と生徒ごとのラボを使えます。