Linux에서 도메인 이름 필터링을 수행하는 방법은 무엇입니까?

Linux에서 도메인 이름 필터링을 수행하는 방법은 무엇입니까?

바람직하게는 비슷한 것입니다 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

블랙리스트 작성의 경우 가장 쉬운 방법은 아마도 다음을 사용하는 것입니다.DNS

설치하다dnsmasq

$ sudo apt-get install dnsmasq

이 줄을/etc/dnsmasq.conf

address=/facebook.com/127.0.0.1

이것은 방지할 것이다페이스북및 모든 하위 도메인.

참고: 우분투의 경우 다음을 참조하세요.이 게시물.

답변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.

온라인 광고를 차단하는 간단한 DNS 기반 방법

관련 정보