2017年5月14日

Raspberry Pi 3にmitmproxyを導入する


仕事での開発時によくお世話になっているmitmproxyですが、週末プライベートでの開発時にふと使いたくなったものの、自宅PCは無線LANの無いWindowsデスクトップだったり、有線LANの無いMacbook Proだったりするので、そのどちらも持っているRaspberry Pi 3(以下RasPi3)に導入してみました。

準備

まず本作業の前提条件として、RasPi3の無線LAN(wlan0)はアクセスポイントとして利用するため、有線LAN(eth0)もしくはUSB-LAN(eth1)などwlan0以外からインターネットへ接続できている必要があります。

また、/sbin/ifconfig -aコマンドを実行してwlan0が見えない場合、/etc/network/interfacesファイルを編集してwlan0を有効にします。
(iface wlan0 manualの先頭#を削除、次の行のwpa-conf先頭に#を追加)

hostapdのインストール

上記状態であることが確認できたら、以下のコマンドでRasPi3のwlan0をアクセスポイント化するhostapdをインストールします。
sudo apt-get update
sudo apt-get install hostapd
インストールが成功したら、/etc/hostapd/hostapd.conf設定ファイルを作成して以下の設定を書き込みます。
interface=wlan0
ssid=(SSID名)
country_code=JP
hw_mode=g
channel=1
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
ieee80211n=1
wpa=2
wpa_passphrase=(SSIDパスフレーズ)
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
設定ファイル作成が完了したら、wlan0に割り当てるIPアドレスを/etc/dhcpcd.confに設定します。
interface wlan0
static ip_address=192.168.137.1/24
最後にsudo hostapd /etc/hostapd/hostapd.confを実行してアクセスポイントを起動します。

OpenSSLのアップデート

次に、最新版のmitmproxyを導入する(apt-getでインストールできるmitmproxyはバージョンが古い)ため、OpenSSLを最新版にアップデートします。
最新版のOpenSSLパッケージを取得するため、/etc/apt/sources.list.d/backports.list設定ファイルを作成して、以下のDebian Backportsのリポジトリーを追加します。
deb http://httpredir.debian.org/debian jessie-backports main contrib non-free
追加したら、以下のコマンドを実行して上記リポジトリーのGPG鍵をインストールします。
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 7638D0442B90D010
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8B48AD6246925553
上記コマンド実行後、sudo apt-get updateを実行してパッケージデータベースの更新を行います。

最後に以下のコマンドを実行して、最新版のOpenSSLにアップデートします。
sudo apt-get install -t jessie-backports -y openssl libssl-dev

最新版Pythonのインストール

mitmproxyはPython 3.5以上が必要ですが、RasPi3には3.4系までしかインストールされていないため、最新版ソースをダウンロードしてビルド&インストールします。
curl -O https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz
tar xvfJ Python-3.6.1.tar.xz
cd Python-3.6.1
./configure
make
sudo make install
インストールが完了したら、pip3をアップグレードします。
sudo pip3 install --upgrade pip

mitmproxyのインストール

ここまでの作業で最新版のmitmproxyをインストールする準備が整ったので、以下のコマンドを実行してインストールします。
sudo pip3 install mitmproxy
インストールが完了したら、以下のコマンドのどちらかを実行してmitmproxyを起動します。
mitmproxy --insecure --port 1324
mitmweb --insecure --no-browser --web-iface 192.168.0.3 --port 1324

接続テスト

ここまでで、hostapdとmitmproxyが起動した状態になりましたので、スマホなどの無線LANクライアントをhostapdで作成したアクセスポイントに接続します。
今回は導入を簡単にするため、DHCPサーバーなどのインストールは行っていないため、IPアドレスなどの情報は全て手入力します。
上記までの設定の場合、IPアドレスは192.168.137.2、Proxyサーバーアドレスは192.168.137.1、ポート番号は1324となります。

最後に

ここまでの設定で、スマホのHTTP通信は見えるるようになっているかと思いますが、HTTPS通信も見る場合はmitm.itに接続してSSL証明書をインストールするといった作業が必要になります。

また、前述の通りDHCPサーバーの導入や、mitmproxyを透過型モードで動作させるための設定(iptablesやnet.ipv4.ip_forwardなど)は今回行っていないため、必要であれば以下のページを参考に設定してみるといいかもしれません。

Raspberry Pi 3 アクセスポイント化 〜hostapd〜 - はっとてっくろぐ
Raspberry PiとスマートフォンをWiFiでアドホック接続 - karaage. [からあげ]
Raspberry PI 3 + MITMProxy – Adam Engle
Raspberry Pi Debian Backports · superjamie/lazyweb Wiki · GitHub