24
OSC2012 Tokyo/Fall 日本 日本 GNU AWK GNU AWK http:gauc.no http:gauc.no - - ip.org/awk ip.org/awk - - users users - - jp jp / / Proxy Proxy を作 作る を作 作る 不快なイを非表示に 斉藤 博文 [email protected] @hi_saito

日本 GNU AWK ユーザー会スライド 2 - OSC2012 Tokyo/Fall

Embed Size (px)

Citation preview

OSC2012 Tokyo/Fall

日本日本 GNU AWK GNU AWK ユーザー会ユーザー会 http:gauc.nohttp:gauc.no--ip.org/awkip.org/awk--usersusers--jpjp//

ブラックホールブラックホールブラックホールブラックホールブラックホールブラックホールブラックホールブラックホール Proxy Proxy をををを作作作作るるるるをををを作作作作るるるる

不快なサイトを非表示に

斉藤 博文[email protected]

@hi_saito

OSC2012 Tokyo/Fall

日本日本 GNU AWK GNU AWK ユーザー会ユーザー会 http:gauc.nohttp:gauc.no--ip.org/awkip.org/awk--usersusers--jpjp//

不快不快不快不快ななななサイトサイトサイトサイトとかとかとかとか広告広告広告広告とかとかとかとか・・・・・・・・・・・・不快不快不快不快ななななサイトサイトサイトサイトとかとかとかとか広告広告広告広告とかとかとかとか・・・・・・・・・・・・

�有害と分かっているサイトがある

�子供に見せたくない

�親が変なサイトに行かないか心配

⇒⇒⇒⇒⇒⇒⇒⇒ 困困困困っていませんかっていませんかっていませんかっていませんか困困困困っていませんかっていませんかっていませんかっていませんか??

OSC2012 Tokyo/Fall

日本日本 GNU AWK GNU AWK ユーザー会ユーザー会 http:gauc.nohttp:gauc.no--ip.org/awkip.org/awk--usersusers--jpjp//

一般的一般的一般的一般的なななな制限方法制限方法制限方法制限方法一般的一般的一般的一般的なななな制限方法制限方法制限方法制限方法

�市販ソフトやプロバイダによるブロック

�hosts によるブロック

�ブラウザのアドオンによるブロック

⇒⇒⇒⇒⇒⇒⇒⇒ どれもどれもどれもどれも一長一短一長一短一長一短一長一短どれもどれもどれもどれも一長一短一長一短一長一短一長一短

OSC2012 Tokyo/Fall

日本日本 GNU AWK GNU AWK ユーザー会ユーザー会 http:gauc.nohttp:gauc.no--ip.org/awkip.org/awk--usersusers--jpjp//

そこでそこでそこでそこでそこでそこでそこでそこで proxy.pacproxy.pac!!

�Proxy なんて使ってないよ!

�使える関数は FindProxyForURL() だけ?

�shExpMatch() とかオワコン!

⇒⇒⇒⇒⇒⇒⇒⇒ でもでもでもでも実際実際実際実際ははははでもでもでもでも実際実際実際実際はははは JavaScriptJavaScript

OSC2012 Tokyo/Fall

日本日本 GNU AWK GNU AWK ユーザー会ユーザー会 http:gauc.nohttp:gauc.no--ip.org/awkip.org/awk--usersusers--jpjp//

127.0.0.1 127.0.0.1 にににに返返返返すすすすにににに返返返返すすすす??

�"Not Found" となるのはイヤ

�画像が「×」になるのはイヤ

�httpd 立てるのは面倒

⇒⇒⇒⇒⇒⇒⇒⇒ 良良良良いいいい方法方法方法方法はないかはないかはないかはないか良良良良いいいい方法方法方法方法はないかはないかはないかはないか??

OSC2012 Tokyo/Fall

日本日本 GNU AWK GNU AWK ユーザー会ユーザー会 http:gauc.nohttp:gauc.no--ip.org/awkip.org/awk--usersusers--jpjp//

ブラックホールブラックホールブラックホールブラックホールブラックホールブラックホールブラックホールブラックホール ProxyProxy

⇒⇒⇒⇒⇒⇒⇒⇒ それってそれってそれってそれってそれってそれってそれってそれって Proxy Proxy ではなくではなくではなくではなくではなくではなくではなくではなく httpdhttpd

�どんなリクエストにも同じものを返す

�例えば透過画像を返す

�例えば空文字を返す

