ОТБРОСИТЬ пакет в зависимости от его параметров или типа

ОТБРОСИТЬ пакет в зависимости от его параметров или типа

В целях тестирования я хотел бы заблокировать определенные пакеты в зависимости от их параметров или типа.

Например, в транзакции DHCP DORA я хотел бы блокировать только пакеты DHCP ACK.

Можно ли это сделать с помощью iptables? Если нет, то какие есть возможности?

решение1

Вы можете использовать u32модуль. (См.страница руководства дляiptables-extensions). Это не слишком удобно, но должно быть применимо.

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

Параметры DHCP начинаются со смещения 236 в пакете UDP, а заголовки IP и UDP имеют длину 20+8 байт. Поэтому нас интересуют байты, начинающиеся со смещения 264. Первые четыре байта должны быть магическим идентификатором, а следующие три можно проверить для параметра типа сообщения. Код типа — 0x35, длина всегда — 0x01, а для DHCPACKзначения — 0x05. (Формат пакета DHCP описан, например, на tcpipguide.com)

Таким образом, выражение для u32может быть:

--u32 '268 >> 8 = 0x350105'

Это просто означает, что нужно прочитать 4 байта по смещению 268 (как число с обратным порядком байтов), сдвинуть их на 8 бит вправо (чтобы сохранить первые три байта) и сравнить результат с ожидаемым значением.

Мы также могли бы проверить магическое число:

--u32 '264 = 0x63825363 && 268 >> 8 = 0x350105'

Проверку того, что UDP-пакет действительно отправляется на правильный порт, проще выполнить с помощью обычных iptablesправил, поэтому мы будем использовать что-то вроде следующего для сопоставления ожидаемых DHCP-пакетов.

iptables -A foo -m udp --dport bootpc -m u32 --u32 '264 = 0x63825363 && 268 >> 8 = 0x350105'

Хотя, как уже говорилось, параметры DHCP могут быть в любом порядке, так что это не надежный метод, особенно если кто-то активно пытается его обойти. Но, возможно, для тестирования это может подойти. Кроме того, я предположил, что заголовок IP не содержит никаких параметров.

Связанный контент