
Я хочу реализовать решение безопасности, похожее на MACsec, которое захватывает пакет целиком (включая заголовок MAC) на промежуточном сетевом узле (например, коммутаторе на базе Linux), выполняет некоторую обработку пакета, а затем отправляет его на промежуточный узел.
Пожалуйста, укажите мне соответствующие ресурсы, которые могут помочь мне сделать это. В настоящее время я ищу решения, требующие модификации драйвера сетевой карты. Есть ли более простое решение, чем это? Как другие реализуют MACsec?
Обратите внимание, что я не собираюсь просто перехватывать пакет с помощью pcap и подобных методов. Я хочу иметь возможность перехватывать пакет до того, как он пройдет через промежуточный узел, изменять его и отправлять его предполагаемому получателю.
Спасибо
решение1
Если вы хотите проанализировать пакет, как его получает ядро Linux, вам придется написать драйвер ядра, возможно, даже модифицировать само ядро. Когда интерфейс получает данные, обработка начинается немедленно. Все, что зарегистрировано для получения следующего уровня, будет иметь свой обработчик, который будет вызван. Поскольку заголовок MAC не требует большой обработки, обработчик уровня IP является первым, кто начинает выполнять большую часть обработки.
Если вы хотите манипулировать заголовком MAC и делать что-то свое, вам придется вставить себя сразу после получения заголовка MAC и до обработки IP. Или вы можете написать драйвер, который будет виртуальным NIC. Таким образом, вы сможете обрабатывать данные так, как считаете нужным. Виртуальный NIC будет видеть все данные так же, как и реальный NIC. Это, вероятно, будет вашим лучшим выбором, поскольку вы не хотите начинать возиться с ядром и перестраивать его только для своего собственного проекта.
Мой ответ здесьдает несколько хороших ссылок для изучения Linux kernel networking. Я бы также посоветовал взять Linux Kernel Networking: Implementation and Theory Рами Розена. Отличный ресурс для глубокого изучения сетевого стека.
MACSec в какой-то момент будет реализован в ядре. Например, IPSec хранит свои политики безопасности в ядре, в то время как демон пользовательского пространства отслеживает туннельные соединения. Так что, к сожалению, я считаю, что вам придется написать некоторый уровень кода ядра, чтобы выполнить нужные вам действия.
решение2
Некоторое время назад я хотел немного поиграться с пакетами данных, такими как уровень 2, уровень 3 или более высокие уровни. Я нашел хороший инструмент, основанный на python, чтобы сделать это. Этот инструмент вызывает
Скапи.
Вы можете захватывать и манипулировать пакетами. Или вы можете создать пакетный фильтр для своих нужд.