#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>
など。
***RewriteLogとRewriteLogLevel [#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してください。
くらいのことが書いてある(多分。~
次に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実装 [#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)"
メイン設定に記述でよいかと。
***続CipherSuites [#d326de64]
各種攻撃に対応しつつ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"
***ApacheとOpenSSL [#sa70e982]
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