OSC2012 Tokyo/Fall

日本日本 GNU AWK GNU AWK ユーザー会ユーザー会 http:gauc.nohttp:gauc.no--ip.org/awkip.org/awk--usersusers--jpjp//

Proxy Proxy をををを作作作作るるるるをををを作作作作るるるる

⇒⇒⇒⇒⇒⇒⇒⇒ 単一言語単一言語単一言語単一言語だけだとだけだとだけだとだけだと面倒面倒面倒面倒単一言語単一言語単一言語単一言語だけだとだけだとだけだとだけだと面倒面倒面倒面倒

�どうやって作ればいいの?

�Proxy って難しそう

�マルチスレッドじゃないとね

OSC2012 Tokyo/Fall

日本日本 GNU AWK GNU AWK ユーザー会ユーザー会 http:gauc.nohttp:gauc.no--ip.org/awkip.org/awk--usersusers--jpjp//

xinetdxinetd とととととととと AWKAWK ののののタッグタッグタッグタッグののののタッグタッグタッグタッグ

⇒⇒⇒⇒⇒⇒⇒⇒ xinetd xinetd 万歳万歳万歳万歳万歳万歳万歳万歳!!

�xinetd を使うと簡単

�クエリは標準入力

�スレッド管理とか不要

OSC2012 Tokyo/Fall

日本日本 GNU AWK GNU AWK ユーザー会ユーザー会 http:gauc.nohttp:gauc.no--ip.org/awkip.org/awk--usersusers--jpjp//

AWK AWK 版版版版版版版版

BEGIN {

RS = "¥r¥n"; ORS = "¥r¥n";

getline;

print "HTTP/1.0 200 OK"; print "MIME-Version: 1.0";

print "Content-Type: image/gif"; print "";

printf("¥x47¥x49¥x46¥x38¥x39¥x61¥x01¥x00" ¥

"¥x01¥x00¥xf0¥x00¥x00¥xff¥xff¥xff" ¥

"¥x00¥x00¥x00¥x21¥xf9¥x04¥x01¥x00" ¥

"¥x00¥x00¥x00¥x2c¥x00¥x00¥x00¥x00" ¥

"¥x01¥x00¥x01¥x00¥x00¥x02¥x02¥x44" ¥

"¥x01¥x00¥x3b¥x00");

}

⇒⇒⇒⇒⇒⇒⇒⇒ なんとこれだけなんとこれだけなんとこれだけなんとこれだけなんとこれだけなんとこれだけなんとこれだけなんとこれだけ!!

OSC2012 Tokyo/Fall

日本日本 GNU AWK GNU AWK ユーザー会ユーザー会 http:gauc.nohttp:gauc.no--ip.org/awkip.org/awk--usersusers--jpjp//

bashbash 版版版版版版版版

read request

printf "HTTP/1.0 200 OK¥r¥n"

printf "MIME-Version: 1.0¥r¥n"

printf "Content-Type: image/gif¥r¥n"

printf "¥r¥n"

printf "¥x47¥x49¥x46¥x38¥x39¥x61¥x01¥x00" ¥

"¥x01¥x00¥xf0¥x00¥x00¥xff¥xff¥xff" ¥

"¥x00¥x00¥x00¥x21¥xf9¥x04¥x01¥x00" ¥

"¥x00¥x00¥x00¥x2c¥x00¥x00¥x00¥x00" ¥

"¥x01¥x00¥x01¥x00¥x00¥x02¥x02¥x44" ¥

"¥x01¥x00¥x3b¥x00"

⇒⇒⇒⇒⇒⇒⇒⇒ 動作未確認動作未確認動作未確認動作未確認動作未確認動作未確認動作未確認動作未確認

OSC2012 Tokyo/Fall

日本日本 GNU AWK GNU AWK ユーザー会ユーザー会 http:gauc.nohttp:gauc.no--ip.org/awkip.org/awk--usersusers--jpjp//

xinetd.d/blackhole_proxyxinetd.d/blackhole_proxy

service blackhole_proxy

{

socket_type = stream

wait = no

user = root

server = /bin/blackhole_proxy.awk

disable = no

}

⇒⇒⇒⇒⇒⇒⇒⇒ xinetdxinetd にににに登録登録登録登録にににに登録登録登録登録

OSC2012 Tokyo/Fall

日本日本 GNU AWK GNU AWK ユーザー会ユーザー会 http:gauc.nohttp:gauc.no--ip.org/awkip.org/awk--usersusers--jpjp//

