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>
など。
結論から言うと、ない。
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で追いかけろ」って言ってるぐらいだもんなぁ・・・(´・ω・`)
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などに追加する。
Online Certificate Status Protocol の Stapling 設定。
毎度レスポンダに聞きに行かず、HTTPサーバー内にキャッシュする。
SSLUseStapling On SSLStaplingResponderTimeout 5 SSLStaplingReturnResponderErrors Off SSLStaplingCache "shmcb:/usr/local/apache2/logs/ocsp(128000)"
メイン設定に記述でよいかと。
各種攻撃に対応しつつssllabsで良い点も取れてForwardSecurityや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"
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