SlideShare a Scribd company logo
1 of 24
Download to read offline
OSC2012 Tokyo/Fall




    ブラックホール Proxy を作る
         不快なサイトを非表示に

                                   斉藤 博文
                       hi_saito@yk.rim.or.jp
                                  @hi_saito

日本 GNU AWK ユーザー会   http:gauc.no-ip.org/awk-users-jp/
OSC2012 Tokyo/Fall



不快なサイトとか広告とか
不快なサイトとか広告とか・・・
      とか広告とか・・・
  有害と分かっているサイトがある
  子供に見せたくない
  親が変なサイトに行かないか心配



  ⇒ 困っていませんか?
日本 GNU AWK ユーザー会   http:gauc.no-ip.org/awk-users-jp/
OSC2012 Tokyo/Fall



一般的な
一般的な制限方法
  市販ソフトやプロバイダによるブロック
  hosts によるブロック
  ブラウザのアドオンによるブロック



    どれも一長一短
  ⇒ どれも一長一短
日本 GNU AWK ユーザー会   http:gauc.no-ip.org/awk-users-jp/
OSC2012 Tokyo/Fall



そこで proxy.pac!
  Proxy なんて使ってないよ!
  使える関数は FindProxyForURL()
  だけ?
  shExpMatch() とかオワコン!


    でも実際
      実際は
  ⇒ でも実際は JavaScript
日本 GNU AWK ユーザー会   http:gauc.no-ip.org/awk-users-jp/
OSC2012 Tokyo/Fall



127.0.0.1 に返す?
  "Not Found" となるのはイヤ
  画像が「×」になるのはイヤ
  httpd 立てるのは面倒



      方法はないか
  ⇒ 良い方法はないか?
日本 GNU AWK ユーザー会   http:gauc.no-ip.org/awk-users-jp/
OSC2012 Tokyo/Fall



ブラックホール Proxy
  どんなリクエストにも同じものを返す
    例えば透過画像を返す
    例えば空文字を返す




  ⇒ それって Proxy ではなく httpd
日本 GNU AWK ユーザー会   http:gauc.no-ip.org/awk-users-jp/
OSC2012 Tokyo/Fall



Proxy を作る
  どうやって作ればいいの?
  Proxy って難しそう
  マルチスレッドじゃないとね



  ⇒ 単一言語だけだと面倒
    単一言語だけだと
        だけだと面倒
日本 GNU AWK ユーザー会   http:gauc.no-ip.org/awk-users-jp/
OSC2012 Tokyo/Fall



xinetd と AWK のタッグ
  xinetd を使うと簡単
    クエリは標準入力
    スレッド管理とか不要




  ⇒ xinetd 万歳!
日本 GNU AWK ユーザー会   http:gauc.no-ip.org/awk-users-jp/
OSC2012 Tokyo/Fall



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");
}


   ⇒ なんとこれだけ!
日本 GNU AWK ユーザー会                     http:gauc.no-ip.org/awk-users-jp/
OSC2012 Tokyo/Fall



bash 版
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"


   ⇒ 動作未確認
日本 GNU AWK ユーザー会                       http:gauc.no-ip.org/awk-users-jp/
OSC2012 Tokyo/Fall



xinetd.d/blackhole_proxy
service blackhole_proxy
{
    socket_type = stream
    wait        = no
    user        = root
    server      = /bin/blackhole_proxy.awk
    disable     = no
}




   ⇒ xinetd に登録
日本 GNU AWK ユーザー会                     http:gauc.no-ip.org/awk-users-jp/
OSC2012 Tokyo/Fall



/etc/services
blackhole_proxy   tcp/81




     サービスに
   ⇒ サービスに登録
日本 GNU AWK ユーザー会           http:gauc.no-ip.org/awk-users-jp/
OSC2012 Tokyo/Fall



proxy.pac
function FindProxyForURL(url, host) {
    // Black List
    if (url.match(/なんとか/)                ||
        url.match(/かんとか/)) {
        return "PROXY gauc.no-ip.org:81;";
    }
    return "DIRECT";
}




   ⇒ shExpMatch は捨て捨て!
