通信パケットを節約しよう その2 ziproxy
前回、モビライザーを利用して不要な情報を削除してパケットを節約してみました。今回は圧縮用のプロキシを家のサーバにインストールして根本的なパケットを節約してみようと思います。
今回の構成は (Server) ziproxy + (Local Mac) polipo です。細かく言えば更にそれぞれ Unbound がインストールされていますが、今回は Unbound については割愛します。
ziproxy は今回のメインで、画像などを圧縮してくれるプロキシです。しかしこれにはキャッシュ機能が無いためローカルに polipo もインストールしました。家のサーバは Mac mini による OS X Server ですが、ziproxy をインストールするのがめんどくさいので VirtualBox に Ubuntu をインストールして、そちらに ziproxy をインストールしました。ではまずそこから手順を説明します。
ziproxy の導入
- VirtualBox のダウンロード
Downloads – Oracle VM VirtualBox
- VirtualBox のインストール
ダウンロードした dmg ファイル (VirtualBox-4.3.2-90405-OSX.dmg) を開き、VirtualBox.pkg をインストールします。Mavericks の場合、途中で認証されてないとメッセージが表示されることがありますが、問題ありません。
-
Ubuntu のダウンロード
Ubuntu 13.10 日本語 Remix リリース | Ubuntu Japanese Team
Ubuntu 13.10 日本語 Remix リリースから 64bit 版の ISO イメージをダウンローそしてください。ダウンロード元はどれでも構いません。これらはすべて同じファイルがミラーされています。 - VirtualBox の起動
アプリケーションフォルダからVirtualBox を起動します。そして、左上の新規をクリックします。
名前とオペレーティングシステムでは、下記のように設定します。
名前: ub64 (任意)
タイプ: Linux
バージョン: Ubuntu (64 bit)
続けるをクリックします。
メモリーサイズ、メモリサイズは任意です。実メモリ容量を逼迫しないようにしてください。
ハードドライブ、仮想ハードドライブを作成するに設定、作成をクリックします。
ハードドライブのファイルタイプ、VDI (VirtualBox Disk Image) に設定、続けるをクリックします。
物理ハードドライブにあるストレージ、可変サイズに設定、続けるをクリック。
ファイルの場所とサイズ、そのまま作成をクリックします。保存できるデータ上限を増やしたい場合はスライダーを移動させてください。 -
仮想マシンの設定
ub64 を右クリックして設定...を開きます。
ストレージを開き、コントローラー: IDE にある空をクリック。右側の属性の円盤マークをクリック、仮想CD/DVDディスクファイルの選択... を選び、先ほどダウンロードした Ubuntu の ISO イメージファイルを指定してください。
(1)空を選択
(2)円盤をクリックしてファイルを選択(3)マウントした状態
次にネットワークを開き、ネットワークアダプターの割り当てをブリッジアダプターに変更します。 -
仮想マシンの起動
ub64 を右クリックして起動を選びます。ISO イメージから Ubuntu 13.10 が起動します。上部に表示されているメッセージは必要なければ右の青い✕マークをクリックして閉じてください。
デスクトップにある Ubuntu 13.10 のインストールを起動します。ようこそ、日本語のまま続けるをクリックします。
Ubuntu のインストール準備、インストール中にアップデートをダウンロードするとサードパーティのソフトウェアをインストールするの両方にチェックを付けます。
インストールの種類、そのままインストールをクリックします。
どこに住んでいますか?、Tokyo のまま続ける
キーボードレイアウト、日本語 - 日本語 (Macintosh) に変更して続ける
あなたの情報を入力してください、Ubuntu 用のアカウントを入力します。自動的にログインするにしておくと便利です。
One account to log in to everything on Ubuntu、これは無視して Log in later(後でログイン)をクリックします。
すべての項目が入力されたので、Ubuntu のインストールが始まります。
インストール完了後、右上の電源メニューからシャットダウンします。
この画面になったら Enter で抜けてください。その後、VirtualBox アプリケーションを一旦再起動します。
仮想マシンのストレージ設定に戻り、仮想 CD/DVD をアンマウントします。
ub64 を再起動します。
Mozc セットアップヘルパーが起動しますので、はい > OK > はい > はい > OK で進めます。更に右上の電源メニューから Ubuntu を再起動します。 - ziproxy のインストール
まず、Ubuntu の IP アドレスを調べるため、システム設定を開きます。
ハードウェアのネットワークを開きます。ここに IP アドレスが表示されています。
次に、必要なコンポーネントと ziproxy をインストールします。コンピューターとオンラインリソースを検索を開き、terminal と入力します。そしてアプリケーションの端末を開いてください。
ここからはコマンドラインの操作です。コマンドを入力した後に管理者権限のパスワードを入力してください。
% sudo apt-get update
% sudo apt-get upgrade
コマンド入力後、 y を入力して実行してください。
% sudo apt-get install vim ssh libgif-dev libjasper-dev libsasl2-dev ziproxy
これで ziproxy のインストールが完了しました。ついでに vim と ssh もインストールしたので、残りの作業は Mac から行おうと思います。Ubuntu はもう隠しておいてください。 - ziproxy の設定
アプリケーション > ユーティリティ > ターミナル を起動します。
% ssh [ユーザ名]@[ubuntuのip]
ziproxy の起動を確認
% sudo lsof -nPi:8080
ziproxy が表示されていたら正常に起動しています。
もし起動していなければ下記のコマンドで起動してください。
% sudo /etc/init.d/ziproxy start
ziproxy の設定を変更
% sudo mkdir /var/log/ziproxy
% sudo touch /var/log/ziproxy/error.log
% sudo chmod 666 /var/log/ziproxy/error.log
% sudo vi /etc/ziproxy/ziproxy.conf
設定変更点
Port = 81
ErrorLog = "/var/log/ziproxy/error.log"
AllowMethodCONNECT = true
ConnTimeout = 180
MaxSize = 0
UseContentLength = false
ProcessCSS = true
ImageQuality = {20,24,20,18}
他の部分はデフォルトで問題ありません。お好みで設定変更してください。
ziproxy の再起動および起動確認
% sudo service ziproxy restart
% sudo lsof -nPi:81
ポート番号がコンフィグ通りに正しくポートが81番に変わったことを確認します。
これで ziproxy の設定も完了しました。実際に動いているか Firefox の設定を変えて確認してみましょう。まず、適当な画像を Firefox で表示してデスクトップなどに保存します。その後に ziproxy へ接続を設定して、キャッシュクリア後に同じ画像ファイルを表示して保存します。先ほどの画像ファイルと容量を見比べてください。容量が小さくなっているなら成功です。
ネットワークルータの設定を変更して、TCPポート 81番を Ubuntu の IP アドレスにポートフォワードすることによって外からも ziproxy にアクセスできるようになります。この辺りの設定はご自身のネットワークルータの説明書をお読みください。外からアクセスするときは固定アドレスまたは DDNS などを利用してください。私は ddo.jp の無料プランを利用しています。
ちなみに ziproxy は認証をかけることができますが、その設定をすると https での接続に問題が発生します。これは後ほど説明する polipo でも同じです。そのため認証はあえて設定していません。外からアクセスするアドレスがバレると他の人に勝手に使われてしまうので、十分注意してください。
polipo の導入
ziproxy だけではキャッシュ機能に不安があるので polipo でキャッシュを強化します。そうすることで、過去に表示したことのあるページに関してはローカルキャッシュを読み込むので、さらにパケットの節約になります。
以前説明した方法を参考にローカルの Mac(例えば MacBook など)に polipo を設定しました。→ DNS キャッシュサーバの Unbound を Mountain Lion にインストールした。 - るるぷらす
- Xcode をインストールします。
Mac App Store - Xcode - MacPorts をインストールします。Mavericks 用もあります。
The MacPorts Project -- Download & Installation - ターミナルから sudo port install polipo を実行し、config を設定します。
% sudo port install polipo
% sudo rm /opt/local/etc/polipo/config
% sudo touch /opt/local/etc/polipo/config
% sudo vi /opt/local/etc/polipo/config
polipo の設定
proxyPort = 8123
dontCacheRedirects = true
dontCacheCookies = true
pipelineAdditionalRequests = true
maxPipelineTrain = 64
serverMaxSlots = 32
serverSlots = 32
serverSlots1 = 32
parentProxy = "[ziproxyがインストールされているサーバの外向きのアドレス]:81" - Lingon をインストールします。
Mac App Store - Lingon - Lingon で、org.macports.Polipo を Enable します。
- ローカルの Mac を再起動します。
システム環境設定から polipo を有効にしましょう。
yimg.jp は polipo と相性が悪い(polipo がクラッシュする)ので、必ず除外するようにしてください。
ちなみに、Dropbox を使用している人はその通信を阻害させないようにプロキシを無効にしてください。
iPhone にも ziproxy
ついでに iPhone の LTE/3G 通信にも ziproxy を適用する方法をご紹介しましょう。APN の設定を追加することでプロキシの設定を追加することができるので、それを利用しています。
- APN Setup にアクセスします。
- ソフトバンクであれば、下記の APN 設定を追加します。
APN: jpspir
Username: sirobit
Pass: amstkoi
その他のキャリアは、こちらをご参照ください。→ 小龍茶館 : 【iPhone APN設定】SIMフリーiPhoneで設定する日中APN設定覚書き - Submit をクリックしてプロファイルをインストールします。
これで LTE/G3 通信でも ziproxy が適用されます。もし削除する場合は、設定 > 一般 > プロファイル > Gevey APN を削除してください。
これで多くのパケットを節約できるはずです。
最後に、
サーバを再起動しても Ubuntu が自動起動できるように下記のファイルをアカウントのログイン項目に入れてください。
ホーム > VirtualBox VMs > ub64 > ub64.vbox
また、ずっとウィンドウが開いて起動しっぱなしになっているのもうるさい感じなので、Houdini というアプリを使用して自動的に非表示になるようにしています。→ Mac App Store - Houdini
追記(2015/2/3)
ziproxyを認証なしで運用していると、一週間ぐらいでプロクシの存在を嗅ぎつけた海外の輩が相乗りしてきたり、踏み台にしてきたりします。
その対策として Ubuntu に搭載されている ufw というファイアウォールを使用することにしました。
ufw の設定の前に、実際にどれ位自分の ziproxy にアクセスが有るか確認してみましょう。ziproxy のアクセスログはデフォルトで有効にされていないので、ファイルを準備して用意しましょう。
% sudo touch /var/log/ziproxy/access.log
% sudo chmod 666 /var/log/ziproxy/access.log
access.log ファイルを作成して、アクセス権を調整します。
% sudo vi /etc/ziproxy/ziproxy.conf
# AccessLog = "/var/log/ziproxy/access.log"
% sudo service ziproxy restart
コメントアウトされている # を削除します。
% cat /var/log/ziproxy/access.log
ログの内容を簡易的に確認するには cat を使います。
ログを確認してみて不審なIPアドレスのアクセスがないか確認します。
さて、踏み台になっていることが確定的になった時点で、まず、ziproxy.conf の port 設定をランダムな数字に変更して sudo service ziproxy restart します。これで、不正なアクセスを一時的に止めることができるはずです。
そして、ufw の設定を行います。デフォルトではサービスは起動していないので sudo ufw enable で有効にする必要があります。
% sudo ufw status
% sudo ufw default deny
% sudo ufw enable
% sudo ufw status
% sudo ufw allow from 192.168.0.0/24 to any port ssh
% sudo ufw allow from 192.168.0.0/24 to any port [ziproxy port]
% sudo ufw status
% sudo ufw reload
ziproxy に接続するIPアドレスをこんな感じでチョチョイのチョイと追加します。もし、外部からアクセスする必要がある場合は、そのIPアドレス帯域も追加するといいでしょう。
IPアドレス帯域がわからなければ、ziproxy のポートを戻して、access.log を確認してみてください。接続されたIPアドレスが分かるはずですので、そこからIPアドレス帯域を調べて追加すると良いでしょう。
ziproxy.conf の port を元に戻してしばらく運用し、不正アクセスが収まったようであれば、サーバの容量節約のためにも access.log を停止し、ファイルも削除しておきます。
ufw の詳しい設定は、下記をご参照ください。
以上。