Рубрики
Uncategorized

Как фильтровать IP-трафик между устройствами на той же локальной сети

Фильтрация пакетов между 2 устройствами WiFi LAN.

Автор оригинала: shai ben shalom.

Обо мне

Я старший программный инженер в поле Cyber Security. Я люблю кодировку и код во многих языках программирования и в рамках многих различных структур. У меня сильный фон в сети Linux Networking и Love для решения проблем в этой области.

Проблема, которую я хотел решить

Путь Linux выполнения фильтрации пакетов является такими инструментами, как iPtables. iptables — это удобное приложение для установки правил, на которых вы хотите принять трафик. Приложение iptables работает отлично подходит для исходящего или входящего трафика. I.e пользователь, который хочет ввести определенный веб-сайт. Но «что произойдет, если трафик межнациональная связь? i. Ответ прост — этот трафик не может быть отфильтрован, поскольку трафик проходит только только через чип WiFi и IP-стек операционной системы. Вот почему «iptables не может быть использован для установки правил фильтрации на связи WiFi LAN. Я хотел решить эту проблему и позволить сетевому администратору возможность фильтровать трафик WiFi LAN.

Что такое приложение, которое позволяет сделать фильтрацию пакетов между устройствами Wi-Fi под тем же SSID?

Первый пакет, отправленный между 2 устройствами на локальной сети, будет запросом ARP. Каждый узел должен знать аппаратный адрес узла, который хочет общаться с. Итак, чтобы преодолеть проблему, с которым я столкнулся, я понял, что моя главная цель, чтобы обмануть узлы на локальной сети и «лежать» к ним о аппаратном адресе каждого другого узла на локальной сети. Для этого я создал приложение, работающий на маршрутизаторе, задание, чтобы понюхать пакеты запроса ARP и для создания сообщений ARP Reply с собственным MAC-адресом маршрутизатора. Как только приложение пройдет, все трафик входит в IP-стек операционной системы и может быть отфильтрован IPTables.

Tech Stack.

Чтобы создать приложение, которое нюхает пакеты, я создал необработанный розетку, который «слушает» на все трафик, который получает адаптер WiFi. Поскольку адаптер WiFi все время получает большой трафик, сырой розетки, который принимает весь трафик, может быть очень процессором. Итак, я решил использовать BPF Packet Filters. Фильтры BPF позволяют нам определить правила фильтрации и применить их к розетке, я не буду идти в глубокую здесь Но я просто скажу, что это повышает производительность. Поэтому я создал фильтр, который получат только пакеты на нужную адаптер WiFi и только кадры, чей MAC-адрес назначения IS FF: FF: FF: FF: FF: FF (вещательные рамы). Приложение не работает, но это было еще недостаточно. Приложение действительно ответил на запросы ARP с правильным ответом ARP, но он должен был «конкурировать» с другим ответом ARP, который был отправлен из узла на локальной сети. Краткое объяснение — когда узел «X» желает общаться с узлом «y», он отправляет запрос ARP, узел «y» ответов, и они начинают общаться. Помимо моей новой заявки ARP-ответа, был также «оригинальный» ответ ARP. Так что я избавился от «оригинального» ARP-ответа? Хорошо, к счастью, большинство чипсов Wi-Fi приезжают сегодня с возможностью установить беспроводную изоляцию. Что это значит, так это то, что клиенты LAN Wi-Fi не смогут общаться друг с другом, они могут общаться только со своим роутером вверх по течению. Это было идеально для меня, так как как только я включил изоляцию, «оригинальный» ответ ARP не достигнет другого клиента, и поскольку сгенерированный ответ ARP из приложения исходит от маршрутизатора, он не будет выделен чипом WiFi. Теперь у нас есть система, устройства LAN LAN могут взаимодействовать друг с другом с помощью маршрутизатора, он добавляет немного задержки на трафик, но теперь трафик может быть отфильтрован в обычном и простом способе

Процесс построения приложения, который позволяет сделать фильтрацию пакетов между устройствами Wi-Fi под теми же SSID

Сначала мне нужно было понять, почему я не могу отфильтровать трафик LAN, я должен был получить хорошее понимание потока пакета внутри чипа WiFi и в стеке IP Linux. Затем я понял, что фильтрация пакета не будет возможно, если я не выполняю какой-то сетевой трюк. Поскольку я знаю, что одноадресный трафик включается в чип Wi-Fi и, следовательно, не может быть «виден» маршрутизатором, IR ясно, что я должен был начать с первого трафика, который является просьбой трансляция ARP. После изучения чипа WiFi и изучения его возможностей изоляции я понял, что это была «должна иметь» способность к моей заявке на работу. Последняя задача не была слишком сильно повредить производительность, и именно там, где фильтры BPF вошли в картину. Они позволили мне определить конкретный фильтр для необработанного розетки, поэтому мне не нужно было обрабатывать все пакеты, но только долю их (широковещательные пакеты) и, следовательно, не сделать мое приложение CPU потреблением.

Проблемы я столкнулся

На регулярных проектах, как правило, вы ищете ответы в StackoverFlow, так как многие ежедневные вызовы, которые мы сталкиваемся с инженерами программного обеспечения, уже сталкивались другими разработчиками. Проблема, которую я столкнулся, не имел документированного решения. Мне нужно было собрать все свои сетевые способности и знания и найти уникальное решение этой проблемы, и даже после решения проблемы «незначительные» проблемы возникают, которые заставляют вас читать и очень хорошо понимать протокол ARP и решить любые дополнительные Проблемы, о которых вы не думали.

Назначение ключей

Легко нужно было отпустить и сказать, что проблема не может быть решена, но иногда быть творческим и мышлением из коробки, может привести вас к очень интересные решения, которые не могут быть найдены даже на стойке

Советы и советы

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

Окончательные мысли и следующие шаги

Это сделанный проект, с нетерпением жду моей следующей задачи.

Оригинал: «https://www.codementor.io/@shaibenshalom/how-and-why-i-built-an-application-that-enables-to-do-packet-filtering-between-wifi-devices-under-same-ssid-rdz0bm0t4»