바람직하게는 비슷한 것입니다 iptables
. 기본적으로 이 문제를 해결하려고 노력하고 있습니다 iptables
. 이를 수행하는 방법에 대한 제안이 있습니까?
답변1
트래픽을 삭제하기 위해 iptables 규칙에 대한 이름 확인을 사용하는 경우 규칙 생성 중에 이름이 확인됩니다. 상황이 변경되면 규칙은 더 이상 적용되지 않습니다. 이것은 해결책일 수 있습니다(완벽한 해결책은 아닙니다...).
# iptables -I FORWARD -p udp --dport 53 -m string --hex-string "|03|www|08|facebook|03|com" --algo bm -j DROP
LAN 내의 다른 호스트에서:
# host www.facebook.com
www.facebook.com A record not found, try again
udp/53
기본적으로 16진수 문자열이 있는 모든 DNS 패킷()을 삭제합니다 www.facebook.com to
. 이는 http 트래픽 자체가 아니라 이름 확인을 삭제한다는 점에 유의하세요.
DNS 쿼리의 점 표기법을 |03|www|08|facebook|03|com
나타내는 Pipes()로 구분된 16진수입니다 . .
다음 문자 중 문자의 각 부분을 나타내는 문자 수를 나타냅니다.정규화된 도메인 이름(호스트, 도메인, 최상위 도메인) 예:
주인:mail.google.com
16진수 표현:04 6d 61 69 6c 06 67 6f 6f 67 6c 65 03 63 6f 6d
"시각적 성능:04mail06google03com
tcpdump를 사용하여 패킷을 얻습니다.
# tcpdump -i eth0 -X dst port 53
15:50:11.643672 IP xxx.xxx.xxx.xxx:xxx > ns4.google.com.domain: 16530 A? mail.google.com. (33)
0x0000: 4500 003d 779a 4000 4011 b390 c949 4742 E..=w.@[email protected]
0x0010: d8ef 260a 8424 0035 0029 0fc0 4092 0000 ..&..$.5.)..@...
0x0020: 0001 0000 0000 0000 046d 6169 6c06 676f .........mail.go
0x0030: 6f67 6c65 0363 6f6d 0000 0100 01 ogle.com.....
하지만 기억해:
- smtp, ftp 또는 http와 같은 보다 구체적인 트래픽을 필터링하려는 경우 해당 프로토콜에 대한 프록시가 더 좋습니다.
- 도메인을 차단하는 대신 DNS 쿼리를 "하이재킹"하고 있습니다. 사용자는 그렇게 바보가 아닙니다 ;)
답변2
귀하의 질문에 대한 답변이 너무 늦었을 수도 있지만 최근에 비슷한 문제를 해결해야 했고 Google에서 여기로 안내했습니다.
검색이 실패한 후 DNS 응답을 가로채서 그 안에 있는 도메인 이름을 주어진 정규식과 비교하고 일치하는 IP 주소를 나열하는 작은 유틸리티를 C로 작성했습니다. 여기있어:https://github.com/vmxdev/sidmat/
자체 DNS 서버를 설정할 필요가 없습니다. 이 유틸리티는 모든 서버에서 DNS 응답을 캡처할 수 있습니다.
예를 들어, facebook.com(및 하위 도메인)의 현재 확인된 IP 주소를 보려면 다음을 실행할 수 있습니다.
# ./sidmat eth0 "^facebook\.com$|\.facebook\.com$"
173.252.120.6
...
여기서 eth0은 라우터(또는 DNS 응답이 전달되는 위치)의 네트워크 인터페이스입니다.
iptables(또는 ipset을 사용한 iptables)와 쉽게 통합할 수 있습니다.
하지만:
- 실용성은 매우 간단합니다. 공격자가 속일 수 있도록 많은 검사를 수행하지 않습니다.
- 사용자가 이름 확인을 위해 DNS를 사용하지 않는 경우 이 기술은 쓸모가 없습니다.
답변3
답변4
로컬 캐시 바인드9를 실행하는 경우 일반적으로 다음에 의해 실행됩니다.dummy-block
zone "facebook.com" { type master; file "dummy-block"; };
그리고 dummy-block
파일:
$TTL 604800
@ IN SOA localhost. root.localhost. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS localhost.
@ IN A 127.0.0.1
* IN A 127.0.0.1
또한보십시오:
BIND9 및 ISC-DHCP 실행예를 들어 facebook.com
.