544 :
名無し~3.EXE :
2008/03/19(水) 11:03:29 ID:Thb2rMC6
フィルタ作成スレで質問してた人かな? フィルタ書いてもらっても無反応なんですね。
いや違うし。
locationヘッダをいじってみたら
SSLでのおみとろん使用はwiki見れ
>>544 おまえhttpsでオミトロン使えないと思われてるぞ
550 :
544 :2008/03/19(水) 13:59:04 ID:Thb2rMC6
551 :
544 :2008/03/19(水) 14:00:11 ID:Thb2rMC6
ところが、Out を In にしてみたら期待通りに動作した。
(実験2)
[HTTP headers]
In = TRUE
Out = FALSE
Key = "URL: HTTPS URL Match Test (in)"
Match = "$URL(
https://\0:443\1 )$ALERT(\\0=\0\n\\1=\1\n\\u=\u)"
Replace = "\k"
(結果)
\0=www.nhk.or.jp
\1=/bs/genre/pic/pickup_baseball2008_s.jpg
\u=
https://www.nhk.or.jp:443/bs/genre/pic/pickup_baseball2008_s.jpg というわけで、HTTPS -> HTTP というプロトコルの切り替えは、
[HTTP headers]
In = TRUE
Out = FALSE
Key = "URL: HTTPS -> HTTP Protocol Changer (in)"
Match = "$URL(
https:// ([^/:]+)\0:443\1)"
Replace = "$JUMP(
http://\0\1 )"
で実現出来た。参考になれば幸い。
# Scott がヘルプにわざわざ
# 'note: this filter would be enabled under the "out" column'
# と注釈を入れているのが謎だけど。
こんなバグは今まで聞いたことないなー。 非公式改造版のエンバグだったりして。
553 :
544 :2008/03/19(水) 15:23:27 ID:Thb2rMC6
追記。
URL:ヘッダフィルタの In/Out についてですが、Out(Scott推奨)の場合は
ブラウザのリクエストを受け取った時点で(リモートサーバにアクセスすることなく)
当該フィルタが適用されるのに対し、In の場合は一旦リモートサーバにアクセス
(但し受信するのはHTTPヘッダのみで、ボディは受け取らないっぽい)してから
適用される、という違いがあるようです。
確かにHTTPの場合は Out に設定しておくに越したことはなさそうですね。
HTTPSの場合とは異なり、わざわざ In に設定せずともちゃんと動作するわけだし。
>>551 の方法(In に設定する)だとセキュアサーバに対し一旦接続自体は
行われるのだ、ということは頭に入れておく必要がありますね。
(それを理解した上で使う分には問題ないでしょう)
OutでもURL欄では正常に動く可能性があるな。 SSLオフにしてるから試す気もないが。
>>554 いや、それも試したんだけどダメだった。
URL欄にはスキーム部分を含めることが出来ないので
やはり"$URL(
https:// ([^/:]+)\0:443\1)"を入れてやってみたんだけど、
Out の場合は
>>544 と同じ症状。
https:// http://http// というワケワカメな新URLに、怒涛の勢いで
狂ったように無限ループでアクセスする。
っつか、この場合 In でも無限ループアクセスに陥ってしまう。
(こちらは、元のURLに、だけど)
そうなんだ、Outで解決出来ないとなるとアクセス解析を遮断したい場合に困るね。 フィルタの管理もhttpsとhttpと2つのフィルタに分けて管理したほうが良さそうだな。 とりあえず乙。
あ、苦肉の策で In にしたのは、そうでもしないと 何故だかURLを変数に取り込めない(ジャンプ先の新URLを作れない)から。 接続させたくないというだけなら、URLを取り込む必要がないんだから HTTPSであろうが普通に Out で \k すればOK。 (この場合リモートサーバへのアクセスは行われない)
あ、そっか。 変数に取り込めないのが問題だったのか。 回避策になるかも知れない案が2つほどあるから後で試してみる。
>>552 オリジナルでも同じ。
いいかげんなことばっか言ってるなー。
CONNECTの方に作用してるんでそ。 スキームが変わらないのはバグっぽい気もするけど。
>>550-557 一連の流れを見てて思ったんだけど
もしかしてhttpsがどうやって通信を確立させてるか知らないでフィルター書いてる?
もし知らないなら、一度ログウィンドウで見てみると良いよ
何故
>>550 なのか理由が解るから
あと、これを試してみるとか
In = FALSE
Out = TRUE
Key = "URL: HTTPS URL Match Test (out)"
Match = "$URL(
https://\0:443\1 )$TST(\1=/bs/*)$ALERT(\\0=\0\n\\1=\1\n\\u=\u)"
Replace = "\k"
562 :
544 :2008/03/19(水) 19:53:59 ID:Thb2rMC6
うん。ログウィンドウは飽きるほど眺めたので、どうやら
>>550 の実験結果が、
ブラウザが Proxomitron との間にトンネル接続を確立する際のCONNECT要求の方に
URL:ヘッダフィルタが作用しちゃった結果らしいのは分かったんだけど…。
変数で拾ってるのはauthority部分だけになっちゃってるし。
ただ、パス部分が欠落しちゃうにしても、$JUMP(
http://\0\1 ) の結果は
少なくとも JumpTo:
http://www.nhk.or.jp/ にはならないといけない気がするけど。
> あと、これを試してみるとか
これいいですね!
$TST() で \1 の値をチェックすることでCONNECT要求への“誤爆”を回避し、
URL:ヘッダフィルタがトンネリング成功後のリクエストの方に適用されるように
しているのかな。同じ方法論で汎用的なフィルタに書き直せばいいですね。
HTTPの場合同様 Out 設定でOKなので、リモートサーバにアクセスすらしない、
まさに求めている動作になっています!このアイデアいただき!
どうでもいいことだが$URLいらないよな
ホントだ。 よく考えたらURL:ヘッダフィルタのMatch欄で使う分には必要ありませんねw
Changes.txt のココ↓読んでたら無駄に悩まずに済んだかも。 | * Can now filter the CONNECT method used to establish | SSL pass-thru connections. That allows some minimal | filtering (basic site blocking and bypass list host | matching) even without using OpenSSL. CONNECT headers | are now also visible in the log window (though keep | in mind they're only used by the proxy and not passed | to the remote site). 他にも、ヘルプには明記されていない機能がひっそりと書かれていたりと、 意外と重要かつ有用なドキュメントですね。今まで読んでなかった。
オミトロンのヘルプファイルか・・・ 「急いで書かれた上にあまり正確とも言えないガイドへようこそ」 そんなに謙遜しないでよスコットたん・・・(つД`) 分かりやすい具体例を豊富に織り交ぜて、 とても読みやすく親切に仕上がってると思うんだ
暇な時にじっくり読んでる。 オミトロンを使いこなすため、というよりも、 単純に読んでて楽しいw なんかこう、 ホームセンターの店内を見て回ってるみたいにさ、 ズラリと並んだ盛り沢山の機能を眺めてうっとりしてるw
英語ワカリマセン
>>569 サンクス。 日本語でも意味ワカランけど貼っとく。
* SSL pass-thru 接続を確立するために使われる CONNECT メソッドを
フィルタすることができるようになりました。これで OpenSSL を使用
しなくても最小限のフィルタリングが可能になりました(基本的な
サイトブロックやバイパスリスト用のホスト名マッチなど)。
また、CONNECT ヘッダがログウィンドウで見られるようになりました。
(これは proxy によって使われるものであって、リモートサイトに
伝えられるものではないということは覚えておいてください)
* 存在しないブロックリストにエントリを追加すると、その名前で「一時的」 リストを作成するようになりました。このリストはメモリ上だけに存在し、 全体で使える情報を蓄えておくハッシュ配列のように使うことができます。 このリストはどのメニューにも表示されず、編集することもできないので 注意してください(これはファイルではないからです)。しかしこれは マッチで呼ぶことができ、他のリストと同じように追加されます。 これ地味に便利だ
>>570 えーと多分、HTTPのGET、例えば
http://hoge.com/hage/fuga だと
ブラウザはProxomitronに対して単純に
GET
http://hoge.com/hage/fuga HTTP/1.1
Host: hoge.com
(対プロキシなんで絶対URI。ログウィンドウには
GET /hage/fuga HTTP/1.1 と表示されるけど)
といったGETメソッドリクエストをいきなり発行するけど、
HTTPSの場合はまず前段階としてCONNECTメソッドで
パス部分は含まないホスト名(&ポート番号)のみの
CONNECT hoge.com:80 HTTP/1.1
Host: hoge.com:80
といったリクエスト発行でProxomitronと接続を確立するわけだけど
このCONNECTメソッドリクエストがログウィンドウで確認出来るようになったよ、
フィルタリングも出来るようになったよ、これはOpenSSL入れてなくてもおk、
ただしCONNECTの時点ではProxomitronに通知されているのはホスト名だけだから
ホスト名だけをチェックするような単純なフィルタリングしかこの時点では使えないけどね、
あとログウィンドウに出るCONNECT接続のログは
あくまでブラウザとProxomitronとの間の通信であってリモートは関与してないよ、ってことかと。
詳しくは俺もよく分からん。
>>572 なるほど、どうもありがとう。
CONNECTとGETでは同じ接続番号が使われるから$DTM(c)が同一かどうかでCONNECTかどうかを
判別することも出来るね。
>>571 の幽霊リスト使えばハッシュ化した状態で記録出来る。 さっそく使い道が。