#navi2(RaspberryPi,toc,prev,next) ---- #contents ---- * Webサーバー(Apache2)のインストール [#kf76844b] **インストール [#z6094a07] # apt-get install apache2 **設定 [#b34ddb09] ***言語優先順位設定 [#cad512f3] mods-enabled/negotiation.conf # <変更> # 日本語を優先に変更 # LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv tr zh-CN zh-TW LanguagePriority ja en ca cs da de el eo es et fr he hr it ko ltz nl nn no pl pt pt-BR ru sv tr zh-CN zh-TW ***サーバーの不要な情報を返さない。 [#rf2c9e7a] conf-enabled/security.conf # <変更> # HTTP response ヘッダーに最小限の情報のみ返す。 #ServerTokens Minimal #ServerTokens OS #ServerTokens Full ServerTokens Prod # # <変更> # シグネチャー情報を出力しない ServerSignature Off #ServerSignature On # # <確認> # XST (Cross Site Tracing) 対策 # 多くのブラウザで対処済みのハズであるが、念のため。 # TraceEnable Off # # <追加> # スクリプト等のバージョン情報等がヘッダーに入らないようにします。 # Header unset "X-Powered-By" ***セキュリティ強化のためのヘッダ―追加 [#o6c8facf] # # <追加> # ブラウザが持つ、XSS(Cross Site Scripting)に対するフィルタ機能を強制的に有効にする。 # ※XSSが完全対策されている場合は、ご検知によるページ崩れなどを防ぐため、明示的に無効化 # することもある。(例:Facebook など) # # 0 : 無効 # 1 : XSS検知時、ブラウザはページをサニタイズ(危険な記述部分を除去)する。 # 1; mode=block : XSS検知時、ページのレンダリングを停止する。 # 1; report=<URI> : XSS検知時、ブラウザはページをサニタイズし、攻撃をレポートする。(Chromeのみ) Header set X-XSS-Protection "1; mode=block" # # <追加> # ブラウザが、HTTPレスポンスの検査(sniffing)を実施してコンテンツタイプを判断するのを防止する。 # 一部ブラウザは、HTTPレスポンスを検査(sniffing)し、ヘッダーにある Content-Type を無視して # コンテンツタイプを判断するものがある。⇒開発者の意図通りではなくセキュリティ上の問題に # つながる可能性がある。 # Header set X-Content-Type-Options nosniff: Header set X-Content-Type-Options nosniff # # <追加> # クリックジャッキング対策 # # DENY : 拒否 # SAMEORIGIN : 同じドメイン内のみページ表示を許可 # ALLOW-FROM <uri> : 指定されたURIのみページ表示を許可 Header set X-Frame-Options DENY # # <参考> # ポリシー指定により、さまざまな機能を制限する。 # https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Content-Security-Policy # ***ディレクトリの中身を表示しないようにする [#rc13add7] apache2.conf <Directory /var/www/> # <変更> # ディレクトリの中身を表示しないようにする # Options Indexes FollowSymLinks Options FollowSymLinks AllowOverride None Require all granted </Directory> ***不要な機能を停止する。 [#jf5936e6] # a2disconf serve-cgi-bin ***HTTPS [#faadda7a] +apache の ssl モジュールとサイトを有効にする。 # a2enmod ssl # a2ensite default-ssl +下記ファイルを修正する sites-enables/default-ssl.conf # <変更> # 生成した証明書ファイル、キーファイルを指定する。 # 以下は、Let's Encrypt にて生成した場合の例 # ※<ドメイン名>は適宜変更のこと。 # # SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem # SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key SSLCertificateFile /etc/letsencrypt/live/<ドメイン名>/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/<ドメイン名>/privkey.pem ***HTTPS のみを使用する。(http:// アクセスを https:// にリダイレクトする。) [#ad8f868c] /etc/apache2/sites-enabled/000-default.conf # 追加 # http:// アクセスを https:// にリダイレクトする <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTPS} off # # [備考] # AWS の ELB を使用している場合は、下記設定で良い。 # RewriteCond %{HTTP:X-Forwarded-Proto} =http RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent] </IfModule> # HTST にて HTTPS を利用するように指示する Header set Strict-Transport-Security "max-age=315360000" 次のコマンドでリライトとヘッダー設定を有効にする。 # a2enmod rewrite # a2enmod headers **SSL関係設定 [#r35e47d3] /etc/apache2/ssl.conf #* SSLCipherSuite HIGH:!aNULL SSLCipherSuite !3DES:!aNULL:EDH+HIGH:ECDH+HIGH:-AES128:-3DES:-DSS:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA SSLHonorCipherOrder on SSLProtocol all -SSLv2 -SSLv3 -TLSv1 ***備考 [#rcae01bb] -Cipher は、 次のコマンドで有効になる組み合わせの確認ができます。 openssl ciphers -v '<SSLCiperSuite の値>' 例) openssl ciphers -v '!3DES:!aNULL:EDH+HIGH:ECDH+HIGH:-AES128:-3DES:-DSS:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA' -Openssl の Cipher の値と IANA の対応は下記URLが参考になります。 https://testssl.sh/openssl-iana.mapping.html -次のURLで SSL のテストが可能です。 https://www.ssllabs.com/ssltest/analyze.html **設定の反映 [#m93f6250] Apache2 を再起動する。 service apache2 restart ---- **HTTPS の証明書の作成方法 [#oc88b6e3] ***自己証明証を用いた HTTPS 対応 [#ydf6b5e2] T.B.D. ***Let's Encrypt を用いた HTTPS 対応 [#c9306221] ドメインを取得している場合、Let's Encrypt を用いて、 ブラウザ等にて警告等がでない HTTPS 通信が可能です。 +インストール # apt-get install certbot +ルーターなどの設定を変更し、外部から HTTP, HTTPS にアクセスできる状態にする +Apache を一旦停止する。 # service apache2 stop +証明書生成 # certbox certonly いくつか問い合わせがあるので適宜回答する。 以下、選択例 > 1. ACME CAの認証方法 2: Spin up a temporary webserver (standalone) を選択 > 2. e-mail e-mail アドレスを入力 > 3. 利用規約同意 A : Agree を選択 > 4. ドメイン名入力 ドメイン名を入力 +以下に、サーバー証明書とキーファイルが生成されます。 certificate file : /etc/letsencrypt/live/<ドメイン名>/fullchain.pem; certificate key file : /etc/letsencrypt/live/<ドメイン名>/privkey.pem; ---- #navi2(RaspberryPi,toc,prev,next)