Как мониторить трафик на роутере
Мониторинг домашнего роутера
Знакома ли вам ситуация «инет никакой»?
Обычно попытка исправления подразумевает:
— обход членов семьи (ну да, я качаю новый сезон «Доктор Хаус». А кому это может мешать?)
— перезагрузить роутер (ну завис я, завис — сутками всякую дрянь качаете..)
— не качаются ли обновления (приятная новость — новый Acrobat Reader. )
— нет ли у нас блошек (нашему ботнету сегодня дали большое домашнее задание)
— звонок провайдеру (наш канал работает как часы с самого основания компании)
— эм. может еще раз роутер?
…
Все получится, если ваш роутер поддерживает протокол SNMP — специальный протокол для телеметрии сетевых устройств и приложений. Разбираемся по инструкции к роутеру или веб-интерфейсу, есть ли у вас поддержка SNMP. В некоторых случаях появляется при установке неофициальных прошивок. Ищем его в веб интерфейсе, включаем. Запоминаем, как называется community name — это пароль, по которому показания SNMP вашего роутера доступны в сети (по умолчанию обычно public).
Рис. 1. Здесь все просто. Или поддержка SNMP есть, или ее нет.
Чтобы не потерять много времени впустую, давайте сделаем экспресс-проверку. Скачиваем библиотеку NET-SNMP. Из директории bin выполняем команду:
public — пароль для доступа к SNMP (community name)
192.168.1.1 — ip адрес роутера
Устанавливаем MRTG. На сайте подробное руководство по установке для UNIX и Windows. Для работы под Windows требуется PERL. Наиболее распространенный бесплатный дистрибутив PERL для Windows — это ActivePerl. Отдельной инструкции для Mac не сайте видел, однако поскольку MRTG — это не более чем программа на PERL, тоже должно работать.
Короткий путь начать мониторить траффик на сетевых интерфейсах роутера — это создать конфигурационный файл MRTG командой cfgmaker. Например, мой роутер ASUS WL-500g premium имеет 8 сетевых интерфейсов, и это позволяет видеть траффик со стороны провайдера, со стороны WiFi устройств (телефон и ноутбук), со стороны рабочей станции через Ethernet
Рис. 2. Из сопоставления графиков на разных интерфейсах видно, откуда идет траффик.
Рис. 3. Обычно нагрузка процессора на нуле. Она растет, когда качают несколько процессов на большой скорости. Используемая память меняется слабо.
Разумеется запускать mrtg вручную каждые 5 минут не нужно, а нужно создать задачу cron (Unix) пример:
Возможно, возможности вашего роутера значительно шире, и вы можете получать значительно больше информации — МАС адреса клиентов, траффик по MAC адресам, и так далее. Да поможет вам Google!
P.S. Данная заметка, разумеется, не ориентирована на специалистов по сетевой инфраструктуре. Просто я совершенно случайно открыл для себя букавы SNMP и уверен, что не одинок в этом. Возможно, кому-то это поможет при выборе нового роутера.
В комментариях открыл для себя суперпрошивку DD-WRT. Теперь вот думаю…
Принципы организации учёта IP-трафика
Любой администратор рано или поздно получает инструкцию от руководства: «посчитать, кто ходит в сеть, и сколько качает». Для провайдеров она дополняется задачами «пустить кого надо, взять оплату, ограничить доступ». Что считать? Как? Где? Отрывочных сведений много, они не структурированы. Избавим начинающего админа от утомительных поисков, снабдив его общими знаниями, и полезными ссылками на матчасть.
В данной статье я постараюсь описать принципы организации сбора, учёта и контроля трафика в сети. Мы рассмотрим проблематику вопроса, и перечислим возможные способы съема информации с сетевых устройств.
Это первая теоретическая статья из цикла статей, посвящённого сбору, учёту, управлению и биллингу трафика и IT-ресурсов.
Структура доступа в сеть Интернет
В общем случае, структура доступа в сеть выглядит следующим образом:
Сетевой трафик
Для начала необходимо определить, а что же подразумевается под «сетевым трафиком», и какую полезную статистическую информацию можно извлечь из потока пользовательских данных.
Доминирующим протоколом межсетевого взаимодействия пока остается IP версии 4. Протокол IP соответствует 3му уровню модели OSI (L3). Информация (данные) между отправителем и получателем упаковывается в пакеты – имеющие заголовок, и «полезную нагрузку». Заголовок определяет, откуда и куда идет пакет (IP-адреса отправителя и получателя), размер пакета, тип полезной нагрузки. Основную часть сетевого трафика составляют пакеты с полезной нагрузкой UDP и TCP – это протоколы 4-го уровня (L4). Помимо адресов, заголовок этих двух протоколов содержит номера портов, которые определяют тип службы (приложения), передающего данные.
Для передачи IP-пакета по проводам (или радио) сетевые устройства вынуждены «оборачивать» (инкапсулировать) его в пакет протокола 2го уровня (L2). Самым распространенным протоколом такого типа является Ethernet. Фактическая передача «в провод» идет на 1м уровне. Обычно, устройство доступа (маршрутизатор) не занимается анализом заголовков пакетов на уровне, выше 4го (исключение – интеллектуальные межсетевые экраны).
Информация из полей адресов, портов, протоколов и счетчики длин из L3 и L4 заголовков пакетов данных и составляет тот «исходный материал», который используется при учёте и управлении трафиком. Собственно объем передаваемой информации находится в поле Length («Длина пакета») заголовка IP (включая длину самого заголовка). Кстати, из-за фрагментации пакетов вследствие механизма MTU общий объем передаваемых данных всегда больше размера полезной нагрузки.
Суммарная длина интересных нам в данном контексте IP- и TCP/UDP- полей пакета составляет 2. 10% общей длины пакета. Если обрабатывать и хранить всю эту информацию попакетно, не хватит никаких ресурсов. К счастью, подавляющий объем трафика структурирован так, что состоит из набора «диалогов» между внешними и внутренними сетевыми устройствами, так называемых «потоков». Например, в рамках одной операции пересылки электронного письма (протокол SMTP) открывается TCP-сессия между клиентом и сервером. Она характеризуется постоянным набором параметров . Вместо того, чтобы обрабатывать и хранить информацию попакетно, гораздо удобнее хранить параметры потока (адреса и порты), а также дополнительную информацию – число и сумму длин переданных пакетов в каждую сторону, опционально длительность сессии, индексы интерфейсов маршрутизатора, значение поля ToS и прочее. Такой подход выгоден для ориентированных на соединение протоколов (TCP), где можно явно перехватить момент завершения сессии. Однако и для не ориентированных на сессии протоколов можно проводить агрегацию и логическое завершение записи о потоке по, например, таймауту. Ниже приведена выдержка из SQL-базы собственной системы биллинга, осуществляющей протоколирование информации о потоках трафика:
Необходимо отметить случай, когда устройство доступа осуществляет трансляцию адресов (NAT, маскарадинг) для организации доступа в Интернет компьютеров локальной сети, используя один, внешний, публичный IP-адрес. В этом случае специальный механизм осуществляет подмену IP-адресов и TCP/UDP портов пакетов трафика, заменяя внутренние (не маршрутизируемые в Интернете) адреса согласно своей динамической таблице трансляции. В такой конфигурации необходимо помнить, что для корректного учета данных по внутренним хостам сети съём статистики должен производиться способом и в том месте, где результат трансляции ещё не «обезличивает» внутренние адреса.
Методы сбора информации о трафике/статистике
Снимать и обрабатывать информацию о проходящем трафике можно непосредственно на самом устройстве доступа (ПК-маршрутизатор, VPN-сервер), с этого устройства передавая ее на отдельный сервер (NetFlow, SNMP), или «с провода» (tap, SPAN). Разберем все варианты по-порядку.
ПК-маршрутизатор
Рассмотрим простейший случай – устройство доступа (маршрутизатор) на базе ПК c ОС Linux.
Libpcap
В первом случае копия пакета, проходящего через интерфейс, после прохождения фильтра (man pcap-filter) может быть запрошена клиентской программой на сервере, написанной с использованием данной библиотеки. Пакет поступает вместе с заголовком 2го уровня (Ethernet). Можно ограничить длину захватываемой информации (если нас интересует только информация из его заголовка). Примерами таких программ могут быть tcpdump и Wireshark. Существует реализация libpcap под Windows. В случае применения трансляции адресов на ПК-маршрутизаторе такой перехват можно осуществлять только на его внутреннем интерфейсе, подключенном к локальным пользователям. На внешнем интерфейсе, после трансляции, IP-пакеты не содержат информации о внутренних хостах сети. Однако при таком способе невозможно учесть трафик, создаваемый самим сервером в сети Интернет (что важно, если на нем работают веб– или почтовый сервис).
При передаче пакета через выбранный интерфейс, после прохождения фильтра эта функция получает буфер, содержащий Ethernet, (VLAN), IP и т.д. заголовки, общим размером до snaplen. Поскольку библиотека libcap копирует пакеты, заблокировать их прохождение при ее помощи невозможно. В таком случае программе сбора и обработки трафика придется использовать альтернативные методы, например вызов скрипта для помещения заданного IP-адреса в правило блокировки трафика.
Межсетевой экран
Поскольку IP-пакет не копируется, а пересылается в программное обеспечение для анализа, становится возможным его «выброс», а следовательно, полное или частичное ограничение трафика определенного типа (например, до выбранного абонента локальной сети). Однако в случае, если прикладная программа перестала отвечать ядру о своем решении (зависла, к примеру), трафик через сервер просто блокируется.
Необходимо отметить, что описанные механизмы при существенных объемах передаваемого трафика создают избыточную нагрузку на сервер, что связано с постоянным копированием данных из ядра в пользовательскую программу. Этого недостатка лишен метод сбора статистики на уровне ядра ОС, с выдачей в прикладную программу агрегированной статистики по протоколу NetFlow.
Netflow
Этот протокол был разработан фирмой Cisco Systems для экспорта информации о трафике с маршрутизаторов с целью учета и анализа трафика. Наиболее популярная сейчас версия 5 предоставляет получателю поток структурированных данных в виде UDP-пакетов, содержащих информацию о прошедшем трафике в виде так называемых flow records:
Объем информации о трафике меньше самого трафика на несколько порядков, что особенно актуально в больших и распределенных сетях. Конечно же, блокировать передачу информации при сборе статистики по netflow невозможно (если не использовать дополнительные механизмы).
В настоящее время становится популярным дальнейшее развитие этого протокола – версия 9, основанная на шаблонной структуре flow record, реализации для устройств других производителей (sFlow). Недавно был принят стандарт IPFIX, который позволяет передавать статистику и по протоколам более глубоких уровней (например, по типу приложения).
Реализация netflow-источников (агентов, probe) доступна для ПК-маршрутизаторов, как в виде работающих по описанных выше механизмам утилит (flowprobe, fprobe, softflowd), так и непосредственно встроенных в ядро ОС (FreeBSD: ng_netgraph, Linux: ipt_neflow). Для программных маршрутизаторов поток статистики netflow можно принимать и обрабатывать локально на самом маршрутизаторе, или отправлять по сети (протокол передачи – поверх UDP) на принимающее устройство (коллектор).
Программа — коллектор может собирать сведения от многих источников сразу, имея возможность различать их трафик даже при пересекающихся адресных пространствах. При помощи дополнительных средств, таких как nprobe возможно также проводить дополнительную агрегацию данных, раздвоение потоков или конвертацию протоколов, что актуально при управлении большой и распределенной сетью с десятками маршрутизаторов.
Функции экспорта netflow поддерживают маршрутизаторы Cisco Systems, Mikrotik, и некоторые другие. Аналогичный функционал (с другими протоколами экспорта) поддерживается всеми крупными производителями сетевого оборудования.
Libpcap “снаружи”
Отдельно стоит рассмотреть случай доступа пользователей к сети путем явного установления соединения к серверу доступа. Классическим примером может служить старый добрый dial-up, аналогом которого в современном мире являются VPN-службы удаленного доступа (PPTP, PPPoE, L2TP, OpenVPN, IPSEC)
Устройство доступа не только маршрутизирует IP-трафик пользователей, но также представляет из себя специализированный VPN-сервер, и терминирует логические туннели (часто зашифрованные), внутри которых передается пользовательский трафик.
Для учета такого трафика можно пользоваться как всеми средствами, описанными выше (и для глубокого анализа по портам/протоколам они хорошо подходят), так и дополнительными механизмами, которые предоставляют средства управления VPN-доступом. В первую очередь речь пойдет о протоколе RADIUS. Его работа – достаточно сложная тема. Мы же кратко упомянем, что контролем (авторизацией) доступа к VPN-серверу (RADIUS-клиенту) управляет специальное приложение (RADIUS-сервер), имеющее за собой базу (текстовый файл, SQL, Active Directory) допустимых пользователей с их атрибутами (ограничения по скорости подключения, назначенные IP-адреса). Помимо процесса авторизации, клиент периодически передает серверу сообщения аккаунтинга, информацию о состоянии каждой текущей работающей VPN-сессии, в том числе счетчики переданных байт и пакетов.
Заключение
Сведем все описанные выше методы сбора информации о трафике воедино:
Как узнать на какие сайты заходили через мой Wi-Fi роутер?
Приветствую на нашем портале WiFiGid! Сразу в проблему: вы хотите узнать, какие сайты открывает ваш ребенок, вторая половинка или злой и нехороший сосед, который каким-то боком подключился к вашему Wi-Fi? Разумеется, ваш Wi-Fi – ваши правила. Хотите узнать, что происходит в вашей сети – ваше право. И именно для вас эта инструкция. Сегодня я попробую со всех сторон осветить тему, как посмотреть, на какие сайты заходили с вашего Wi-Fi.
Дисклеймер
Я понимаю про важность сохранности личного пространства и целиком поддерживаю это. Но бывают случаи, когда его действительно стоит нарушить. Эта статья больше про развенчание мифов и указание верных векторов в поиске решения своей проблемы. Ну и отслеживание трафика на СВОЕМ роутере вполне себе законно.
Быстрое решение
Спешу всех пришедших расстроить – на текущий день 99% роутеров не позволяют просматривать историю посещенных сайтов. Конец.
Поэтому самое простое решение – спросить напрямую или просто ПОСМОТРЕТЬ ИСТОРИЮ БРАУЗЕРА на стороне клиента. И не говорите, что получить доступ в одной квартире к телефону или компьютеру невозможно. А если невозможно, значит тут точно что-то не то, и это уже выходит за поле деятельности нашего сайта.
А еще один раз видел статистику использования сайтов в личном кабинете провайдера. Да, провайдеры отслеживают наши посещения, но для меня было дикостью увидеть это в кабинете. Но проверить стоит и у себя – а мало ли.
Роутеры-исключения
Чуть выше я написал, что БОЛЬШИНСТВО текущих роутеров не умеют смотреть историю просмотров. Но есть и исключения. Если у вас такой роутер, или вы собираетесь его приобрести, все классно – просто заходим в настройщик (инструкции есть на нашем сайте) и ищем соответствующий раздел.
Одна вода и никакой конкретики? Да! Поэтому в начале я и призвал отказаться от этой затеи, ибо и мы за всем уследить не сможем. Но зайти в настройки роутер и проверить какие-то зацепки – вполне себе можно. А ниже оставлю несколько полезных отсылок и идей:
Как вы поняли, простое удобное решение из коробки на текущий день есть только у ASUS. Конечно, скорее всего производители будут расширять функционал в эту сторону, но пока получаем, что есть. Еще один повод просто получить доступ к устройству.
Сложные способы (для подготовленных)
Для подготовленных тружеников интернета вряд ли нужно делать детальные инструкции, тем более все уже описано. Поэтому здесь еще раз отмечу – современные роутеры очень плохо исполняют функцию логирования действий в домашних сетях. Отсюда нужно пилить какие-то сторонние решения за пределами роутера, чтобы узнать, на какие сайты заходили ваши клиенты. Рабочие варианты:
Как видите, это не про простого домашнего пользователя – здесь нужно подумать и поработать. А стоит ли оно того?
Под решения 2 и 3 вполне себе можно использовать утилиту ptraffer (Linux). А если ваш роутер поддерживает прошивку OpenWRT – ставим модули dnsmasq и squid, которые могут решить эту задачу на самом роутере.
А кто подключен?
Этот раздел не относится к теме статьи, но в завершение хотелось бы оставить наш материал от Бородача по поиску тех, кто просто подключен к вашему роутеру. В описанной задаче может пригодится лишь косвенно, но мало ли кому-то будет полезным.
Отслеживание устройств через пассивное прослушивание WiFi
Пробные запросы
Режим прослушивания (Monitor Mode)
Устройства WiFi умеют работать в шести режимах. Чтобы прослушивать трафик, устройству надо переключиться в режим прослушивания. После этого оно не афиширует себя, поэтому наличие таких устройств очень сложно установить.
Защита
Теоретически, от этих прослушек очень просто защититься. Если выключать WiFi на телефоне, когда он не нужен (то есть, вы далеко от тех мест, где имеются доверенные сети), телефон перестанет отправлять запросы и вас отследить будет нельзя. Практически же каждый раз выключать WiFi было бы довольно нудно.
Для андроида есть несколько приложений для облегчения процесса. Например, AVG PrivacyFix позволяет настроить список доверенных сетей, при наличии которых ваш WiFi будет включён. Есть и другие приложения на эту тему.
В случае iOS ваш выбор ограничен. Если не использовать jailbroken, защищённый режим работы яблофона не пустит приложения к рубильнику WiFi. В iOS 7 появился разве что более удобный доступ к меню WiFi, но это всё равно надо делать вручную.
Строим трекер
Можно, конечно, просто использовать ноутбук – даже MacBook. Устанавливаете Wireshark и настраиваете фильтр для пробных запросов. Но это не так интересно, к тому же, если вы захотите построить целую сеть трекеров, использовать для этого ноутбуки будет довольно накладно.
Для таких ненакладных целей хватит и Raspberry Pi с беспроводным адаптером, или (что мне больше нравится), роутера TP-LINK MR-3020 со специальной прошивкой. Эти варианты небольшие и их можно запитать от 5-вольтовой батарейки.
Настройка Pi будет совсем простой, т.к. там уже есть рабочая файловая система, но я предпочитаю роутер MR-3020. Это недорогое и автономное решение. Поэтому я буду описывать настройку роутера, а если вам захочется использовать Pi, то:
— можно пропустить шаги до Настройки режима прослушивания
— у этих двух устройств разные версии Linux, поэтому какие-то файлы с настройками могут находиться в разных местах и у них могут быть разные менеджеры пакетов
— более мощные радио типа AWUS036H могут потребовать USB-хаб с внешним питанием
Настройка роутера
— TP-LINK MR-3020 router ($34.99 на Amazon). Должны работать и аналоги, типа TP-LINK TL-WR703N
— USB флэшка (2-4 Гб)
— Ethernet-кабель
Первая часть инструкций взята от проекта PirateBox, поскольку первичная настройка устройств идентична.
1. Скачайте копию OpenWrt для MR3020 (модификация от Matthias Strubel включает все необходимые модули ядра).
Дополнительная информация: forum.daviddarts.com/read.php?2,3974,4009#msg-4009
Обсуждение прошивки: forum.openwrt.org/viewtopic.php?pid=207769#p207769
Прошивка для WR703N: downloads.openwrt.org/attitude_adjustment/12.09-beta2/ar71xx/generic
2. Переключите переключатель рядом с портом LAN/WAN в положение WISP
3. Отключите WiFi ноутбука
4. Подключите роутер через ethernet к компьютеру и откройте в браузере 192.168.0.254 (MR3020) или 192.168.1.1 (WR703N)
5. Введите логин/пароль (admin / admin)
6. Перейдите к System Tools > Firmware Upgrade, выберите прошивку OpenWRT
Текст прошивки WR703N китайский. Для прошивки через веб-интерфейс выберите последнее меню слева, затем третий пункт подменю. Подробнее.
7. После апгрейда система перезапустится
8. Зайдите туда через telnet
9. Командой passwd задайте пароль. Это даст доступ к SSH
10. При помощи vi отредактируйте настройки сети. Предположим, что ваш основной шлюз имеет адрес 192.168.2.1. Адрес OpenWrt не должен совпадать с ним, но должен быть в той же подсети.
Поменяйте файл до такого состояния:
11. Отключите роутер от сети
12. Включите WiFi на ноутбуке
13. Подключите MR3020 (или WR703N) к роутеру-шлюзу через Ethernet и включите настроенный роутер в сет. Подождите минуту. С компьютера, подключённого к локалке, попробуйте зайти на роутер
14. Пинганите google для проверки настроек
15. Добавьте поддержку USB в OpenWrt (если вы не использовали уже настроенную прошивку из шага 1):
Отформатируйте флэшку на две партиции – основная Ext4 и swap. swap должна быть между 256 и 512 Мб.
Зайдите по ssh на роутер.
Установите пакеты для поддержки Ext4:
Вставьте флэшку в роутер. Проверьте, что она определилась.
Настройка файловой системы
Теперь мы сделаем sda1 основой корневой файловой системы
(как описано тут wiki.openwrt.org/doc/howto/extroot#openwrt)
Проверим, что всё замаунтилось (должно вернуть /dev/sda1 на /mnt/sda1 type ext4):
Скопируем файлы с роутера на флэшку, чтобы все необходимые настройки были доступны, когда мы перезагрузимся и USB окажется основой файловой системы.
Добавьте в /etc/config/fstab автоматическое подключение /dev/sda1.
Используйте следующие настройки:
Когда все огоньки вновь загорятся, зайдите по ssh и проверьте, что флэшка правильно подцепилась.
Если вы не можете зайти через ssh, значит копирование файлов прошло неправильно. Выньте флэшку, перезагрузите его через питание. Когда он запустится, вы сможете зайти туда через ssh. Затем снова вставьте флэшку и повторите предыдущие шаги.
Настраиваем swap
У роутера немного памяти, долгие процессы могут занять её всю. Для проверки памяти введите
Для решения проблем с памятью можно использовать партицию swap. Сначала проверим, что она работает:
Теперь подключим её к свопу:
Снова запустим free для проверки того, что она подключилась.
Чтобы это происходило автоматически лучше всего сделать отдельный скрипт. Кстати, заодно вы узнаете, как делать такие скрипты.
Скрипт для подключения Swap при старте
Начнём с создания скрипта:
Введите в файл следующее:
Сделайте его исполняемым:
Теперь нужно сделать symlink с /etc/rc.d на него:
S109 сообщает системе приоритет скрипта. Все файлы в /etc/rc.d начинаются с S##. S109 должен разместить его в самом конце, после того, как запустятся все остальные.
Перезагрузимся, зайдём через ssh и проверим подключение свопа:
Настраиваем режим прослушивания
Почти всё готово. Нам надо отредактировать настройки беспроводного подключения:
Закомментируйте строчку запрета wifi:
Используйте следующие настройки:
Перезапустите wifi interface:
Сообщения об ошибках типа тех, что представлены ниже, не должны повлиять на работу wifi:
Проверьте, что wifi работает и находится в режиме monitor:
Установка пакетов
Теперь мы установим все необходимые для сканера пакеты:
Проверка скрипта сканирования
Скопируем скрипты с git (или их можно скачать в виде zip)
Как ответственные хакеры, мы не будем перехватывать все запросы. Мы сделаем белый список, куда включим только наши телефоны.
Достаньте телефон, отсоединитесь от текущей сети, но не выключайте wifi. В терминале вы должны начать видеть запросы, отправляемые им. Можно заметить, что не у всех запросов будет указан SSID. Запросы без SSID – широковещательные, они предназначены для всех точек доступа, находящихся в пределах досягаемости.


