2009-05-06 5 views
0

Я пытаюсь написать программу фильтрации червя на уровне приложения.Удаление пакетов с совпадающей строкой с использованием iptables отбрасывает все последующие пакеты без соответствия

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

IPTables -A ВХОДА -p TCP -m строки --string "тестовый" -j DROP --algo KMP

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

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

благодарит

+1

Я бы сказал, что это на хорошем вопросе. – innaM

ответ

2

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

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

0

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

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