Tcpdump на ec2 не видит все пакеты

Я запускаю tcpdump на экземпляре Amazon EC2 для мониторинга HTTP-трафика, идущего на Nginx (это всего лишь тестовая коробка, единственным ресурсом является тестовая страница примера).

Запуск tcpdump с помощью команды

# tcpdump -vn -i any port 80

показывает пакеты из запроса браузера на сайт, но ничего не показывает при доступе к странице с помощью скрипта Python (используя библиотеку запросов) или с пакетами, созданными вручную (Scapy).

  • Локальный межсетевой экран не работает, а группы безопасности настроены правильно.
  • Сценарии работают должным образом: я могу достаточно легко перехватывать транзакции в tcpdump на локальном конце, и они возвращают страницу со статусом 200 OK.
  • Сохранение пакетов непосредственно в файл (-w) также не имеет значения, исключая проблемы с буферизацией (я полагаю?)
  • Я также пытался увидеть, являются ли VLAN причиной проблемы, но не повезло; Грэп для "80" до сих пор не дает результатов.

Вопросы:

  1. Что может быть причиной того, что tcpdump пропустит эти довольно специфические пакеты, которые определенно проходят через брандмауэр в Nginx и возвращаются обратно?
  2. Почему пакеты из Firefox видны, а пакеты, отправленные из скриптов, проходят мимо?

Спасибо

3 ответа

Технология, выпущенная после того, как был задан этот вопрос, называется VPC Flow Logs. Это позволяет вам просматривать сетевой трафик в вашем VPC, отфильтрованный так, как вам нравится.

Журналы потока VPC не будут показывать вам полное содержимое пакета, только основы, такие как источник, пункт назначения, порт, протокол, размер, время и действие, например, принять или отклонить, и некоторые другие. Он также не покажет вам трафик, который начинается и заканчивается в экземпляре EC2.

Это не прямой ответ на вопрос, поскольку он не решает проблему. Однако он может предоставить альтернативный способ сбора информации для решения аналогичной проблемы.

Попробуйте использовать определенный интерфейс вместо "любой". Это "устройство" нельзя использовать в беспорядочном режиме. См. Страницу руководства tcpdump: http://www.tcpdump.org/manpages/tcpdump.1.html

Возможно, snaplength?

  • -S Snaplen
  • --snapshot длина = snaplen

Snarf Snaplen байтов данных из каждого пакета, а не по умолчанию 262144 байтов. Пакеты, усеченные из-за ограниченного снимка, указываются в выходных данных ``[|proto]'', где proto - это имя уровня протокола, на котором произошло усечение. Обратите внимание, что создание больших моментальных снимков увеличивает время обработки пакетов и фактически уменьшает объем буферизации пакетов. Это может привести к потере пакетов. Вы должны ограничить snaplen наименьшим числом, которое будет захватывать интересующую вас информацию о протоколе. При установке snaplen в 0 устанавливается значение по умолчанию 262144 для обратной совместимости с последними более старыми версиями tcpdump.

Я обычно использую 65535.

Другие вопросы по тегам