바인딩: 유효하지 않은 재귀 쿼리에 대한 블랙홀?

바인딩: 유효하지 않은 재귀 쿼리에 대한 블랙홀?

공개적으로 액세스할 수 있는 네임서버가 있습니다.두 개의 도메인에 대한 권한 있는 이름 서버입니다..

현재 서버는 ANYisc.org, Ripe.net 및 이와 유사한 가짜 유형 요청으로 넘쳐납니다.알려진 분산 DoS 공격).

서버는 BIND를 실행하고 allow-recursion이러한 요청이 거부되도록 내 LAN으로 설정했습니다. 이러한 경우 서버는 루트 서버를 참조하는 섹션 authority으로 만 응답합니다.additional

응답을 전혀 보내지 않고 이러한 요청을 완전히 무시하도록 BIND를 구성할 수 있습니까?

답변1

동일한 문제에 직면하여 모든 재귀 요청을 무시하기로 결정했습니다. 모든 확인자는 내 서버를 신뢰할 수 있는 서버로 사용하려고 할 때 비재귀 쿼리를 보냅니다. 내 경우에는 잘못 구성된 클라이언트와 공격자만이 재귀 쿼리를 사용합니다.

불행하게도 나는 BIND가 그렇게 하도록 하는 방법을 찾지 못했지만 iptables가 당신에게 충분할 경우를 대비해 나는 다음을 사용했습니다.

iptables -t raw -I PREROUTING -i eth0 -p udp --destination-port 53 \
    -m string --algo kmp --from 30 \
    --hex-string "|01000001000000000000|" -j DROP

답변2

나는 시도할 것이다:

zone "." {
  type redirect;
  allow-query "none";
}

클라이언트를 루트 서버로 참조하는 응답은 "리디렉션" 영역에 의해 제어됩니다. 그러면 해당 항목에 응답하지 말라고 알려야 합니다.

이는 Bind9 문서에 암시되어 있습니다.http://ftp.isc.org/isc/bind9/cur/9.9/doc/arm/Bv9ARM.ch06.html#id2592674

"none"로컬 서브넷으로 교체할 수도 있습니다 .

이미 zone "."선언이 있는 경우 추가하기만 하면 됩니다 allow-query "none";.

답변3

문자열 isc.org를 차단하거나 이에 대한 16진수 문자열을 차단하려고 했습니까?

이것은 나에게 효과적이었습니다.

iptables -A INPUT -p udp -m string --hex-string "|03697363036f726700|" --algo bm -j 삭제

답변4

기본 아이디어는 바인딩이 DNS 응답을 Refused로 분류한 다음 iptables를 사용하여 Refused를 자동으로 무시되도록 변환하도록 합니다.

Refused는 명명된.conf 옵션 섹션에서 쉬운 부분입니다.

allow-recursion { none;};

또는 물론 로컬 예외에 대해 선호하는 ACL...

다음 미친 iptables 마술은 필요에 따라 "-o eth0"을 조정하거나 제거합니다. 이 명령은 UDP 이전의 표준 20바이트 IPv4 레이어 헤더를 가정합니다.

iptables -A OUTPUT -o eth0 -p udp --sport 53 -m string --from 30 --to 32 --hex-string "|8105|" --algo bm -j DROP

다음 비트가 설정된 DNS 응답의 플래그 필드에 대한 키입니다.

  • DNS 응답
  • 재귀 쿼리
  • 응답 코드가 거부됨

테스트를 위한 피드백을 얻기 위해 규칙이 일치할 때 디버그 "응답 전송 오류: 호스트에 연결할 수 없음"에서 바인드를 실행하는 로그 메시지가 확인되었습니다.

이 모든 것이 다소 무의미한 작업임을 인정해야 합니다. 증폭이 없으면 공격자는 TCP SYN을 쉽게 반영할 수 있습니다. 결국 DNS는 TCP를 사용하거나 Eastlake의 DNS 쿠키를 배포하는 것 외에는 실행 가능한 솔루션이 없어 중단되었습니다.

관련 정보