**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
 
 nghttp2はconfigureだけでよし(クライアントプログラムが必要ならごちゃごちゃ入れないといけない)、
 Apacheは--enable-http2を付ける
 
 ■確認方法
 ・HTTP/2 and SPDY indicator
  Chrome機能拡張と、Firefox Add-onがある
  アドレスバーに雷マークが表示され、HTTP/2で接続すると青に
  SPDYだと緑、QUICは赤になる
 
 ■作り方
  
 ■設定方法

***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環境を考えてみる。

 ■基本
 SSLInsecureRenegotiation Off
 SSLProtocol All -SSLv2 -SSLv3
 SSLCompression Off
 
 ■CiperSuites
 SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:
                ECDH-RSA-AES256-GCM-SHA384:ECDH-ECDSA-AES256-GCM-SHA384:
                DHE-RSA-AES256-GCM-SHA384:DH-RSA-AES256-GCM-SHA384:AES256-GCM-SHA384:
                ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:
                ECDH-ECDSA-AES128-GCM-SHA256:ECDH-RSA-AES128-GCM-SHA256:
                DH-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:AES128-GCM-SHA256
 
 ■OCSP Stapling
 SSLUseStapling On
 SSLStaplingResponderTimeout 5
 SSLStaplingReturnResponderErrors Off
 SSLStaplingCache "shmcb:/usr/local/apache2/logs/ocsp(128000)"
 
 ■ECparameter
 /usr/local/ssl/bin/openssl ecparam -name secp384r1 -out ecparams_secp384r1.pem
 
 出来たファイルの中身をサーバー証明書のおしりに結合する。
 デフォルトだと256bitで、RSA3000bit?ぐらいに相当。4096bit以下なのでssllabsで鍵交換項目が90%となる。
 ブラウザのカーブサポートの最大公約数が secp384r1 ぽいのでこれを指定。
 384bitで7680bit相当になり、4096bit以上をクリアする。
 なおOpenSSLがサポートするカーブの一覧は
 
 /usr/local/ssl/bin/openssl ecparam -list_curves
 
 で。
 
 ■DHparameter
 Apache HTTPD 2.4.17 + OpenSSL1.0.2d で、default が4096bitなのでそのままとする
 作る場合は
 
 /usr/local/ssl/bin/openssl dhparam 4096 -out dhparam_4096.pem
 
 とし、作ったファイルを
 
 SSLOpenSSLConfCmd DHParameters "/usr/local/apache2/conf/dhparams_4096.pem"
 
 と、指定する。
 なお、調子に乗って8192bitで作ってみたが、IE11@Windows8.1で表示出来なかった。
 Chrome46、Firefox42、Edge、IE11@Windows10では表示出来た。

***ApacheとOpenSSL [#sa70e982]
CipherSuitesで指定出来る文字列や、SSLOpenSSLConfCmd で指定するコマンドは以下で。~
&#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