日本 GNU AWK ユーザー会                     http:gauc.no-ip.org/awk-users-jp/
OSC2012 Tokyo/Fall



配列版 proxy.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";
}


   ⇒ 配列使ってメンテしやすく
     配列使ってメンテしやすく
        ってメンテ
日本 GNU AWK ユーザー会                     http:gauc.no-ip.org/awk-users-jp/
OSC2012 Tokyo/Fall



サーバー立
サーバー立てられないよ
  やりましょう!
    試験的に公開
    使うかどうかはおまかせ




  ⇒ gauc.no-ip.org:81!
日本 GNU AWK ユーザー会   http:gauc.no-ip.org/awk-users-jp/
OSC2012 Tokyo/Fall



スマホの
スマホの 3G でも使いたい
        でも使
  VPN サーバーを立てれば OK
    接続が自動的に切れちゃう欠点
    暗号化はバッテリー消費が大きい




        サーバーは各自で
  ⇒ VPN サーバーは各自で立ててね
日本 GNU AWK ユーザー会   http:gauc.no-ip.org/awk-users-jp/
OSC2012 Tokyo/Fall



           だと重
JavaScript だと重くない?
  どれでも数が多いと重くなる
    hosts も同じ
    Squid も同じ




  ⇒ 必要に応じて加えるのが賢明
    必要に じて加えるのが賢明
日本 GNU AWK ユーザー会   http:gauc.no-ip.org/awk-users-jp/
OSC2012 Tokyo/Fall



資料の公開は
資料の公開は後でやります
  OSC2012 Tokyo/Fall も同じネタ
    当日はデモを予定
    なので、資料の公開は再来週を予定




    ブースに びに来
  ⇒ ブースに遊びに来てね
日本 GNU AWK ユーザー会   http:gauc.no-ip.org/awk-users-jp/
OSC2012 Tokyo/Fall



proxy.pac 作るのもめんどい
  AD Block Plus のファイルを使う
    100 % 変換はできない
    でも、単なるテキスト変換




  ⇒ これこそ AWK の出番!
日本 GNU AWK ユーザー会   http:gauc.no-ip.org/awk-users-jp/
OSC2012 Tokyo/Fall



AD Block Plus からの変換
  OSC2012 Tokyo/Fall で公表?
    載せられなかった orz
    欲しいですか?




    動作確認済み
  ⇒ 動作確認済み!
日本 GNU AWK ユーザー会   http:gauc.no-ip.org/awk-users-jp/
OSC2012 Tokyo/Fall



広告削除の
広告削除の例




    広告だけ
      だけ消
  ⇒ 広告だけ消えます
日本 GNU AWK ユーザー会   http:gauc.no-ip.org/awk-users-jp/
OSC2012 Tokyo/Fall



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




           でも使
  ⇒ iPhone でも使えます
日本 GNU AWK ユーザー会   http:gauc.no-ip.org/awk-users-jp/
OSC2012 Tokyo/Fall



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




  ⇒ アプリでも有効です
    アプリでも有効です
       でも有効
日本 GNU AWK ユーザー会   http:gauc.no-ip.org/awk-users-jp/
OSC2012 Tokyo/Fall



まとめ
  ブラックホールで不快なサイトを排除
  proxy.pac は JavaScript
  proxy.pac だと皆で使える



     清聴ありがとうございました
  ⇒ ご清聴ありがとうございました
日本 GNU AWK ユーザー会   http:gauc.no-ip.org/awk-users-jp/

More Related Content

What's hot

Cloud Foundryのコンポーネントloggregatorについて
Cloud FoundryのコンポーネントloggregatorについてCloud Foundryのコンポーネントloggregatorについて
Cloud FoundryのコンポーネントloggregatorについてTakeshi Morikawa
 
UniRx勉強会 reactive extensions inside(公開用)
UniRx勉強会   reactive extensions inside(公開用)UniRx勉強会   reactive extensions inside(公開用)
UniRx勉強会 reactive extensions inside(公開用)wilfrem
 
