proxy

自宅に立てたサーバにPukiWikiとか設置して個人的な情報整理に使っていて、一部見られて困る個人情報とかがあったりする。リンク集みたいなものもあって、リファラで逆に辿られるとちょっと困る場合がある。というのが背景。
もちろん Basic とはいえ認証が設定されてるわけだが、見せたくない、認証も必要な URI はそもそも外に出さない方が互いに気分を害さなくて済んで良かろうと。そのために今まで Squid を立ててキャッシュの傍ら Referer を削除させてた。

# squid.conf
header_access Referer deny all

これだと Referer は一律削除になるので、画像が表示されないサイトとかいろいろ困る事があった。そういうサイトはプロクシ使用除外に指定したりしてたが、クライアント側で設定するので数が多いと大変だしメンテしきれない。

要は見せたくない URI が設定されてるときだけ Referer をなんとかすればいいわけで、伝統の proxomitron とかに代表されるローカルプロクシでそういう事が実現できないか検討したが、クライアント毎に設定するのが面倒でやめた。仕方ないので、Referer を自分がしたいようにだけ改変するローカルプロクシを自分で試作してみた。それは一応期待通りの動作をしたんだが、性能が悪すぎたのと、エラーをまともに処理するように完成させるのが面倒くさすぎたのでプロジェクト中止。

squid にパッチ当てると squid 自体の更新が面倒だし、モジュールみたいな仕組みがあればいいんだけどちょっと調べたところ squid にはなさそう。
じゃ、apache ならモジュールがあるし、apache にプロクシやらせて Referer 改変するモジュール作ればいいんだ。

と、思って作り始めようとしたところで、SetEnvIf と Header でできそうな事にやっと気づいた。やってみたら、うまくいきやんの。
その設定メモ。

ProxyRequests On
ProxyVia On

    Order Deny,Allow
    Deny From All
    Allow from 192.168.0
    Allow from <許可するクライアント>
    AuthName "private proxy"
    AuthType Basic
    AuthUserFile conf/passwd-private
    AuthGroupFile /dev/null
    Require valid-user
    Satisfy Any
    SetEnvIf Referer <送信したくない URI にマッチする正規表現1> hide_referer
    SetEnvIf Referer <送信したくない URI にマッチする正規表現2> hide_referer
    RequestHeader unset Referer env=hide_referer

もうちょっと細かく条件を設定できればいいんだけど、当分これでいいや。今までの無条件削除に比べれば格段にスマートだ。
えらい遠回りした。もう4年くらい squidReferer 削除させてたよ。


そんだけ。