mod_security2.6.0-rc2で複数のバーチャルホストを利用するとうまく動作しなかったのでメモっておこう。
■リバースプロキシ型WAFについて
http://www.kurobuti.com/blog/?p=3732
■説明
上記サイトで構築したリバースプロキシ型WAFで、mod_securityのバージョンを「2.6.0-rc2」にして
____ ) 『 複数のバーチャルホストを利用するとどうなるの?』
/⌒ ⌒\ )
/( ●) (●) \ )/⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y丶
/ ::::::⌒(__人__)⌒::::: \
| |r┬-| |
\ `ー’´ /
ノ \
/´ ヽ カ
| l l||l 从人 l||l l||l 从人 l||l カ タ
ヽ -一””””~~``’ー–、 -一”””’ー-、. タ
ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
┌┬┬┐┌┬┬┬┐┌┬┬┬┐┌┬┬┬┐
,. – ””| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ρ ̄`l
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ノ ̄
/⌒ ⌒\ )
/( ●) (●) \ )/⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y丶
/ ::::::⌒(__人__)⌒::::: \
| |r┬-| |
\ `ー’´ /
ノ \
/´ ヽ カ
| l l||l 从人 l||l l||l 从人 l||l カ タ
ヽ -一””””~~``’ー–、 -一”””’ー-、. タ
ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
┌┬┬┐┌┬┬┬┐┌┬┬┬┐┌┬┬┬┐
,. – ””| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ρ ̄`l
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ノ ̄
と設定してみたところ
____
/::::::─三三─\ GET解析だけできてPOST解析ができなくなった。
/:::::::: ( ○)三(○)\ Proxyのタイムアウト画面が表示されるようになった。
|::::::::::::::::::::(__人__):::: | _____
\::::::::: |r┬-| ,/ .| |
ノ:::::::: `ー’´ \ | |
/::::::─三三─\ GET解析だけできてPOST解析ができなくなった。
/:::::::: ( ○)三(○)\ Proxyのタイムアウト画面が表示されるようになった。
|::::::::::::::::::::(__人__):::: | _____
\::::::::: |r┬-| ,/ .| |
ノ:::::::: `ー’´ \ | |
■エラー内容
[Sun May 22 16:38:07 2011] [error] [client 192.168.0.100] (70007)The timeout specified has expired: proxy: error reading status line from remote server www.example.com:80, referer: http://www.example.com/wp-login.php?loggedout=true [Sun May 22 16:38:07 2011] [error] [client 192.168.0.100] proxy: Error reading from remote server returned by /wp-login.php, referer: http://www.example.com/wp-login.php?loggedout=trueこれを見るとproxyがtimeoutしてるっぽかったから、色々パラメータいじって試してみたけどダメでした。(´・ω・`)
■リバースプロキシの設定はこんな感じ
# ServerRoot ServerRoot "/etc/httpd" # ServerTokens ServerTokens Prod # Listen Port Listen 80 # User and Group User apache Group apache # ServerName ServerName mod_security.local # Load Modules #LoadModule alias_module /usr/lib64/httpd/modules/mod_alias.so LoadModule proxy_module /usr/lib64/httpd/modules/mod_proxy.so LoadModule proxy_http_module /usr/lib64/httpd/modules/mod_proxy_http.so LoadModule log_config_module /usr/lib64/httpd/modules/mod_log_config.so LoadModule authz_host_module /usr/lib64/httpd/modules/mod_authz_host.so # mod_security Include conf/mod_security.d/mod_security.conf <IfModule mod_proxy.c> ProxyRequests Off </IfModule> <Proxy *> Order allow,deny Allow from all </Proxy> # Log Setting ErrorLog "logs/error_log" LogLevel warn LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined CustomLog "logs/access_log" combined NameVirtualHost *:80 <VirtualHost *:80> ServerName www.example.com ProxyPass / http://www.example.com/ ProxyPassReverse / http://www.example.com/ ErrorLog logs/www.example.com-error_log CustomLog logs/www.example.com-access_log combined </VirtualHost> <VirtualHost *:80> ServerName www.example2.com ProxyPass / http://www.example2.com/ ProxyPassReverse / http://www.example2.com/ ErrorLog logs/www.example2-error_log CustomLog logs/www.example2-access_log combined </VirtualHost>
バグなのだろうか。
mod_security2.5.13では問題なかったから多分バグなんだろう・・・。
正式リリースでは直ってるだろう。多分・・・。(´ω`)
参考文献
1. http://httpd.apache.org/docs/2.2/ja/mod/mod_proxy.html#ProxyPass
似たような現象があったので、こっそりと
#違ってたら削除しちゃってください
http://www.kurobuti.com/blog/?p=3882
でAPR-1.4.5をお使いになられてると仮定で。
同様の現象(POSTで固まる)を調査していてModSecurityのMLで聞いてみましたが、APR_BUCKET_IS_EOSにバグがあるかもしれないらしく、APR-1.4.4にしたら動きました。
POSTでタイムアウトする現象の時にModSecurity側でデバッグ9でとると
”Input filter: Bucket type EOS contains 0 bytes.”
なメッセージが毎秒20万行くらい出てきたらたぶんAPR側のバグかもしれないです。
補足です。
APR-1.4.5の件はFedora15についてくるもの限定みたいでした。。。
コメント汚し失礼しました。
> ももーいさんへ
黒ぶちです。
情報ありがとうございます。
> http://www.kurobuti.com/blog/?p=3882
> でAPR-1.4.5をお使いになられてると仮定で。
aprはcentos5.6の標準(apr-1.2.7-11.el5_5.3)を使用しまいます。
> APR-1.4.5の件はFedora15についてくるもの限定みたいでした。。。
なるほど。
Fedora15のaprでは、コメントのバグかもしれないのですね。
参考になりますm(__)m