Introductionof taskflow
Introductionof taskflowIntroductionof taskflow
Introductionof taskflowharubelle
 
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方Yoshifumi Kawai
 
OpenShift from Easy way to Hard ? Way
OpenShift from Easy way to Hard ? WayOpenShift from Easy way to Hard ? Way
OpenShift from Easy way to Hard ? Wayロフト くん
 
C#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive ExtensionsC#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive ExtensionsYoshifumi Kawai
 
大規模Node.jsを支える ロードバランスとオートスケールの独自実装
大規模Node.jsを支える ロードバランスとオートスケールの独自実装大規模Node.jsを支える ロードバランスとオートスケールの独自実装
大規模Node.jsを支える ロードバランスとオートスケールの独自実装kidach1
 
Reactive Extensions v2.0
Reactive Extensions v2.0Reactive Extensions v2.0
Reactive Extensions v2.0Yoshifumi Kawai
 
linq.js - Linq to Objects for JavaScript
linq.js - Linq to Objects for JavaScriptlinq.js - Linq to Objects for JavaScript
linq.js - Linq to Objects for JavaScriptYoshifumi Kawai
 
Rxに入門しようとしている
Rxに入門しようとしているRxに入門しようとしている
Rxに入門しようとしているonotchi_
 
シェルスクリプトワークショップ資料 - 上級者向け「シェル芸」
シェルスクリプトワークショップ資料 - 上級者向け「シェル芸」シェルスクリプトワークショップ資料 - 上級者向け「シェル芸」
シェルスクリプトワークショップ資料 - 上級者向け「シェル芸」博文 斉藤
 
「クリエイティブ・ミュージック・コーディング」- オーディオ・ビジュアル作品のための、オープンソースなソフトウエア・フレームワークの現状と展望
「クリエイティブ・ミュージック・コーディング」- オーディオ・ビジュアル作品のための、オープンソースなソフトウエア・フレームワークの現状と展望「クリエイティブ・ミュージック・コーディング」- オーディオ・ビジュアル作品のための、オープンソースなソフトウエア・フレームワークの現状と展望
「クリエイティブ・ミュージック・コーディング」- オーディオ・ビジュアル作品のための、オープンソースなソフトウエア・フレームワークの現状と展望Atsushi Tadokoro
 

What's hot (17)

Cloud Foundryのコンポーネントloggregatorについて
Cloud FoundryのコンポーネントloggregatorについてCloud Foundryのコンポーネントloggregatorについて
Cloud Foundryのコンポーネントloggregatorについて
 
Griffon10 in groovy_fx
Griffon10 in groovy_fxGriffon10 in groovy_fx
Griffon10 in groovy_fx
 
UniRx勉強会 reactive extensions inside(公開用)
UniRx勉強会   reactive extensions inside(公開用)UniRx勉強会   reactive extensions inside(公開用)
UniRx勉強会 reactive extensions inside(公開用)
 
Clrh 20140906 lt
Clrh 20140906 ltClrh 20140906 lt
Clrh 20140906 lt
 
Introductionof taskflow
Introductionof taskflowIntroductionof taskflow
Introductionof taskflow
 
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
 
LINQ in Unity
LINQ in UnityLINQ in Unity
LINQ in Unity
 
OpenShift from Easy way to Hard ? Way
OpenShift from Easy way to Hard ? WayOpenShift from Easy way to Hard ? Way
OpenShift from Easy way to Hard ? Way
 
C#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive ExtensionsC#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive Extensions
 
大規模Node.jsを支える ロードバランスとオートスケールの独自実装
大規模Node.jsを支える ロードバランスとオートスケールの独自実装大規模Node.jsを支える ロードバランスとオートスケールの独自実装
大規模Node.jsを支える ロードバランスとオートスケールの独自実装
 
Reactive Extensions v2.0
Reactive Extensions v2.0Reactive Extensions v2.0
Reactive Extensions v2.0
 
linq.js - Linq to Objects for JavaScript
linq.js - Linq to Objects for JavaScriptlinq.js - Linq to Objects for JavaScript
linq.js - Linq to Objects for JavaScript
 
