2009-05-06 7 views
0

응용 프로그램 계층에 웜 필터링 유틸리티를 쓰려고합니다.iptables를 사용하여 일치하는 문자열로 패킷을 삭제하면 일치하는 모든 후속 패킷이 삭제됩니다.

특정 하위 문자열이있는 TCP 패킷을 삭제하도록 다음 규칙이 설정되어 있습니다. TCP의 -m 문자열 -p

의 iptables -A INPUT --string "테스트"드롭 -j --algo KMP

그러나 일단 문자열 일치하는 패킷이 발견되는 모든 후속 패킷도 함께 일치하지 않는 문자열은 iptable에서 규칙을 플러시 할 때까지 삭제됩니다.

나는 왜 이런 일이 일어나고 있는지 그리고 그 해결 방법이 무엇인지 알고 싶습니다.

감사합니다.

+1

나는 serverfault.com을 통해이 질문을 좋은 질문으로 간주 할 것입니다. – innaM

답변

2

tcp는 전송되는 데이터의 순서를 유지하는 신뢰할 수있는 프로토콜로 연결되어 있습니다. 특정 페이로드가 거기에 도달 할 때까지 계속 변경하려고하므로 이전 패킷에 도달 할 때까지 다른 후속 페이로드를 보낼 수 없으므로 모든 후속 패킷이 삭제되는 것입니다.

udp에 대해 비슷한 규칙을 설정하면이 문제가 발생하지 않고 문자열과 일치하지 않는 모든 후속 패킷을 수신 할 수 있습니다. 이는 udp가 비 연결적이고 신뢰할 수없는 프로토콜이기 때문입니다.

0

조금 늦었지만 비슷한 문제가있는 사람들을 봅니다. 이것을 피하는 한 가지 방법은 RAW 체인 내에서이 규칙을 수행하는 것입니다. 어떤 종류의 conntrack이 패킷에 놓이기 전에 모든 패킷이 여기에 부딪혀서 여기서 필터링하는 것이 가장 좋습니다.

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