Introduction
前回 は Mac で透過プロキシを実施した。
今回は Ubuntu。
実行環境は Ubuntu 24.04。
Wi-Fi 共有、つまり Ubuntu で言うところのホットスポットは有効済みが前提。
How to do?
1. mitmproxy のインストール
1 | $ sudo apt install -y mitmproxy |
2. IP フォワーディングを有効にする
下記の手順は再起動も有効な永続化だが、無効方法もあるので、適宜判断。
1 | $ echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/99-custom.conf |
無効にする場合は
1 | $ sudo rm /etc/sysctl.d/99-custom.conf |
3. ICMP リダイレクトの無効化
ICMP パケットをリダイレクトしないようにルールを追加。
同じ物理ネットワーク上にクライアントが存在する場合 (普通はそうだと思うが)、マシンがデバイスにプロキシをスキップすることでより短いルートが利用可能であることを通知することを防止する。
1 | $ echo "net.ipv4.conf.all.send_redirects=0" | sudo tee /etc/sysctl.d/99-custom.conf |
無効にする場合は先の IP フォワーディングと同様
1 | $ sudo rm /etc/sysctl.d/99-custom.conf |
4. mitmproxy にトラフィックを流す
8080 で待機する mitmproxy
にトラフィックを流すように iptables
を変更iptables-persistent
で永続化する。
1 | $ sudo apt install -y iptables-persistent |
現在の設定を保存するかを IPv4 と IPv6 それぞれに対して聞かれるので Yes。
次に iptables
のルールに追加。
<IF> を先のインターフェース名に変更して下記を実行。
つまり、ここで Wi-Fi のインターフェース名を指定しないと、何時まで経ってもホットスポットに繋げてくるクライアントの通信が mitmproxy
に流れないので注意。
インターフェース名は ifconfig
で調べる。
1 | $ sudo iptables -t nat -A PREROUTING -i <IF> -p tcp --dport 80 -j REDIRECT --to-port 8080 |
再起動後は
1 | $ sudo netfilter-persistent reload |
すればよい。
削除する場合は、<IF> を先のインターフェース名に変更して下記を実行。
1 | $ sudo netfilter-persistent reload |
5. mitmproxy の起動
管理者権限のコマンドプロンプトで実行。
1 | $ mitmproxy --mode transparent --showhost |
6. CA 証明書のインストール
ここからは Mac と同じ。
mitmproxy
の役割は透過プロキシであり、名前が示す通り MITM = Man-In-The-Middle : 中間者である。
そのため、クライアントに対して https 通信に必要なオレオレ CA 証明書をホットスポットに接続する端末にインストールする。
Ubuntu のホットスポットにアクセスした端末、 http://mitm.it
にアクセスする。
今回も iOS なので iOS の ca-cert.pem を選択してダウンロード。
許可を求められるので許可する。
ダウンロードされる。
iOS の 設定 -> 一般 -> VPN とデバイス管理 に移動。
先にダウンロードしたプロファイルが表示されている。
プロファイルを選択。
インストールを実行。
インストール完了。
iOS の 設定 -> 一般 -> 情報 -> 証明書信頼設定 に移動。
mitmproxy を選択。
続ける を選択し、証明書を有効にする。
10. クライアントの通信を傍受
試しにクライアントで https://gitlab.com にアクセス。
通信内容が mitmproxy に表示される。