Я настраиваю сервер, и мне нужно сделать конкретную конфигурацию. Я должен отбросить определенный пакет, который всегда начинается с XX 01
. Я могу сделать это с помощью этого правила:
sudo iptables -A INPUT -p tcp --dport XXXX -m string --hex-string '|XX 01|' --algo bm -j REJECT
Но проблема в том, что iptables
начинает чтение с первого символа HEX, поэтому иногда он генерирует ложные срабатывания.
Я имею в виду, что iptables
отбрасывает хорошие пакеты, соответствующие правилу. Например: отбрасывает aa aa aa XX 01 aa aa aa aa
.
Что мне нужно сделать iptables
, так это сбросить пакет ТОЛЬКО, если XX 01
- это первые 4 символа строки данных. Игнорирование, если оно присутствует после 4-х данных. Я имею в виду, если у меня есть, например, 6D 00 00 00 00 00 XX 01 00 AA
, он должен пройти.
Я знаю, что есть противоположный способ сделать это, я имею в виду, я могу просто подключить свой сервер и прослушать входящие пакеты с wireshark
, чтобы внести в белый список первый Hex, которого нет XX 01
для каждого пакета, который содержит XX 01
в строке данных: например, в строке 6D
, которую я поставил. Но для того, чтобы сделать это таким образом, мне нужно часами нюхать, и я должен создать множество правил. Мне нужно установить правило для внесения в белый список всех пакетов, которые начинаются с чего-либо, кроме XX 01
, или правило, которое прекращает чтение пакета после 4-го шестнадцатеричного символа.
Любая помощь будет оценена.
Согласно разделу string
страницы руководства iptables-extensions
, есть две опции для контроля, с какой частью пакета тестируется шаблон:
--from offset
Set the offset from which it starts looking for any matching. If
not passed, default is 0.
--to offset
Set the offset up to which should be scanned. That is, byte off‐
set-1 (counting from 0) is the last one that is scanned. If not
passed, default is the packet size.
Вы пробовали --to 2
аргумент, который предположительно должен ограничивать длину диапазона соответствия этим значением?