Спасибо Бобу за то, что указал мне правильное направление. Иногда что-то действительно можно просто поискать в Google, если вы знаете, что искать.
@Боб прокомментировал:
Довольно обычный способ запуска прокси-сервера для приложений, которые не соблюдают настройки прокси-сервера, заключается в использовании правил брандмауэра для перезаписи всего исходящего трафика с веб-портом в качестве пункта назначения на прозрачный прокси-сервер. Довольно тривиально для простого http, но немного сложнее, когда речь идет о https.
Вместо того, чтобы устанавливать прокси в настройках прокси ОС, мы можем настроить iptables для маршрутизации всего на портах 80 и 443 на наш прокси (шаги, взятые из docs.mitmproxy.org)
Включите переадресацию IP и отключите перенаправления ICMP:
sudo sysctl -w net.ipv4.ip_forward=1
sudo sysctl -w net.ipv6.conf.all.forwarding=1
sudo sysctl -w net.ipv4.conf.all.send_redirects=0
Пропустите шаги 3 и 4 инструкции, потому что мы хотим перенаправить трафик, исходящий от самой машины.
Для этого создайте пользователя для запуска mitmproxy для маршрутизации трафика на:
sudo useradd --create-home mitmproxyuser
sudo -u mitmproxyuser -H bash -c 'cd ~ && pip install --user mitmproxy'
И, наконец, правила iptables (прокси работает на порту 8080):
sudo iptables -t nat -A ВЫВОД -p tcp -m владелец! --uid-owner mitmproxyuser --dport 80 -j ПЕРЕНАПРАВЛЕНИЕ --на порт 8080
sudo iptables -t nat -A ВЫВОД -p tcp -m владелец! --uid-owner mitmproxyuser --dport 443 -j ПЕРЕНАПРАВЛЕНИЕ --на порт 8080
sudo ip6tables -t nat -A ВЫВОД -p tcp -m владелец! --uid-owner mitmproxyuser --dport 80 -j ПЕРЕНАПРАВЛЕНИЕ --на порт 8080
sudo ip6tables -t nat -A ВЫВОД -p tcp -m владелец! --uid-owner mitmproxyuser --dport 443 -j ПЕРЕНАПРАВЛЕНИЕ --на порт 8080
Наконец, запустите mitmproxy от имени нового пользователя:
sudo -u mitmproxyuser -H bash -c 'mitmproxy --mode Transparent --showhost --set block_global=false'
Это то, что касается руководства, предоставленного mitmproxy. На этом мы закончили настройку, но нам нужно установить новый сертификат (любые предыдущие из mitm.it не будет работать).
После первого запуска генерируется новый сертификат в /home/mitmproxyuser/.mitmproxy/mitmproxy-ca-cert.pem. Нам нужно преобразовать его в crt и установить:
sudo openssl x509 -in /home/mitmproxyuser/.mitmproxy/mitmproxy-ca-cert.pem -inform PEM -out /home/mitmproxyuser/.mitmproxy/mitmproxy-ca-cert.crt
sudo cp /home/mitmproxyuser/.mitmproxy/mitmproxy-ca-cert.crt /usr/share/ca-certificates/extra/mitmproxy-ca-cert.crt
sudo dpkg-reconfigure ca-сертификаты
На этом этапе вы почти готовы, за исключением того, что Apache2/PHP по-прежнему не будет доверять нашему прокси-сертификату, поэтому внешние запросы не будут проходить. Я пробовал кучу конфигураций SSL apache.conf, которые не работали. Оказалось, мне пришлось раскомментировать следующую строку в /etc/php/7.4/apache2/php.ini и свяжите его с созданным нами файлом crt:
openssl.cafile=/home/mitmproxyuser/.mitmproxy/mitmproxy-ca-cert.crt
Не забудьте перезапустить apache2/php7.4-fpm и все! Наше PHP-приложение теперь маршрутизируется через прокси. Вам также может потребоваться доверять сгенерированному файлу crt в вашем браузере, чтобы избавиться от обычного предупреждения.