Как я могу сказать nginx выводить весь входящий трафик для данного server{}
в конкретное / дополнительное / избыточное место после расшифровывая это (например, зеркалирование портов на маршрутизаторах), чтобы его можно было проанализировать в целях устранения неполадок?
Мне нужно отладить трафик, поступающий на веб-сайт, поддерживающий только https. Сервер безголовый, и я бы предпочел
Так что wirehark (наиболее часто упоминаемое решение для расшифровки https-потока) не является решением. Я хочу что-то, что работает только с интерфейсом командной строки и требует минимальных инструментов, работающих на сервере. Я проверил tcpdump
поддержка https; его нет, но вы можете объединить массу других инструментов и сделать его работоспособным, но это не совсем идеально.
Мой веб-сервер - nginx. Мне интересно, есть ли способ настроить nginx так, чтобы - помимо того, как он обычно обрабатывает свой трафик для данного server{}
block - отправить расшифрованный трафик на какое-то зеркало (только для отладки), которое я затем могу проанализировать напрямую с помощью tcpdump
, в идеале в режиме реального времени.
Можно ли добавить proxy_pass
зеркало для nginx server{}
block, чтобы nginx обрабатывал трафик, как обычно плюс отправка дешифрованного трафика в какое-то «отладочное» место (которое может быть просто nc -l 8080
или что-то)?
Я могу придумать два способа делать то, что вы хотите. Либо с помощью SSLKEYLOG и tshark, либо путем установки обратного прокси TLS.
Первый вариант - записать главные секреты SSL в SSLKEYLOGFILE, захватите зашифрованный трафик с помощью tcpdump и проанализируйте его с помощью tshark (версия Wireshark для командной строки).
Второй вариант - установить прокси-сервер проверки TLS, который поддерживает режим «обратного прокси», который расшифровывает входящий трафик, а затем повторно шифрует его перед пересылкой на веб-сервер. Прокси-сервер также должен каким-то образом поддерживать отправку копии трафика в РАСШИФРОВАННОМ режиме на внешний интерфейс.
Возможно, вы сможете выполнить "ВАРИАНТ 2" с SSLsplit, но я не уверен. Я знаю, что ты можешь сделать это с PolarProxy хотя (отказ от ответственности: PolarProxy разработан нами в Netresec). У нас есть сообщение в блоге под названием Обратный прокси и завершение TLS это объясняет, как настроить обратный прокси. Затем вы можете использовать tcpreplay для передачи дешифрованного трафика на сетевой интерфейс.
Недавно я узнал, что nginx действительно имеет эту функцию, начиная с версии 1.13.4. Используя mirror
директиве вы можете пересылать копию каждого запроса на другой HTTP-сервер. Ответ, если таковой имеется, игнорируется.
в server
или location
для которых вы хотите, чтобы запросы отражались, добавьте mirror
директива с URL-путем, который никогда не будет встречаться на вашем веб-сайте. Затем добавьте новый location
который обслуживает именно этот путь и передает запросы на другой сервер.
Упрощенный пример:
server {
location / {
mirror /Jahg3bioshes;
# ... the rest of your directives
}
location = /Jahg3bioshes {
internal;
proxy_pass http://sink.server.example$request_uri;
}
}
Обратите внимание, что хотя nginx игнорирует ответ, он не игнорирует время, затраченное на обслуживание ответа, и, если зеркальный сервер медленно отвечает, он также замедлит исходный запрос. Вероятно, это должен быть простой сервер, например недавно установленный веб-сервер с конфигурацией распространения по умолчанию.
nginx поддерживает lua в качестве языка сценариев. Таким образом, вы можете написать свои собственные функции для управления и сохранения данных, вызвав ngx.var.request_body и ngx.var.echo_request_body, или использовать тот, который уже есть, например https://github.com/thinkinside-LQ/httpdump