iptables를 사용하여 일치하는 문자열로 패킷을 떨어 뜨리는 것은 일치하지 않고 모든 후속 패킷을 떨어 뜨립니다.

StackOverflow https://stackoverflow.com/questions/828884

  •  06-07-2019
  •  | 
  •  

문제

응용 프로그램 계층에 벌레 필터링 유틸리티를 작성하려고합니다.

TCP 패킷을 특정 하위 문자로 삭제하기위한 규칙에 따라 설정했습니다.

iptables -a 입력 -p tcp -m 문자

그러나 일치하는 문자열이있는 패킷이 발견되면 모든 후속 패킷이 발견되면, 비일 일치하는 문자열이있는 경우에도 iptable에서 규칙을 플러시 할 때까지.

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

감사해요

도움이 되었습니까?

해결책

TCP는 전송중인 데이터 시퀀스를 유지하는 지향적 신뢰할 수있는 프로토콜에 연결되어 있습니다. 이전 페이로드에 도달 할 때까지 특정 페이로드를 계속 변경하려고 노력합니다. 따라서 오래된 페이로드에 도달 할 때까지 다른 후속 페이로드를 보낼 수 없으므로 모든 후속 패킷이 떨어지고 있다고 생각합니다.

UDP에 대한 유사한 규칙을 설정하면이 경우 발생하지 않을 것입니다. 문자열과 일치하지 않는 모든 후속 패킷을 수신 할 수 있습니다. UDP는 연결없이 신뢰할 수없는 프로토콜이기 때문입니다.

다른 팁

조금 늦었지만 비슷한 문제가있는 사람들을 만나는 것. 이것을 우회하는 한 가지 방법은 원시 체인 내 에서이 규칙을 수행하는 것입니다. 모든 종류의 Conntrack이 패킷에 배치되기 전에 모든 패킷이 여기에 닿을 것이므로 여기서 필터링하는 것이 가장 좋습니다.

iptables -A PREROUTING -t raw -p tcp -m string --string "test" -j DROP --algo kmp
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top