web-dev-qa-db-ja.com

nginx設定にHSTSを追加する

私は最近、すべてのhttpトラフィックをhttps(およびすべてのwwwトラフィックをno-www)にリダイレクトするようにnginx構成を変更しました。

サーバーブロックにもadd_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;を追加することも理にかなっていますか?または、すでにすべてのトラフィックをリダイレクトしているので、それは不要ですか?長所(および短所があれば)を知っておくとよいでしょう。


必要に応じて、現在の仮想ホスト構成は次のとおりです。

server {
    server_name example.com www.example.com;

    listen 80;

    return 301 https://example.com$request_uri;
}

server {
    server_name www.example.com;

    listen 443 ssl;

    ssl_certificate /etc/nginx/ssl/cert_chain.crt;
    ... other SSL related config ...

    return 301 https://example.com$request_uri;
}

server {
    server_name example.com;

    listen 443 ssl;
    ... other SSL related config ...

    ... remaining server configuration ...
}
5
Hassan Baig

HSTSは、httpではなく常にhttpsを使用するようブラウザに指示します。その構成を追加すると、httpからhttpsへの転送の必要性が減少する可能性があるため、わずかにWebサイトのパフォーマンスが向上し、非常に少しサーバーの負荷を減らします。

参考までに、これは私がNginxベースのWebサイトで使用するセキュリティヘッダーです。これを1つのファイルに保存し、httpサーバーやhttpsサーバーなど、必要なすべてのサーバーから含めます。 GoogleやFacebookなどの一般的なリソースを読み込むことができます。

# Security headers
add_header Strict-Transport-Security "max-age=2592000; includeSubDomains; preload";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header Content-Security-Policy "default-src 'self' www.google-analytics.com ajax.googleapis.com www.google.com google.com gstatic.com www.gstatic.com connect.facebook.net facebook.com;";
add_header X-XSS-Protection "1; mode=block";
add_header Referrer-Policy "Origin";

説明

それでも、httpからhttpsへのリダイレクトが必要です。

9
Tim

受け入れられた回答は素晴らしいですが、古くなっていて、1行ずつ調べていたときに私が見つけた欠陥があります。

HSTSヘッダーの期間は、セキュリティ要件を満たすために少なくとも3か月である必要があります。セキュリティヘッダースニペットで次のコードを使用して、SSLテストでA +を取得しました。

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";

第2に、X-Frame-Optionsの使用は推奨されません(多くの/ほとんどの主要なブラウザではサポートされていませんでした)。現在の標準(つまり、すべての主要な最新ブラウザに実装されている)はContent-Security-Policy(CSP)です。

add_header Content-Security-Policy 'frame-ancestors https://mywebapp.mywebsite.example';

例から明らかなように、CSPヘッダーはサイトごとに設定する必要があります(まだ見たことのない賢い正規表現などを除いて)。

3
Teoti Nathan'El

add_headeralwaysパラメータを指定して、内部的に生成されたエラーページにもこのヘッダーを含めることをお勧めします。

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

同様に、 応答ヘッダーにpreloadディレクティブを追加 して、後でWebサイトをプリロードリストに追加できるようにします。

0
druss