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