【mitmproxy構築】CentOS7+L2TP/IPSec+unbound+mitmproxyでiphoneのギガ不足を解消する


[<<unbound構築](https://qiita.com/mykysyk@github/items/73d043f260cf06b4b46e) | [目次>>](https://qiita.com/mykysyk@github/items/17da126f7b0c08df475c)
#mitmproxy
https://mitmproxy.org/

##mitmproxy構築

[mitmproxyでhttps対応Data Compression Proxyを作る](https://qiita.com/tongari0/items/ffa3297630547c3bb712)を参考に構築

##構築履歴
###Python3.6インストール
```
yum install -y https://centos7.iuscommunity.org/ius-release.rpm
yum install git vim gcc libxml2-devel libxslt-devel zlib-devel libjpeg-turbo-devel openssl openssl-devel python-devel \
               python36u python36u-libs python36u-devel python36u-pip
```

###mitmproxyインストール
```
pip3.6 install mitmproxy pillow-simd brotli
```

###mitmproxy ユーザー作成
```
useradd -s /sbin/nologin -m -d /etc/mitmproxy mitmproxy
touch /etc/mitmproxy/mitmdump_daemon.sh
chmod 700 /etc/mitmproxy/mitmdump_daemon.sh
touch /etc/mitmproxy/flows.py
chmod 700 /etc/mitmproxy/flows.py
touch /etc/mitmproxy/mitmproxy-iptables-start.sh
chmod 700 /etc/mitmproxy/mitmproxy-iptables-start.sh
chown -R mitmproxy:mitmproxy /etc/mitmproxy
```

###flows.py

```/etc/mitmproxy/flows.py
vi /etc/mitmproxy/flows.py
```

###mitmproxy起動スクリプトの作成
```/etc/mitmproxy/mitmdump_daemon.sh
#!/bin/bash
/bin/mitmdump \
    --mode transparent \
    --listen-port 3126 \
    --ssl-insecure \
    -s /etc/mitmproxy/flows.py \
    --set stream_large_bodies=10m \
    --ignore-hosts '(mzstatic.com|apple.com|icloud.com|mobilesuica.com|crashlytics.com|google-analytics.com|.*\.line-scdn.net|.*\.line.naver.jp|.*\.twitter.com)' \
    --anticomp \
    --set block_global=false \
    --set flow_detail=2
```

###mitmproxy Systemd Unit ファイルの作成
```/usr/lib/systemd/system/mitmdump.service
Description=mitmdump service
After=network.target
[Service]
Type=simple
User=root
ExecStart=/etc/mitmproxy/mitmdump_daemon.sh
Restart=always
RestartSec=1
User=mitmproxy
Group=mitmproxy
[Install]
WantedBy=multi-user.target
```

###mitmproxy Firewall設定

```
firewall-cmd --permanent --new-zone=mitmproxy
firewall-cmd --permanent --zone=mitmproxy --add-port=3126/tcp
firewall-cmd --permanent --zone=mitmproxy --add-source=192.168.0.0/24
firewall-cmd --reload
firewall-cmd --list-all --zone=mitmproxy
```

###VPN経由の80/443宛ての接続をmitmproxyに向ける
firewall-cmdでのコマンド投入方法がわからないのでiptablesで登録する

```/etc/mitmproxy/mitmproxy-iptables-start.sh
#!/bin/bash

firewall-cmd --reload
sleep 3
iptables  -t nat -A PREROUTING -i ppp+ -p tcp --dport  80 -j REDIRECT --to-port 3126
iptables  -t nat -A PREROUTING -i ppp+ -p tcp --dport 443 -j REDIRECT --to-port 3126
ip6tables -t nat -A PREROUTING -i ppp+ -p tcp --dport  80 -j REDIRECT --to-port 3126
ip6tables -t nat -A PREROUTING -i ppp+ -p tcp --dport 443 -j REDIRECT --to-port 3126
```

####OS起動時に実行されるようにする
```
cp -av /etc/rc.d/rc.local /root/rc.local.backup
echo '/etc/mitmproxy/mitmproxy-iptables-start.sh' >> /etc/rc.d/rc.local
/etc/mitmproxy/mitmproxy-iptables-start.sh
```

###mitmproxyの起動
```
systemctl daemon-reload
systemctl start mitmdump.service
systemctl enable mitmdump.service
```

### iphone設定(危険なので自己責任で)
https://docs.mitmproxy.org/stable/concepts-certificates/
1. /etc/mitmproxy/.mitmproxy/mitmproxy-ca-cert.pemをiphoneにインストール
2. 設定 -> 一般 -> 情報 -> 証明書信頼設定 -> mitmproxy をONにして証明書を有効にする