Tips


RequireとOrder

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>

など。

RewriteLogとRewriteLogLevel

結論から言うと、ない。
2.4のマニュアルに書いてあるが
ググった先が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してください。

くらいのことが書いてある(多分。
次にLogLevelについて。
これも日本語マニュアルに遭遇すると2.4を読んでいても気がつかないかもしれない。

書式:	LogLevel [module:]level [module:level] ...

というように、モジュールごとにLogLevelが変更出来るようになっている。 なので、上記の例のように書くと

LogLevel warn rewrite:trace3
全体のLogLevelはwarn、mod_rewriteはtrace3

という意味。これで

[rewrite:trace3] [pid 340] mod_rewrite.c(467):........

のように、プレフィクスのついたログがerror_logに出力される。
今までは

RewriteLogLevel 4

をデバッグに使っていたが、trace3でいいようだ。
また、LogLevelは

コンテキスト:	server config, virtual host, directory

なのでディレクトリごとでも書けるが、
出力先のerror_logはサーバ、バーチャルホストごとにしか書けないので
従来のようにログを容易に分離出来ない(と思う。

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

nghttp2によるhttp2実装

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

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

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

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

続CipherSuites

各種攻撃に対応しつつssllabsで良い点も取れてForwardSecurityや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

CipherSuitesで指定出来る文字列や、SSLOpenSSLConfCmd で指定するコマンドは以下で。
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
Last-modified: 2015-11-09 (月) 17:27:15 (923d)