Rxに入門しようとしている
Rxに入門しようとしているRxに入門しようとしている
Rxに入門しようとしている
 
Synverll
SynverllSynverll
Synverll
 
Groovy joint
Groovy jointGroovy joint
Groovy joint
 
シェルスクリプトワークショップ資料 - 上級者向け「シェル芸」
シェルスクリプトワークショップ資料 - 上級者向け「シェル芸」シェルスクリプトワークショップ資料 - 上級者向け「シェル芸」
シェルスクリプトワークショップ資料 - 上級者向け「シェル芸」
 
「クリエイティブ・ミュージック・コーディング」- オーディオ・ビジュアル作品のための、オープンソースなソフトウエア・フレームワークの現状と展望
「クリエイティブ・ミュージック・コーディング」- オーディオ・ビジュアル作品のための、オープンソースなソフトウエア・フレームワークの現状と展望「クリエイティブ・ミュージック・コーディング」- オーディオ・ビジュアル作品のための、オープンソースなソフトウエア・フレームワークの現状と展望
「クリエイティブ・ミュージック・コーディング」- オーディオ・ビジュアル作品のための、オープンソースなソフトウエア・フレームワークの現状と展望
 

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

日本 GNU AWK ユーザー会スライド 1 - OSC2012 Tokyo/Fall
日本 GNU AWK ユーザー会スライド 1 - OSC2012 Tokyo/Fall日本 GNU AWK ユーザー会スライド 1 - OSC2012 Tokyo/Fall
日本 GNU AWK ユーザー会スライド 1 - OSC2012 Tokyo/Fall博文 斉藤
 
Makerの「道具」としてのLSI ~「LED点滅用のLSIをつくって   Lチカをやってみた」のココロ~(MakerFaireTokyo2014)
Makerの「道具」としてのLSI~「LED点滅用のLSIをつくって  Lチカをやってみた」のココロ~(MakerFaireTokyo2014)Makerの「道具」としてのLSI~「LED点滅用のLSIをつくって  Lチカをやってみた」のココロ~(MakerFaireTokyo2014)
Makerの「道具」としてのLSI ~「LED点滅用のLSIをつくって   Lチカをやってみた」のココロ~(MakerFaireTokyo2014)Junichi Akita
 
おれが考えた見やすい通知
おれが考えた見やすい通知おれが考えた見やすい通知
おれが考えた見やすい通知Yoshiyuki MIKAMI
 
Fluentdで本番環境を再現
Fluentdで本番環境を再現Fluentdで本番環境を再現
Fluentdで本番環境を再現Hiroshi Toyama
 
20130315 abc firefox_os
20130315 abc firefox_os20130315 abc firefox_os
20130315 abc firefox_osTomoaki Konno
 
OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料
OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料
OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料博文 斉藤
 
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall博文 斉藤
 
Lightweight Keycloak
Lightweight KeycloakLightweight Keycloak
Lightweight KeycloakHiroyuki Wada
 
Introduce that Best practices for writing Dockerfiles
Introduce that Best practices for writing DockerfilesIntroduce that Best practices for writing Dockerfiles
Introduce that Best practices for writing DockerfilesYukiya Hayashi
 
Nodeにしましょう
NodeにしましょうNodeにしましょう
NodeにしましょうYuzo Hebishima
 
Jenkins に XFD を追加してみると
Jenkins に XFD を追加してみるとJenkins に XFD を追加してみると
Jenkins に XFD を追加してみるとKiro Harada
 
20220412 IoTLT vol86 kitazaki v1
20220412 IoTLT vol86 kitazaki v120220412 IoTLT vol86 kitazaki v1
20220412 IoTLT vol86 kitazaki v1Ayachika Kitazaki
 
ClojureでElectronアプリを作ろう
ClojureでElectronアプリを作ろうClojureでElectronアプリを作ろう
ClojureでElectronアプリを作ろうKazuhiro Hara
 
Vagrant を Web開発環境に使う
Vagrant を Web開発環境に使うVagrant を Web開発環境に使う
Vagrant を Web開発環境に使うMasashi Shinbara
 
