Рейтинг:0

Установите прокси-сервер HTTP/HTTPS «человек посередине» для веб-сервера (Apache2)

флаг kr

Для регистрации всех http/https-запросов конкретного приложения мы используем прокси-серверы «человек посередине» (установленные как прокси-серверы http или SOCKS5). На наших локальных компьютерах с Windows и Mac мы обычно «проксируем» приложения или временно устанавливаем общесистемный прокси. Это работает как шарм для любого приложения, о котором мы только можем подумать. На наших удаленных компьютерах с Linux действительно общесистемные прокси-серверы вызывают проблемы с подключением (и также несколько сложнее добиться тех же результатов в среде, отличной от рабочего стола). Поэтому мы решили использовать только проксирование отдельных приложений.

Для этого мы сейчас используем mitmproxy + tsocks/proxychains. Это снова отлично работает для обычных приложений. Однако текущая проблема, с которой мы столкнулись, заключается в том, что мы не можем заставить ее работать с нашими службами apache2/php. Мы искали решения в течение последних нескольких дней, но трудно найти варианты, которые не касаются превращения самого веб-сервера в обратный прокси-сервер с определенного URL-адреса или на него. Мы хотим отслеживать любой удаленный http/https-запрос, который делает веб-сервер (исходящие запросы PHP-приложения). Мы думали запустить веб-сервер в Docker и установить прокси для контейнера, но это означает, что нам нужно снова настроить все в контейнере, и это похоже на плохое решение, которое имеет свои проблемы.

Собственно вопрос: как мы можем направить весь трафик http/https, который наш веб-сервер делает через наш прокси-сервер MITM, чтобы мы могли видеть все запросы к удаленным хостам http/https?

Приветствуются альтернативные/лучшие решения для достижения того же.

флаг cn
Bob
Довольно обычный способ запуска прокси-сервера для приложений, которые не учитывают настройки прокси-сервера, заключается в использовании правил брандмауэра для перезаписи всего исходящего трафика с веб-портом в качестве пункта назначения на прозрачный прокси-сервер. Довольно тривиально для простого http, но немного сложнее, когда речь идет о https.
Рейтинг:0
флаг kr

Спасибо Бобу за то, что указал мне правильное направление. Иногда что-то действительно можно просто поискать в 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 в вашем браузере, чтобы избавиться от обычного предупреждения.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.