nginxのセキュリティ関連設定

はじめに

nginxのセキュリティ関連の設定メモです。

ヘッダーやエラーページからバージョン情報を消す

nginxはデフォルト設定のままだとヘッダーや404エラーページ等でnginxのバージョン情報を表示されます。
バージョン情報は脆弱性が発見された時に攻撃の対象とされやすくなる可能性もあるため、非表示に切り替えましょう。
/etc/nginx/nginx.confのhttpディレクティブに、server_tokens off;を追加し、nginxを再起動すれば表示されなくなります。
 #nginx.conf

 http {
        ##
        # Basic Settings
        ##
 
        ......

        server_tokens off;
 }

HTTPS(SSL)を有効にする

HTTPSで通信できるようにするには、秘密鍵と証明書をサーバーに保存した上で、下記のような設定を行います。なお、/etc/nginx/keys/server.crtに証明書が、/etc/nginx/keys/server.keyに秘密鍵が保存されていると仮定した記載になっています。場所はどこでも問題無いですが、nginxを起動しているユーザー以外には読み取り権限も与えないようにしましょう。

 #/etc/nginx/sites-available/default

 server {
     listen 443 ssl;

     ssl on;
     ssl_certificate      /etc/nginx/keys/server.crt;
     ssl_certificate_key  /etc/nginx/keys/server.key;
 }

SSLのプロトコルを指定

古いSSLのプロトコルにはpoodleと言う脆弱性がありますが、デフォルトのnginxでは古いSSLも有効になっているため、利用するSSLのプロトコルを限定します。以下ではTLSv1, 1.1, 1.2を有効にしていますが、最近のブラウザだけに対応するだけで良い場合、TLSv1.2のみにしてください。
 #/etc/nginx/sites-available/default

 server {
     listen 443 ssl;

     ....
     ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 }

HTTPでのアクセスをHTTPSに転送する(オプション)

本来HTTPSで通信すべきところをHTTPで通信してしまわないように、HTTP(TCPの80番ポート)通信を全てHTTPSに転送する設定を入れることができます。本設定を入れた方が安全性は上がりますが、サーバー負荷も上昇します。
 #/etc/nginx/sites-available/default

 server {
     listen   80;
     server_name example.com;
     return 301 https://example.com$request_uri;
 }

0 件のコメント :

コメントを投稿