#freeze
#author("2018-11-26T15:56:58+09:00","","")
**Tips [#d0bb1979]

#contents

----
***RequireとOrder [#pddfd0ed]
Orderによるアクセス制限が非推奨となり、Requireを使う事になったヨウス。~
なお後方互換のためmod_access_compatでOrderディレクティブは今のところ使用出来る。~
 <RequireAll>
 くくったRequireの内容はAND結合
 否定条件のみはダメ
 
 <RequireAny>
 くくったRequireの内容はOR結合
 否定条件(RequireNone、Require not xxxx)は含められない
 Require[All|Any|None]を省略した場合のデフォルト値
 
 <RequireNone>
 くくったRequireの内容はOR結合
 条件にヒットした場合アクセス拒否
 <RequireAll>のなかで使う

以下、比較参考。

 全許可
 Order Deny,Allow
 Allow from all
 ↓
 <RequireAny>(省略可。RequireAllでもよい)
     Require all granted
 </RequireAny>

 全拒否
 Order Allow,Deny
 Deny from all
 ↓
 <RequireAny>(省略可。RequireAllでもよい)
     Require all denied
 </RequireAny>

 IPアドレスxxx.xxx.xxx.xxxのみ許可
 Order Deny,Allow
 Allow from xxx.xxx.xxx.xxx
 ↓
 <RequireAny>(省略可。RequireAllでもよい)
     Require ip xxx.xxx.xxx.xxx
 </RequireAny>

 IPアドレスyyy.yyy.yyy.yyyのみ拒否
 Order Allow,Deny
 Deny from yyy.yyy.yyy.yyy
 ↓
 <RequireAll>
     Require all granted
     Require not ip yyy.yyy.yyy.yyy
 </RequireAll>
 または
 <RequireAll>
    Require all granted
    <RequireNone>
        Require ip yyy.yyy.yyy.yyy
    </RequireNone>
 </RequireAll>

 SetEnvIf User-Agent "google" search
 を拒否
 Order Allow,Deny
 Deny from env=search
 ↓
 <RequireAll>
     Require all granted
     Require not env=search
 </RequireAll>
 または
 <RequireAll>
    Require all granted
    <RequireNone>
        Require env=search
    </RequireNone>
 </RequireAll>

 ローカルIPアドレスのみGETとPOSTを許可
 それ以外はGETのみ許可
 <RequireAny>(省略可)
     Require all granted
     Require method GET
     <RequireAll>
         <RequireAny>
             Require ip 192.168.
             Require ip 172.16.
             Require ip 10.
         </RequireAny>
         Require GET POST
     </RequireAll>
 </RequireAny>
など。

***&#x52;ewriteLogと&#x0052;ewrite&#x004c;ogLevel [#o5b11d73]
結論から言うと、ない。~
[[2.4のマニュアル>http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html#logging]]に書いてあるが~
ググった先が2.2のマニュアルだったり、~
日本語のマニュアルだったりするとひょっとすると気がつかないかもしれないのでメモ。~
まずmod_rewriteのロギングについて。

 mod_rewriteはtrace1からtrace8までのログレベルで実行内容をログに出します。
 ログレベルにはLogLevelディレクティブを利用しています。
 debugを指定してもなにもログに出ませんが、
 trace8であればすべての実行内容をログに出しています。
 (訳註:つまりcrit乃至debugでは出力されない。trace1以上を指定してね)

 高いtraceログレベルはApacheを劇的に遅くします!
 trace2以上はデバッグ時のみにしましょう!
 例
 LogLevel alert rewrite:trace3

 RewriteLog
 前のバージョンのmod_rewriteに慣れているかたは、間違いなくRewriteLogとRewriteLogLevelを探していることでしょう。
 この機能はモジュール単位のロギングに完全に置き換わりました。
 mod_rewriteのログを見たいときは
 
 tail -f error_log|fgrep '[rewrite:'
 
 と、grepしてください。

くらいのことが書いてある(多分。~
次に&#x004c;ogLevelについて。~
これも日本語マニュアルに遭遇すると2.4を読んでいても気がつかないかもしれない。~
 書式:	LogLevel [module:]level [module:level] ...
というように、モジュールごとに&#x004c;ogLevelが変更出来るようになっている。
なので、上記の例のように書くと
 LogLevel warn rewrite:trace3
 全体のLogLevelはwarn、mod_rewriteはtrace3
という意味。これで
 [rewrite:trace3] [pid 340] mod_rewrite.c(467):........
のように、プレフィクスのついたログがerror_logに出力される。~
今までは~
 RewriteLogLevel 4
をデバッグに使っていたが、trace3でいいようだ。~
また、&#x004c;ogLevelは
 コンテキスト:	server config, virtual host, directory
なのでディレクトリごとでも書けるが、~
出力先のerror_logはサーバ、バーチャルホストごとにしか書けないので~
従来のようにログを容易に分離出来ない(と思う。

「grepで追いかけろ」って言ってるぐらいだもんなぁ・・・(´・ω・`)~

***nghttp2によるhttp2実装 [#za0eb8bc]
2.4.17からhttp2の実装が出来る。~
 ■必要なもの
 ・nghttp2 c library
  https://nghttp2.org/
  https://github.com/tatsuhiro-t/nghttp2
 
 ■確認方法
 ・HTTP/2 and SPDY indicator
  ・Chrome機能拡張と、Firefox Add-onがある
   アドレスバーに雷マークが表示され、HTTP/2で接続すると青に
   SPDYだと緑、QUICは赤になる
   ・ブラウザのデベロッパーツールのプロトコルカラムがh2になる
   ・Apacheのログで"HTTP/2.0"になる
 
 ■作り方
   nghttp2はconfigureだけでよし(クライアントプログラムが必要ならごちゃごちゃ入れないといけない)、
   Apacheは--enable-http2を付ける
  
 ■設定方法
   Protocols h2 http/1.1
   をVirtualHostなどに追加する。

***OCSP Stapling [#cd90222b]
Online Certificate Status Protocol の Stapling 設定。~
毎度レスポンダに聞きに行かず、HTTPサーバー内にキャッシュする。

 SSLUseStapling On
 SSLStaplingResponderTimeout 5
 SSLStaplingReturnResponderErrors Off
 SSLStaplingCache "shmcb:/usr/local/apache2/logs/ocsp(128000)"

メイン設定に記述でよいかと。

***続&#x43;ipherSuites [#d326de64]
各種攻撃に対応しつつssllabsで良い点も取れて&#x46;orwardSecurityやHTTP/2も対応しながら~
実環境でもいけそうな妥協出来るhttps環境を考えてみる。

https://mozilla.github.io/server-side-tls/ssl-config-generator/ を利用する。

 ■基本
 SSLInsecureRenegotiation Off
 SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
 SSLCompression Off
 
 ■CiperSuites
 #一行で
 SSLCipherSuite TLS_AES_256_GCM_SHA384:
                TLS_CHACHA20_POLY1305_SHA256:
                TLS_AES_128_GCM_SHA256:
                ECDHE-ECDSA-AES256-GCM-SHA384:
                ECDHE-RSA-AES256-GCM-SHA384:
                ECDHE-ECDSA-CHACHA20-POLY1305:
                ECDHE-RSA-CHACHA20-POLY1305:
                ECDHE-ECDSA-AES256-SHA384:
                ECDHE-RSA-AES256-SHA384:
                ECDHE-ECDSA-AES128-GCM-SHA256:
                ECDHE-RSA-AES128-GCM-SHA256:
                ECDHE-ECDSA-AES128-SHA256:
                ECDHE-RSA-AES128-SHA256
 
 ■OCSP Stapling
 SSLUseStapling On
 SSLStaplingResponderTimeout 5
 SSLStaplingReturnResponderErrors Off
 SSLStaplingCache "shmcb:/usr/local/apache2/logs/ocsp(128000)"
 
 Apache2.4.37 + OpenSSL1.1.1a の時点では他に設定は不要っぽい。
 
 ■HSTS
 VirtualHostなどで
 Header always set Strict-Transport-Security "max-age=15768000"

***ApacheとOpenSSL [#sa70e982]
&#x43;ipherSuitesで指定出来る文字列や、SSLOpenSSL&#x43;onfCmd で指定するコマンドは以下で。~
https://www.openssl.org/docs/man1.0.2/ssl/SSL_CONF_cmd.html#SUPPORTED-CONFIGURATION-FILE-COMMANDS~
https://www.openssl.org/docs/man1.0.2/apps/ciphers.html

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS