#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)