Programming camp Codereading
Programming camp CodereadingProgramming camp Codereading
Programming camp CodereadingHiro Yoshioka
 
DockerCon参加報告 (`docker build`が30倍以上速くなる話など)
DockerCon参加報告 (`docker build`が30倍以上速くなる話など)DockerCon参加報告 (`docker build`が30倍以上速くなる話など)
DockerCon参加報告 (`docker build`が30倍以上速くなる話など)Akihiro Suda
 
OSC Nagoya NETMF 160528
OSC Nagoya NETMF 160528OSC Nagoya NETMF 160528
OSC Nagoya NETMF 160528Atomu Hidaka
 
Building Static Website With Github And Jekyll
Building Static Website With Github And JekyllBuilding Static Website With Github And Jekyll
Building Static Website With Github And JekyllYoji Shidara
 
Apacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasiaApacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasia鉄次 尾形
 

Similar to 日本 GNU AWK ユーザー会スライド 2 - OSC2012 Tokyo/Fall (20)

日本 GNU AWK ユーザー会スライド 1 - OSC2012 Tokyo/Fall
日本 GNU AWK ユーザー会スライド 1 - OSC2012 Tokyo/Fall日本 GNU AWK ユーザー会スライド 1 - OSC2012 Tokyo/Fall
日本 GNU AWK ユーザー会スライド 1 - OSC2012 Tokyo/Fall
 
Makerの「道具」としてのLSI ~「LED点滅用のLSIをつくって   Lチカをやってみた」のココロ~(MakerFaireTokyo2014)
Makerの「道具」としてのLSI~「LED点滅用のLSIをつくって  Lチカをやってみた」のココロ~(MakerFaireTokyo2014)Makerの「道具」としてのLSI~「LED点滅用のLSIをつくって  Lチカをやってみた」のココロ~(MakerFaireTokyo2014)
Makerの「道具」としてのLSI ~「LED点滅用のLSIをつくって   Lチカをやってみた」のココロ~(MakerFaireTokyo2014)
 
おれが考えた見やすい通知
おれが考えた見やすい通知おれが考えた見やすい通知
おれが考えた見やすい通知
 
Fluentdで本番環境を再現
Fluentdで本番環境を再現Fluentdで本番環境を再現
Fluentdで本番環境を再現
 
20130315 abc firefox_os
20130315 abc firefox_os20130315 abc firefox_os
20130315 abc firefox_os
 
OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料
OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料
OSC・シェルのプロが語る『make を使ったデータ処理。』 【make 教】 - OSC2015 Tokyo/Spring 発表資料
 
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall
日本 GNU AWK ユーザー会チラシ - OSC2012 Tokyo/Fall
 
Lightweight Keycloak
Lightweight KeycloakLightweight Keycloak
Lightweight Keycloak
 
Introduce that Best practices for writing Dockerfiles
Introduce that Best practices for writing DockerfilesIntroduce that Best practices for writing Dockerfiles
Introduce that Best practices for writing Dockerfiles
 
Nodeにしましょう
NodeにしましょうNodeにしましょう
Nodeにしましょう
 
Jenkins に XFD を追加してみると
Jenkins に XFD を追加してみるとJenkins に XFD を追加してみると
Jenkins に XFD を追加してみると
 
20220412 IoTLT vol86 kitazaki v1
20220412 IoTLT vol86 kitazaki v120220412 IoTLT vol86 kitazaki v1
20220412 IoTLT vol86 kitazaki v1
 
ClojureでElectronアプリを作ろう
ClojureでElectronアプリを作ろうClojureでElectronアプリを作ろう
ClojureでElectronアプリを作ろう
 
Vagrant を Web開発環境に使う
Vagrant を Web開発環境に使うVagrant を Web開発環境に使う
Vagrant を Web開発環境に使う
 
Programming camp Codereading
Programming camp CodereadingProgramming camp Codereading
Programming camp Codereading
 
Bp study39 nodejs
Bp study39 nodejsBp study39 nodejs
Bp study39 nodejs
 