/etc/services/etc/services

blackhole_proxy tcp/81

⇒⇒⇒⇒⇒⇒⇒⇒ サービスサービスサービスサービスにににに登録登録登録登録サービスサービスサービスサービスにににに登録登録登録登録

OSC2012 Tokyo/Fall

日本日本 GNU AWK GNU AWK ユーザー会ユーザー会 http:gauc.nohttp:gauc.no--ip.org/awkip.org/awk--usersusers--jpjp//

proxy.pacproxy.pac

function FindProxyForURL(url, host) {

// Black List

if (url.match(/なんとか/) ||

url.match(/かんとか/)) {

return "PROXY gauc.no-ip.org:81;";

}

return "DIRECT";

}

⇒⇒⇒⇒⇒⇒⇒⇒ shExpMatch shExpMatch はははは捨捨捨捨てててて捨捨捨捨ててててはははは捨捨捨捨てててて捨捨捨捨てててて!!

OSC2012 Tokyo/Fall

日本日本 GNU AWK GNU AWK ユーザー会ユーザー会 http:gauc.nohttp:gauc.no--ip.org/awkip.org/awk--usersusers--jpjp//

配列版配列版配列版配列版配列版配列版配列版配列版 proxy.pacproxy.pac

// Black List

var black_list = [

"なんとか",

"かんとか",

];

function FindProxyForURL(url, host) {

for (var i in black_list) {

if (url.match(black_list[i]))

return "PROXY gauc.no-ip.org:81;";

}

return "DIRECT";

}

⇒⇒⇒⇒⇒⇒⇒⇒ 配列使配列使配列使配列使ってってってってメンテメンテメンテメンテしやすくしやすくしやすくしやすく配列使配列使配列使配列使ってってってってメンテメンテメンテメンテしやすくしやすくしやすくしやすく

OSC2012 Tokyo/Fall

日本日本 GNU AWK GNU AWK ユーザー会ユーザー会 http:gauc.nohttp:gauc.no--ip.org/awkip.org/awk--usersusers--jpjp//

サーバーサーバーサーバーサーバー立立立立てられないよてられないよてられないよてられないよサーバーサーバーサーバーサーバー立立立立てられないよてられないよてられないよてられないよ

⇒⇒⇒⇒⇒⇒⇒⇒ gauc.nogauc.no--ip.org:81!ip.org:81!

�やりましょう!

�試験的に公開

�使うかどうかはおまかせ

OSC2012 Tokyo/Fall

日本日本 GNU AWK GNU AWK ユーザー会ユーザー会 http:gauc.nohttp:gauc.no--ip.org/awkip.org/awk--usersusers--jpjp//

スマホスマホスマホスマホののののスマホスマホスマホスマホのののの 3G 3G でもでもでもでも使使使使いたいいたいいたいいたいでもでもでもでも使使使使いたいいたいいたいいたい

⇒⇒⇒⇒⇒⇒⇒⇒ VPN VPN サーバーサーバーサーバーサーバーはははは各自各自各自各自でででで立立立立ててねててねててねててねサーバーサーバーサーバーサーバーはははは各自各自各自各自でででで立立立立ててねててねててねててね

�VPN サーバーを立てれば OK

�接続が自動的に切れちゃう欠点

�暗号化はバッテリー消費が大きい

OSC2012 Tokyo/Fall

日本日本 GNU AWK GNU AWK ユーザー会ユーザー会 http:gauc.nohttp:gauc.no--ip.org/awkip.org/awk--usersusers--jpjp//

JavaScript JavaScript だとだとだとだと重重重重くないくないくないくないだとだとだとだと重重重重くないくないくないくない??

⇒⇒⇒⇒⇒⇒⇒⇒ 必要必要必要必要にににに応応応応じてじてじてじて加加加加えるのがえるのがえるのがえるのが賢明賢明賢明賢明必要必要必要必要にににに応応応応じてじてじてじて加加加加えるのがえるのがえるのがえるのが賢明賢明賢明賢明

�どれでも数が多いと重くなる

�hosts も同じ

�Squid も同じ

OSC2012 Tokyo/Fall

日本日本 GNU AWK GNU AWK ユーザー会ユーザー会 http:gauc.nohttp:gauc.no--ip.org/awkip.org/awk--usersusers--jpjp//

