обратный прокси-сервер mitmproxy - нужен SSL только на нестандартном порту

Мне нужен обратный прокси (использующий mitmproxy/mitmdump) для небезопасного сайта. Я хочу, чтобы прокси работал на нестандартном порту (не 443) и был доступен только через https. Это самое близкое, что я получил:

mitmdump -p 2112 --mode reverse:http://localhost:41781 --set block_global=false --certs full.pem

Это работает, когда я обращаюсь к нему через https: https://localhost:2112. Проблема в том, что он также доступен через http: http://localhost:2112.

Как мне отключить это и сделать его доступным только через https?


person Dan Tenenbaum    schedule 16.11.2019    source источник
comment
Может быть, вы используете неправильный инструмент для работы в первую очередь? mitmdump предназначен не для защиты какого-либо сайта, а для перехвата и, возможно, изменения трафика. Вместо этого использование nginx в качестве обратного прокси-сервера может быть более подходящим способом защиты сайта.   -  person Steffen Ullrich    schedule 16.11.2019
comment
Спасибо. На самом деле у меня есть требование изменить трафик (я пропустил эту часть, потому что она не имеет отношения к этому вопросу), и у меня есть другие требования для этого варианта использования, которые делают mitmproxy хорошим выбором, хотя я использовал nginx в других случаях.   -  person Dan Tenenbaum    schedule 16.11.2019


Ответы (2)


Я должен согласиться со Штеффеном. Попробуйте использовать nginx, f5 или другие инструменты, так как они больше подходят для использования в качестве обратного прокси. Хотя, если вы действительно хотите придерживаться mitm, должна быть опция с именем http2, которая принимает логическое значение для отключения доступа по http, как это --no-http2. Итак, ваша команда должна выглядеть примерно так

mitmdump -p 2112 --mode reverse:http://localhost:41781 --no-http2 --set block_global=false --certs full.pem
person Dani Bencze    schedule 16.11.2019
comment
Спасибо, я знаю о nginx и других инструментах и ​​уже использовал их раньше. У меня есть особые требования для этого варианта использования, и я бы предпочел использовать mitmproxy. К сожалению, флаг --no-http2 не отключает обычный http на порту 2112. Судя по названию, я предполагаю, что он просто отключает протокол HTTP/2.0? - person Dan Tenenbaum; 16.11.2019
comment
Вместо того, чтобы отключать HTTP-доступ, что, если вы используете функцию перенаправления, чтобы сделать HTTP-запрос из всех входящих запросов? - person Dani Bencze; 17.11.2019

(Обязательно: используйте Apache/nginx/..., если вам нужен обратный прокси производственного уровня)

В настоящее время Mitmproxy всегда поддерживает как HTTP, так и HTTPS для упрощения настройки (у нас было много отчетов об ошибках из-за неправильных настроек). Если вы хотите отключить HTTP, вы можете написать надстройку, которая обнаруживает flow.request.scheme == "http", а затем либо вызывает flow.kill(), либо устанавливает flow.response = mitmproxy.http.HTTPResponse.make(<redirect data here>). Наконец, вы также можете установить заголовки HSTS в хуке response в mitmproxy.

person Maximilian Hils    schedule 18.11.2019