Удаление пакетов с совпадающей строкой с использованием iptables удаляет все последующие пакеты без совпадения - PullRequest
0 голосов
/ 06 мая 2009

Я пытаюсь написать утилиту фильтрации червя на прикладном уровне.

У меня настроено следующее правило для удаления пакета tcp с определенной подстрокой.

iptables -A INPUT -p tcp -m строка - строка "test" -j DROP --algo kmp

однако, как только пакет с совпадающей строкой найден, все последующие пакеты, даже с несоответствующими строками, отбрасываются, пока я не сбросил правило с iptable.

Я хотел бы знать, почему это происходит и каково его решение.

спасибо

Ответы [ 2 ]

2 голосов
/ 06 мая 2009

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

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

0 голосов
/ 22 сентября 2016

Здесь немного поздно, но встречаются люди с похожими проблемами. Один из способов обойти это - сделать это правило в цепочке RAW. ВСЕ пакеты будут попадать сюда до того, как на них будет помещен какой-либо вид контратаки, поэтому лучше выполнить фильтрацию здесь.

iptables -A PREROUTING -t raw -p tcp -m string --string "test" -j DROP --algo kmp
...