점 "."을 차단하는 방법 iptables 규칙에서?

점 "."을 차단하는 방법 iptables 규칙에서?

내 iptables에는 다음으로 끝나는 도메인을 차단하는 규칙이 있습니다 .watch.

sudo iptables -A OUTPUT -j DROP -m string --string ".watch" --algo kmp

하지만 문제는 .일치할 수 없다는 것입니다. 따라서 위의 줄은 아무것도 일치하지 않습니다. 하지만 점을 제거하면 .watch제대로 watch작동합니다.

점 "."을 어떻게 차단할 수 있습니까? iptables 규칙에서?

답변1

구문론적으로 이는 올바른 것처럼 보이지만 귀하의 접근 방식은 이 목적에 적합하지 않습니다. 그만큼문자열 패치패킷의 어느 위치에서든 문자열과 일치합니다.

  • watch패킷이 있거나 있는 패킷을 삭제하고 있습니다 .watch. 이는 오탐(false positive)을 유발할 가능성이 높으며 서비스 거부 공격을 위한 새로운 벡터를 도입할 수도 있습니다.
  • 암호화된 트래픽을 처리할 수 없습니다. 차단할 수 없습니다.웹 트래픽의 대부분.
  • bm일치 알고리즘( Boyer–Moore 및 Knuth–Pratt–Morris) 에 대해 상대적으로 좋은 옵션이 있지만 kmp문자열 필터를 사용하면 여전히 계산 집약적일 수 있습니다.

문서에서는 이에 대해 명시적으로 경고합니다.

이 성냥을 주의해서 사용하십시오. 많은 사람들이 DROP 타겟과 함께 웜을 막기 위해 이 매치를 사용하기를 원합니다. 이것은 큰 실수입니다. 어떠한 IDS 회피 방법으로도 패배할 수 있습니다.

비슷한 방식으로 많은 사람들이 POST 문자열이 포함된 HTTP 패킷을 삭제하여 POST 또는 GET과 같은 HTTP의 특정 기능을 중지하는 수단으로 이 일치를 사용해 왔습니다. 이 작업은 필터링 프록시를 통해 더 잘 수행된다는 점을 이해하시기 바랍니다. 또한 POST라는 단어가 포함된 HTML 콘텐츠는 이전 방법을 사용하면 삭제됩니다. 이 매치는 더 나은 분석을 위해 사용자 영역의 흥미로운 패킷을 대기열에 넣을 수 있도록 설계되었습니다. 그게 전부입니다. 이를 기반으로 한 패킷 삭제는 모든 IDS 회피 방법에 의해 패배됩니다.

달성하려는 목표에 대한 더 나은 대안이 있습니다.

  • DNS 기반 필터링. 모든 DNS 서버가 이를 수행할 수 있습니다. 예:Dnsmasq일반적인 경량 DNS 전달자입니다. address=/watch/0.0.0.0구성에 추가하기만 하면 됩니다.
  • 웹 프록시 기반 필터링.

답변2

DNS 이름은 길이 접두사가 붙은 레이블로 인코딩됩니다(참조:RFC 1035--hex-string "|05|watch|00|"자세한 내용은)을 사용 하여 끝나는 이름을 일치 시켜야 합니다 .watch(길이는 2개의 16진수 숫자로 기록됩니다. 예를 들어 serverfault.com로 인코딩됩니다 "|0b|serverfault|03|com|00|"). 이는 -p udpand --destination-port 53(또는 주소가 일치하는 경우 5353 ) 와 결합되어야 합니다 .local. 그렇지 않으면 관련되지 않은 다른 많은 패킷과 일치할 가능성이 높습니다.

DNS 쿼리는 TCP를 통해서도 이루어질 수 있지만 TCP 필터링은 더 복잡하며 암호화된 요청에 대한 기존 설명과 DNS 및/또는 웹 프록시를 통한 애플리케이션 수준 필터링 사용에 대한 제안이 여전히 적용됩니다.

관련 정보