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

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

. iptables​기본적으로 .NET에서 IP를 사용하는 것처럼 도메인 필터링/화이트리스트/블랙리스트를 수행하고 싶습니다 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 트래픽 자체가 아니라 이름 확인이 중단됩니다.

파이프( )로 구분된 16진수는 DNS 쿼리의 |03|www|08|facebook|03|com점 기호를 나타냅니다 . .다음 문자 중 몇 개가 각 부분을 나타내는지 알려줍니다.FQDN(호스트, 도메인, 최상위 도메인) 예:

주인: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

블랙리스트에 추가하는 가장 쉬운 방법은 아마도 다음을 사용하는 것입니다.dnsmasq

설치하다dnsmasq

$ sudo apt-get install dnsmasq

이 줄을/etc/dnsmasq.conf

address=/facebook.com/127.0.0.1

이렇게 하면 차단됩니다facebook.com및 모든 하위 도메인.

참고: 우분투에 대해서는 다음을 참조하세요.이 게시물.

답변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 기반 접근 방식

관련 정보