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
    ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ノ ̄


と設定してみたところ

        ____
    /::::::─三三─\            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


5月 22, 2011 at 4:43 pm by 黒ぶちメガネ
Category: Apache, Linux, mod_security