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


12

가급적 비슷한 것 iptables입니다. 기본적으로에서 IP를 사용하는 것처럼 도메인 필터링 / 화이트리스트 / 블랙리스트를 수행하고 싶습니다 iptables. 이 작업을 수행하는 방법에 대한 권장 사항이 있습니까?


무엇을 왜 차단하려고합니까? 발신 / 수신 HTTP, SMTP 또는 NTP를 필터링하려고합니까? 시나리오마다 다른 도구를 사용할 수 있습니다.
Creek


1
@josten 이상적으로 Squid 와 같은 HTTP 프록시를 사용합니다 . 에 도메인 이름을 차단 iptables할 수 있습니다 수행 하지만 위험한있을 수 있습니다
크릭

답변:


8

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/5316 진수 문자열 www.facebook.com to이 삭제 된 모든 dns packet ( )에 말하고 있습니다 . http 트래픽 자체가 아닌 이름 확인이 삭제됩니다.

pipes ( |03|www|08|facebook|03|com)로 구분 된 16 진수 .는 dns 쿼리 에서 도트 심볼을 나타냅니다 . 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.@.@....IGB
        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 쿼리를 "도용"하고 도메인을 차단하지 않습니다. 사용자는 바보가 아닙니다.)

출처 : 여기여기


왜 algo type이 bm입니까?
Gaurav Kansal

알고리즘 보이어 - 무어 - en.wikipedia.org/wiki/...

4

어쩌면 귀하의 질문에 대한 답변이 너무 늦었지만 최근에 비슷한 문제를 해결해야했고 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 및 모든 하위 도메인 이 차단됩니다 .

참고 : 우분투의 경우이 게시물을 참조하십시오 .


1

로컬 캐싱 바인드를 실행하는 경우 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   

또한보십시오:

facebook.com예제 와 함께 BIND9 및 ISC-DHCP 실행

웹 광고 차단을위한 간단한 DNS 기반 접근 방식

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.