DockerCon参加報告 (`docker build`が30倍以上速くなる話など)
DockerCon参加報告 (`docker build`が30倍以上速くなる話など)DockerCon参加報告 (`docker build`が30倍以上速くなる話など)
DockerCon参加報告 (`docker build`が30倍以上速くなる話など)
 
OSC Nagoya NETMF 160528
OSC Nagoya NETMF 160528OSC Nagoya NETMF 160528
OSC Nagoya NETMF 160528
 
Building Static Website With Github And Jekyll
Building Static Website With Github And JekyllBuilding Static Website With Github And Jekyll
Building Static Website With Github And Jekyll
 
Apacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasiaApacheの展望とmod_perlの超絶技巧 #yapcasia
Apacheの展望とmod_perlの超絶技巧 #yapcasia
 

More from 博文 斉藤

Obsidian Talk JP 資料 - 2021-10-15
Obsidian Talk JP 資料 - 2021-10-15Obsidian Talk JP 資料 - 2021-10-15
Obsidian Talk JP 資料 - 2021-10-15博文 斉藤
 
 Obsidian Talk JP - Template & Daily notes - 2021-09-04
 Obsidian Talk JP - Template & Daily notes - 2021-09-04 Obsidian Talk JP - Template & Daily notes - 2021-09-04
 Obsidian Talk JP - Template & Daily notes - 2021-09-04博文 斉藤
 
Markdown で行こう!
Markdown で行こう!Markdown で行こう!
Markdown で行こう!博文 斉藤
 
シェルスクリプトワークショップ資料 - 初心者向け「シェル芸」
シェルスクリプトワークショップ資料 - 初心者向け「シェル芸」シェルスクリプトワークショップ資料 - 初心者向け「シェル芸」
シェルスクリプトワークショップ資料 - 初心者向け「シェル芸」博文 斉藤
 
「やっちまったぁ!」を防ごう!
「やっちまったぁ!」を防ごう!「やっちまったぁ!」を防ごう!
「やっちまったぁ!」を防ごう!博文 斉藤
 
Shell で制限付き並列処理をしよう
Shell で制限付き並列処理をしようShell で制限付き並列処理をしよう
Shell で制限付き並列処理をしよう博文 斉藤
 
curl で iPhone にプッシュ通知しよう
curl で iPhone にプッシュ通知しようcurl で iPhone にプッシュ通知しよう
curl で iPhone にプッシュ通知しよう博文 斉藤
 
Usptomonokai 20111028
Usptomonokai 20111028Usptomonokai 20111028
Usptomonokai 20111028博文 斉藤
 
USP 友の会 LT 資料 20130413
USP 友の会 LT 資料 20130413USP 友の会 LT 資料 20130413
USP 友の会 LT 資料 20130413博文 斉藤
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法博文 斉藤
 
お手軽並列処理
お手軽並列処理お手軽並列処理
お手軽並列処理博文 斉藤
 

More from 博文 斉藤 (11)

Obsidian Talk JP 資料 - 2021-10-15
Obsidian Talk JP 資料 - 2021-10-15Obsidian Talk JP 資料 - 2021-10-15
Obsidian Talk JP 資料 - 2021-10-15
 
 Obsidian Talk JP - Template & Daily notes - 2021-09-04
 Obsidian Talk JP - Template & Daily notes - 2021-09-04 Obsidian Talk JP - Template & Daily notes - 2021-09-04
 Obsidian Talk JP - Template & Daily notes - 2021-09-04
 
Markdown で行こう!
Markdown で行こう!Markdown で行こう!
Markdown で行こう!
 
シェルスクリプトワークショップ資料 - 初心者向け「シェル芸」
シェルスクリプトワークショップ資料 - 初心者向け「シェル芸」シェルスクリプトワークショップ資料 - 初心者向け「シェル芸」
シェルスクリプトワークショップ資料 - 初心者向け「シェル芸」
 
「やっちまったぁ!」を防ごう!
「やっちまったぁ!」を防ごう!「やっちまったぁ!」を防ごう!
「やっちまったぁ!」を防ごう!
 
