http 経由の Subversion で IP 制限する
要は、Trac とか Redmine で、レポジトリを Subversion にして連携してる場合、http 経由でアクセスするとき、どうやってプロジェクト(レポジトリ単位)毎に制限するのか、というお話。
実施した環境はウチの会社のローカルだったんだけど、Pound でバランシングしてたりでめんどかった。環境は以下のような感じ。
[インターネット]->[PCルータ兼FWサーバ(Windows2003Server)]->[Pound(CentOS5.3)]->[社内ローカル]
PCルータからポート 80 へのアクセスは転送されて、Pound でヘッダによって社内ローカルのサーバへ振り分ける設定。多分、運用する規模が小さければ常にセキュリティアップデートに気を配っておけば、こんなもんでいいんじゃないかな(いずれも二重化されてないから、一箇所クラッシュすると終了なんですけどね)。
話がずれましたが、上記のような環境でもインターネット直接続のような環境でもいいんですが、レポジトリのアクセス制限をどうするか。
基本的に、Subversion.conf は、conf.d 等に配置された段階で、設定の中に Basic 認証がコメントされています。これをコメントアウトするだけでも多少は効果がありますが、さらに IP 制限しましょう。「えー固定 IP 持ってない?キャハハ!」という時は、(何もしないよりマシなので)クライアントのホスト名とかで設定するしかないでしょうな(こういう時ってどうやって解決すりゃいいのかな)。一応そういうときのために、Basic 認証も設定しておくべきなんですけどね。
んで前置きが長くなったけど、設定は以下のようにするといいよ!ちなみにサンプルなので、レポジトリ名は「sample」とします。
<Location /repos/sample> SetEnvIf X-Forwarded-For "111.111.111.111" ipcheck SetEnvIf X-Forwarded-For "222.222.222.22[0-9]" ipcheck #SetEnvIf X-Forwarded-For "192.168.0." ipcheck Order Deny,Allow Deny from all Allow from env=ipcheck Allow from 192.168.0. </Location>
SetEnvIf の 評価には正規表現が使えるとの事。
http://httpd.apache.org/docs/2.2/ja/mod/mod_setenvif.html
基本的に「SetEnvIf」の行をコピーして IP 制限すればおk。Pound とかプロキシ経由しない( X-Forwarded-For に値が挿入されない )環境なら、直接 Allow from で制限すればおk。なんかコメントアウトしてる行は、hosts に対象ドメインを記述して名前ベースでアクセスしてくる横着者が居るときとかに解除してね、っていうか入れといてもいいか、実害ないし。