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

無料レッスン

安全な設定で Web サーバーを出す

このレッスンのあとで: Web サーバーの設定を、チェックリストと見比べて見直せる。

55分のレッスンコマンド5件Web サーバー堅牢化のラボ:弱い nginx の設定を直して curl で確かめる

見知らぬ人に話しすぎた書店

町の書店が Web サイトを公開しました。だれも侵入していません。でも、どのソフトを使っているかが分かり、バックアップのファイルが読め、仕入れ先の名前が並ぶフォルダの一覧まで見えます。

設定は、ソフトが最初から持っていたものでした。安全な初期設定は、サーバーを出す人の最初の仕事です。

このレッスンのゴール

メモ

Web サーバーの設定を、チェックリストと見比べて見直せる。

大事な言葉

ことばいみれい
ハードニング設定を変えて、漏らすものと許すものを減らすこと(hardening)
ヘッダーWeb の返事といっしょに届く、事実を並べた行(header)
ステータスコード要求がどうなったかを表す番号404
初期設定何も選ばなかったときに使われる設定(default)
攻撃対象領域外の人が届く範囲のすべて(attack surface)
リロード止めずに、サーバーに設定を読み直させること

学生が入力するセルは、このプレビューでは空白です。

サーバーは、ページ以外も返す

Web サーバーの返事には、ステータスコードとヘッダーがついています。コードは結果を表します。200 は成功、404 は見つからない、405 は許されない方法です。

ヘッダーは、話しすぎることがあります。外の人が1つ事実を知るたびに、攻撃対象領域が少し広がります。

ラボには、書店の Web サーバー web があります。次の3つの Run は、サーバーが何を言うかを見るだけです。

返事のヘッダーを読む

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

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

ないページを頼む

コマンド
curl -s -o /dev/null -w "%{http_code}\n" http://web/nothing-here

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

静的サイトが断る方法を試す

コマンド
curl -s -o /dev/null -w "%{http_code}\n" -X DELETE http://web/

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

見直しは、設定をチェックリストと比べる

サーバーをハードニングするには、設定を1行ずつ読み、毎回同じ問いをします。話しすぎていないか。許しすぎていないか。記録を残しているか。

初期設定は、始めやすいように作られていて、そのまま置いても安全とは限りません。表に、よくある危険を並べました。

例: 見直しのチェックリスト

設定危険より安全な選択
古いプロトコルの版知られた弱点を突かれる新しい版だけ許す
アップロードの大きさに上限なし1人でディスクをいっぱいにできる合う上限を決める
ログを切っている何が起きたか、だれも見られないログを残す
どのサイトからも API を呼べる他のサイトがデータを読める許すサイトを名指しする

学生が入力するセルは、このプレビューでは空白です。

見直す書店の設定

コード: bash
server {
    listen 443 ssl;
    server_name books.example.com;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    client_max_body_size 0;
    access_log off;
    add_header Access-Control-Allow-Origin *;
    location / {
        proxy_pass http://127.0.0.1:3000;
    }
}

よくある間違い

注意

版の番号を隠せばサーバーは安全になる、と思う人が多いです。隠れるのは手がかり1つだけです。外の人は、知られた欠陥をすべて試せます。手がかりを隠すだけでなく、ソフトを新しく保ち、いらないものを取り除きます。

変えたら、試してからリロード

設定にまちがいがあると、nginx はリロードを断り、エラーをログに書いて、前の設定のまま動き続けます。けれども、次に再起動したとき、サーバーは起動しません。だから、先にファイルを試します。nginx には、設定を読んで正しいかを答えるテストがあります。

試すのは先で、そのあとでリロードします。リロードは、動いているサーバーに、お客さんを切らずに新しい設定を読ませます。

チェックのスクリプトは、チェックリストの各項目を合格か不合格にして、見直しを機械にくり返させます。ラボにもあり、レッスンのあとで使えます。

設定を試す(何も変えない)

コマンド
docker exec web nginx -t

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

動いている版を聞く

コマンド
docker exec web nginx -v

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

もう一歩先へ

課題のあとで、lint_config に7つ目のルールを足しましょう。client_max_body_size の大きさが 100m を超えていれば big-upload-limit です。大きさは k か m で終わります。

テストを自分で2つ書きます。client_max_body_size 500m; と client_max_body_size 2m; です。指摘が出るのは1つ目だけだと確かめましょう。

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

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。