nginx

インストール

  1. luci の画面より System -> Software を選択する。
  2. 次のソフトウェアをインストールする。
    • nginx-full
    • nginx-mod-headers-more ※以下は、自動でインストールされるかと思います。
    • nginx-ssl-util
    • nginx-util

設定

/etc/conf/nginx の設定

config main global
        option uci_enable 'true'


config server '_lan'
        list listen '443 ssl default_server'
        list listen '[::]:443 ssl default_server'
        option server_name '<ドメイン名>'
        list include 'restrict_locally'
        list include 'conf.d/*.locations'
        # Let's Encrypt 等の証明書を利用する場合、もともとの設定を変更する。
        #option uci_manage_ssl 'self-signed'
        #option ssl_certificate '/etc/nginx/conf.d/_lan.crt'
        #option ssl_certificate_key '/etc/nginx/conf.d/_lan.key'
        option ssl_certificate '<証明書のパス>'
        option ssl_certificate_key '<秘密鍵のパス>'
        option ssl_session_cache 'shared:SSL:32k'
        option ssl_session_timeout '64m'
        option access_log 'on; # logd openwrt'

config server '_redirect2ssl'
        list listen '80'
        list listen '[::]:80'
        option server_name '_redirect2ssl'
        option return '302 https://$host$request_uri'

モジュールのロード (/etc/nginx/module.d)

/etc/nginx/module.d/ngx_headers_more_filter_module.module ファイル作成

load_module /usr/lib/nginx/modules/ngx_http_headers_more_filter_module.so;

セキュリティ設定

filesecurity.conf

中身は、次の通り。

# Proxy, Load Balancer を介したアクセス発生時に、
# アクセス元のIPアドレスをログに残す方法
# X-Fowareded-For ヘッダーを利用し、下記設定を実施する。
# (参照:https://ja.wikipedia.org/wiki/X-Forwarded-For)
#
# set_real_ip_from <Proxy, Load Balancer Address>
# real_ip_header X-Forwarded-For;
# real_ip_recursive on;
#
# 設定例)
# set_real_ip_from 10.1.1.0/24;
# set_real_ip_from 172.16.1.0/24;
# real_ip_header X-Forwarded-For;
# real_ip_recursive on;
#

# server_tokens [on|off|build|string];
#   エラーページと "Server" 応答ヘッダーフィールドの中で出力する
#   nginx の情報設定をします。
#
#=>バージョン情報を隠したいので、off を設定します。
server_tokens off;

# etag [on|off]
#   ETag の応答有無設定
#
#=>脆弱性となる可能性があるため off を設定します。
etag off;


# ------------------------------------------------------------------------------
# HTTP ヘッダーの削除/追加
# セキュリティ強化のため、不要なヘッダー削除、必要ヘッダーを追加する。
# ------------------------------------------------------------------------------
#
#=> PHP バージョン情報などの X-Powered-By ヘッダを非表示とする。
more_clear_headers 'X-Powered-By';

# X-XSS-Protection (XSS フィルタ機能)
#   ブラウザが持つ、XSS (Cross Site Scripting) に対する
#   フィルタ機能を強制的に有効にする。
#   ※XSS が完全対策されている場合は、誤検知によるページ崩れなどを防ぐため、
#     明示的に無効化することもある。(例:Facebook など)
# 0               : 無効
# 1               : XSS検知時、ブラウザはページをサニタイズする。
# 1; mode=block   : XSS検知時、ページのレンダリングを停止する。
# 1; reboot=<URI> : XSS検知時、ブラウザはページをサニタイズし、
#                   攻撃をレポートする。(Chrome 系のみ)
#
#=>1; mode=block を設定しておく
more_set_headers   'X-XSS-Protection: 1; mode=block';

# X-Frame-Options (クリックジャッキング対策)
# iframe などに他ドメインのページ表示を許可するかの設定
#   DENY             : 拒否
#   SAMEORIGN        : 同じドメイン内ページのみ表示を許可
#   ALLOW=FROM <url> : 指定されたURIのみページ表示を許可
#
#=> 同じドメインは許容しておく
more_set_headers   'X-Frame-Options: SAMEORIGN';

# X-Content-Type-Options
#   ブラウザが、HTTP レスポンスの検査(sniffing)を実施して
#   コンテンツタイプを判断するのを防止する。
#   一部ブラウザは、HTTP レスポンスを検査(sniffing)し、
#   ヘッダーにある Content-Type を無視して、コンテンツタイプを
#   判断するものがある。
#   --> 開発者の意図通りではなく、セキュリティ上問題となる可能性がある。
#
#=>Content-Type に合致しない動作を回避するため、nosniff を設定する。
more_set_headers   'X-Content-Type-Options: nosniff';

# HSTS 設定
#
#=>HTTPの代わりにHTTPSを使用する設定をする。(有効期間:365日)
more_set_headers   'Strict-Transport-Security: max-age=31536000';

# Content-Security-Policy
#   XSS やデータインジェクションを含む攻撃を軽減する。
#
# <参照>
# https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Content-Security-Policy


# ------------------------------------------------------------------------------
# SSL 設定
# ------------------------------------------------------------------------------

# ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3
#   脆弱性のないバージョンのみを使用するように変更する。
#
#
ssl_protocols TLSv1.2 TLSv1.3;

# ssl_prefer_server_ciphers [on|off]
#
#=> 暗号スイートをサーバー側に選択させるように設定する。
ssl_prefer_server_ciphers on;

# ssl_ciphers
#
#=> 暗号スイートを制限(脆弱性のあるものを除外)する。
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK;

# DH鍵交換設定
# 下記コマンドなどで生成したファイルを指定する。
# openssl dhparam -out dhparam.pem 2048
ssl_dhparam /etc/nginx/ssl/dhparam.pem;

設定確認

下記サイトに、URLを入力し、「Do not show the results on the boards」にチェックを入れて、Submit することで強度のチェックが可能です。

https://www.ssllabs.com/ssltest/

2024年1月時点で、上記設定は A+ を獲得可能かと思います。



添付ファイル: filesecurity.conf 86件 [詳細]
トップ   差分 バックアップ リロード   一覧 検索 最終更新   ヘルプ   最終更新のRSS