資料資料資料資料のののの公開公開公開公開はははは後後後後でやりますでやりますでやりますでやります資料資料資料資料のののの公開公開公開公開はははは後後後後でやりますでやりますでやりますでやります

⇒⇒⇒⇒⇒⇒⇒⇒ ブースブースブースブースにににに遊遊遊遊びにびにびにびに来来来来てねてねてねてねブースブースブースブースにににに遊遊遊遊びにびにびにびに来来来来てねてねてねてね

�OSC2012 Tokyo/Fall も同じネタ

�当日はデモを予定

�なので、資料の公開は再来週を予定

OSC2012 Tokyo/Fall

日本日本 GNU AWK GNU AWK ユーザー会ユーザー会 http:gauc.nohttp:gauc.no--ip.org/awkip.org/awk--usersusers--jpjp//

proxy.pacproxy.pac 作作作作るのるのるのるの作作作作るのるのるのるのもめんどいもめんどいもめんどいもめんどいもめんどいもめんどいもめんどいもめんどい

⇒⇒⇒⇒⇒⇒⇒⇒ これこそこれこそこれこそこれこそこれこそこれこそこれこそこれこそ AWK AWK のののの出番出番出番出番のののの出番出番出番出番!!

�AD Block Plus のファイルを使う

�100 % 変換はできない

�でも、単なるテキスト変換

OSC2012 Tokyo/Fall

日本日本 GNU AWK GNU AWK ユーザー会ユーザー会 http:gauc.nohttp:gauc.no--ip.org/awkip.org/awk--usersusers--jpjp//

AD Block Plus AD Block Plus からのからのからのからのからのからのからのからの変換変換変換変換変換変換変換変換

⇒⇒⇒⇒⇒⇒⇒⇒ 動作確認済動作確認済動作確認済動作確認済みみみみ動作確認済動作確認済動作確認済動作確認済みみみみ!!

�OSC2012 Tokyo/Fall で公表?

�載せられなかった orz

�欲しいですか?

OSC2012 Tokyo/Fall

日本日本 GNU AWK GNU AWK ユーザー会ユーザー会 http:gauc.nohttp:gauc.no--ip.org/awkip.org/awk--usersusers--jpjp//

広告削除広告削除広告削除広告削除のののの例例例例広告削除広告削除広告削除広告削除のののの例例例例

⇒⇒⇒⇒⇒⇒⇒⇒ 広告広告広告広告だけだけだけだけ消消消消えますえますえますえます広告広告広告広告だけだけだけだけ消消消消えますえますえますえます

OSC2012 Tokyo/Fall

日本日本 GNU AWK GNU AWK ユーザー会ユーザー会 http:gauc.nohttp:gauc.no--ip.org/awkip.org/awk--usersusers--jpjp//

3G 3G でのでのでのでの広告削除広告削除広告削除広告削除のののの例例例例でのでのでのでの広告削除広告削除広告削除広告削除のののの例例例例

⇒⇒⇒⇒⇒⇒⇒⇒ iPhone iPhone でもでもでもでも使使使使えますえますえますえますでもでもでもでも使使使使えますえますえますえます

OSC2012 Tokyo/Fall

日本日本 GNU AWK GNU AWK ユーザー会ユーザー会 http:gauc.nohttp:gauc.no--ip.org/awkip.org/awk--usersusers--jpjp//

アプリアプリアプリアプリのののの広告削除広告削除広告削除広告削除のののの例例例例アプリアプリアプリアプリのののの広告削除広告削除広告削除広告削除のののの例例例例

⇒⇒⇒⇒⇒⇒⇒⇒ アプリアプリアプリアプリでもでもでもでも有効有効有効有効ですですですですアプリアプリアプリアプリでもでもでもでも有効有効有効有効ですですですです

OSC2012 Tokyo/Fall

日本日本 GNU AWK GNU AWK ユーザー会ユーザー会 http:gauc.nohttp:gauc.no--ip.org/awkip.org/awk--usersusers--jpjp//

まとめまとめまとめまとめまとめまとめまとめまとめ

⇒⇒⇒⇒⇒⇒⇒⇒ ごごごご清聴清聴清聴清聴ありがとうございましたありがとうございましたありがとうございましたありがとうございましたごごごご清聴清聴清聴清聴ありがとうございましたありがとうございましたありがとうございましたありがとうございました

�ブラックホールで不快なサイトを排除

�proxy.pac は JavaScript

�proxy.pac だと皆で使える