このレッスンでやること
ウェブサーバーは、必要以上のことを話してしまいがちです。正確なバージョン、フォルダーの中身、公開するつもりのなかったファイルなどです。堅牢化とは、サーバーが話すことや見せることを減らすように、設定を変えることです。小さなウェブサイトを見て、問題を一覧にするチェックを実行し、動いているサーバーの中で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 を提出します。先生は、その証拠を見て採点してください。自分のモジュールにコピーして変更するか、レッスンビルダーのラボメニューから最初から作ってください。