2010-02-04

SetEnvIf を使うんだけど…。

Ploneで公開しているコンテンツについて、アクセス元のIPをチェックして、アクセス制限を行ったり、ドキュメントルートに割り当てるパスを調整しようと思いました。

ただし、アクセス元は、Proxyを経由してくるので、環境変数の HTTP_X_FORWARDED_FOR を見て判断することにしました。

動作確認として、SetEnvIf 条件 環境変数 –> で、Options Deny,Allow を利用して試すことに。

環境変数は、PerlのCGIを使ってチェック。

#!/usr/bin/perl

print "Content-type: text/plain\n\n";
foreach $var (sort(keys(%ENV))) {
    $val = $ENV{$var};
    $val =~ s|\n|\\n|g;
    $val =~ s|"|\\"|g;
    print "${var}=\"${val}\"\n";
}

上記のコードで拾った HTTP_X_FORWARDED_FOR を元にhttpd.conf を調整したのですが、どうも思ったように動きません…。

# Access Control From Source IP
 
SetEnvIf HTTP_X_FORWARDED_FOR xx\.xx\.xx check

Order deny,allow
deny from all
allow from env=check
Deny from all

なにやら、許可されるべきIPなのに、どうやってもアクセスがブロックされてしまいます…(x_x)

仕方がないから、mod_perlでPerlAccessHandlerまで書かないといけないの??とまで考えたのですが、ちょっと調べたら、出てきました、その答えが…。

SetEnvIf X-Forwarded-For xx\.xx\.xx check 

こうしないといけないんですね…。

逆に、RewriteCond の場合は、RewriteCond %{HTTP:X-Forwarded-For} という具合に指定しないといけないそう。

うーん、勉強になりました…。

0 件のコメント:

コメントを投稿