Shell で制限付き並列処理をしよう
Shell で制限付き並列処理をしようShell で制限付き並列処理をしよう
Shell で制限付き並列処理をしよう
 
curl で iPhone にプッシュ通知しよう
curl で iPhone にプッシュ通知しようcurl で iPhone にプッシュ通知しよう
curl で iPhone にプッシュ通知しよう
 
Usptomonokai 20111028
Usptomonokai 20111028Usptomonokai 20111028
Usptomonokai 20111028
 
USP 友の会 LT 資料 20130413
USP 友の会 LT 資料 20130413USP 友の会 LT 資料 20130413
USP 友の会 LT 資料 20130413
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法
 
お手軽並列処理
お手軽並列処理お手軽並列処理
お手軽並列処理
 

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

  • 1. OSC2012 Tokyo/Fall ブラックホール Proxy を作る 不快なサイトを非表示に 斉藤 博文 hi_saito@yk.rim.or.jp @hi_saito 日本 GNU AWK ユーザー会 http:gauc.no-ip.org/awk-users-jp/
  • 2. OSC2012 Tokyo/Fall 不快なサイトとか広告とか 不快なサイトとか広告とか・・・ とか広告とか・・・ 有害と分かっているサイトがある 子供に見せたくない 親が変なサイトに行かないか心配 ⇒ 困っていませんか? 日本 GNU AWK ユーザー会 http:gauc.no-ip.org/awk-users-jp/
  • 3. OSC2012 Tokyo/Fall 一般的な 一般的な制限方法 市販ソフトやプロバイダによるブロック hosts によるブロック ブラウザのアドオンによるブロック どれも一長一短 ⇒ どれも一長一短 日本 GNU AWK ユーザー会 http:gauc.no-ip.org/awk-users-jp/
  • 4. OSC2012 Tokyo/Fall そこで proxy.pac! Proxy なんて使ってないよ! 使える関数は FindProxyForURL() だけ? shExpMatch() とかオワコン! でも実際 実際は ⇒ でも実際は JavaScript 日本 GNU AWK ユーザー会 http:gauc.no-ip.org/awk-users-jp/
  • 5. OSC2012 Tokyo/Fall 127.0.0.1 に返す? "Not Found" となるのはイヤ 画像が「×」になるのはイヤ httpd 立てるのは面倒 方法はないか ⇒ 良い方法はないか? 日本 GNU AWK ユーザー会 http:gauc.no-ip.org/awk-users-jp/
  • 6. OSC2012 Tokyo/Fall ブラックホール Proxy どんなリクエストにも同じものを返す 例えば透過画像を返す 例えば空文字を返す ⇒ それって Proxy ではなく httpd 日本 GNU AWK ユーザー会 http:gauc.no-ip.org/awk-users-jp/
  • 7. OSC2012 Tokyo/Fall Proxy を作る どうやって作ればいいの? Proxy って難しそう マルチスレッドじゃないとね ⇒ 単一言語だけだと面倒 単一言語だけだと だけだと面倒 日本 GNU AWK ユーザー会 http:gauc.no-ip.org/awk-users-jp/
  • 8. OSC2012 Tokyo/Fall xinetd と AWK のタッグ xinetd を使うと簡単 クエリは標準入力 スレッド管理とか不要 ⇒ xinetd 万歳! 日本 GNU AWK ユーザー会 http:gauc.no-ip.org/awk-users-jp/
  • 9. OSC2012 Tokyo/Fall 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"); } ⇒ なんとこれだけ! 日本 GNU AWK ユーザー会 http:gauc.no-ip.org/awk-users-jp/
  • 10. OSC2012 Tokyo/Fall bash 版 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" ⇒ 動作未確認 日本 GNU AWK ユーザー会 http:gauc.no-ip.org/awk-users-jp/
  • 11. OSC2012 Tokyo/Fall xinetd.d/blackhole_proxy service blackhole_proxy { socket_type = stream wait = no user = root server = /bin/blackhole_proxy.awk disable = no } ⇒ xinetd に登録 日本 GNU AWK ユーザー会 http:gauc.no-ip.org/awk-users-jp/
  • 12. OSC2012 Tokyo/Fall /etc/services blackhole_proxy tcp/81 サービスに ⇒ サービスに登録 日本 GNU AWK ユーザー会 http:gauc.no-ip.org/awk-users-jp/
  • 13. OSC2012 Tokyo/Fall proxy.pac function FindProxyForURL(url, host) { // Black List if (url.match(/なんとか/) || url.match(/かんとか/)) { return "PROXY gauc.no-ip.org:81;"; } return "DIRECT"; } ⇒ shExpMatch は捨て捨て! 日本 GNU AWK ユーザー会 http:gauc.no-ip.org/awk-users-jp/
  • 14. OSC2012 Tokyo/Fall 配列版 proxy.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"; } ⇒ 配列使ってメンテしやすく 配列使ってメンテしやすく ってメンテ 日本 GNU AWK ユーザー会 http:gauc.no-ip.org/awk-users-jp/
  • 15. OSC2012 Tokyo/Fall サーバー立 サーバー立てられないよ やりましょう! 試験的に公開 使うかどうかはおまかせ ⇒ gauc.no-ip.org:81! 日本 GNU AWK ユーザー会 http:gauc.no-ip.org/awk-users-jp/
  • 16. OSC2012 Tokyo/Fall スマホの スマホの 3G でも使いたい でも使 VPN サーバーを立てれば OK 接続が自動的に切れちゃう欠点 暗号化はバッテリー消費が大きい サーバーは各自で ⇒ VPN サーバーは各自で立ててね 日本 GNU AWK ユーザー会 http:gauc.no-ip.org/awk-users-jp/
  • 17. OSC2012 Tokyo/Fall だと重 JavaScript だと重くない? どれでも数が多いと重くなる hosts も同じ Squid も同じ ⇒ 必要に応じて加えるのが賢明 必要に じて加えるのが賢明 日本 GNU AWK ユーザー会 http:gauc.no-ip.org/awk-users-jp/
  • 18. OSC2012 Tokyo/Fall 資料の公開は 資料の公開は後でやります OSC2012 Tokyo/Fall も同じネタ 当日はデモを予定 なので、資料の公開は再来週を予定 ブースに びに来 ⇒ ブースに遊びに来てね 日本 GNU AWK ユーザー会 http:gauc.no-ip.org/awk-users-jp/
  • 19. OSC2012 Tokyo/Fall proxy.pac 作るのもめんどい AD Block Plus のファイルを使う 100 % 変換はできない でも、単なるテキスト変換 ⇒ これこそ AWK の出番! 日本 GNU AWK ユーザー会 http:gauc.no-ip.org/awk-users-jp/
  • 20. OSC2012 Tokyo/Fall AD Block Plus からの変換 OSC2012 Tokyo/Fall で公表? 載せられなかった orz 欲しいですか? 動作確認済み ⇒ 動作確認済み! 日本 GNU AWK ユーザー会 http:gauc.no-ip.org/awk-users-jp/
  • 21. OSC2012 Tokyo/Fall 広告削除の 広告削除の例 広告だけ だけ消 ⇒ 広告だけ消えます 日本 GNU AWK ユーザー会 http:gauc.no-ip.org/awk-users-jp/
  • 22. OSC2012 Tokyo/Fall での広告削除 広告削除の 3G での広告削除の例 でも使 ⇒ iPhone でも使えます 日本 GNU AWK ユーザー会 http:gauc.no-ip.org/awk-users-jp/
  • 23. OSC2012 Tokyo/Fall アプリの広告削除の アプリの広告削除の例 ⇒ アプリでも有効です アプリでも有効です でも有効 日本 GNU AWK ユーザー会 http:gauc.no-ip.org/awk-users-jp/
  • 24. OSC2012 Tokyo/Fall まとめ ブラックホールで不快なサイトを排除 proxy.pac は JavaScript proxy.pac だと皆で使える 清聴ありがとうございました ⇒ ご清聴ありがとうございました 日本 GNU AWK ユーザー会 http:gauc.no-ip.org/awk-users-jp/