#author("2024-01-21T01:29:11+09:00","","")
#author("2024-01-21T01:38:44+09:00","","")
#navi2(OpenWrt,toc,prev,next)
----
#contents
----

* nginx [#g3efe0c0]

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

** 設定 [#u8683f09]
*** /etc/conf/nginx の設定 [#fe675401]
 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) [#e65bead2]
/etc/nginx/module.d/ngx_headers_more_filter_module.module ファイル作成
 load_module /usr/lib/nginx/modules/ngx_http_headers_more_filter_module.so;

*** セキュリティ設定 [#o2ba8d73]
-/etc/nginx/conf.d 配下に次のファイルを配置する。

&ref(security.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;

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

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

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


----
#navi2(OpenWrt,toc,prev,next)
トップ   差分 バックアップ リロード   一覧 検索 最終更新   ヘルプ   最終更新のRSS