Homebrew에서 DNSCrypt를 사용해보십시오.

주: DNS에 대해 특별히 전문적이지 않기 때문에, 이 기사의 내용은 크게 오해해 써 있을 가능성이 있다.

DNS란?



DNS는 IP와 도메인 이름을 변환하는 프로토콜 서비스입니다.
이것은 원시 TCP와 UDP를 통해 통신합니다. 이대로는 변조 무제한, 도청 무제한.

DNS를 보호하기 위한 방법



디지털 서명을 추가하고 응답함으로써 완성을 보장하는 DNSSEC이 있다.
(무결성의 보증은 해 주지만, 도청은 막지 않는다). 별로 보급되지 않은 것 같다.

한편, 도청을 막는 수단으로서 DNSCrypt 이라는 프로토콜 소프트웨어가 있다.

로컬에 DNSCrypt 프록시 서버를 설정하고 프록시 서버를 통해 통신함으로써,
원시 DNS 쿼리는 캡처할 수 없게 된다는 치수다.

실제로 tcpdump 로 자신의 DNS 문의와 응답을 도청해, 통상시와 DNSCrypt 유효시로 비교해 보았다.

확실히 DNS 도청에 효과적이었기 때문에, 여기에 자신의 조사한 순서를 남긴다.
(그리고 물론, 오버헤드가 있는 만큼, DNS 조회시에 통신 속도는 저하한다.
또한 DNS 도청은 막아도 다른 통신에 대해서는 기존의 상태이므로 역시 VPN이나 ​​TLS 등으로 보호할 필요가 있다.
지리 최적화 등의 혜택을 받지 못하고 CDN에서 다운로드 속도가 향상되지 않을 수 있습니다.
또, OS 본체의 업그레이팅시나 싱글 유저 모드 등, 특수한 상황하에서도 올바르게 통신 가능한가 어떤가, 나는 검증하고 있지 않다. )

Homebrew에서 설치 및 시작



설치


$ brew install dnscrypt-proxy --with-plugins

시작


$ sudo brew services restart dnscrypt-proxy

과연 간단.

실험 방법



tcpdump 사용법


en0 는, ifconfig 커멘드등으로, 자신의 환경에서의, 주로 사용하고 있는 네트워크 인터페이스를 대비해 지정한다.
port 53 는 DNS 가 53번 포트에서 통신하기 때문입니다.
$ sudo tcpdump -i en0 'port 53'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on en0, link-type EN10MB (Ethernet), capture size xxxxxx bytes
(略。キャプチャした結果がでる)

DNSCrypt 활성화/비활성화



메뉴 > 시스템 환경설정 > 네트워크 > 고급... > DNS > DNS 서버
그리고 열어 가서 127.0.0.1을 추가하면 유효, 삭제하면 무효라는 설정이 된다.
확정하려면 1 전의 「네트워크」의 화면에서 「적용」을 눌러야 한다.

(나는 평소 영어 로케일로 사용하고 있기 때문에, ↓의 그림과 ↑의 문언이 다소 다를지도 모른다.)


DNS 문의


nslookup 명령으로 도청하고 싶은 샘플의 문의를 하기로 한다.
$ nslookup example.com
Server:     XXX.XXX.XXX.XXX
Address:    XXX.XXX.XXX.XXX#53

Non-authoritative answer:
Name:   example.com
Address: 93.184.216.34

DNS 캐시 지우기



실험할 때는 DNS 캐시가 있다고 올바르게 비교할 수 없는 가능성을 생각해, 다음의 커멘드로 캐시를 클리어 한다.
(일반적으로 nslookup 명령은 캐시를 무시해야 하지만, 이를 신뢰하는 것보다 확실하게 지우고 비교하고 싶습니다.)
$ sudo killall -HUP mDNSResponder

결과



DNSCrypt 무효시에는 다음과 같은 패킷을 기록할 수 있다. 유효시에는 기록할 수 없다.
$ sudo tcpdump -i en0 'port 53'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on en0, link-type EN10MB (Ethernet), capture size ?????? bytes
HH:MM:SS.ssssss IP XXX.XXX.XXX.XXX.AAAAA > YYY.YYY.YYY.YYY.domain: ?????+ A? example.com. (29)
HH:MM:SS.ssssss IP YYY.YYY.YYY.YYY.domain > XXX.XXX.XXX.XXX.AAAAA: ????? 1/2/4 A 93.184.216.34 (181)
HH:MM:SS.ssssss IP XXX.XXX.XXX.XXX.BBBBB > YYY.YYY.YYY.YYY.domain: ?????+ PTR? XXX.XXX.XXX.XXX.in-addr.arpa. (44)
HH:MM:SS.ssssss IP YYY.YYY.YYY.YYY.domain > XXX.XXX.XXX.XXX.BBBBB: ????? NXDomain* 0/1/0 (100)
HH:MM:SS.ssssss IP XXX.XXX.XXX.XXX.CCCCC > YYY.YYY.YYY.YYY.domain: ?????+ PTR? YYY.YYY.YYY.YYY.in-addr.arpa. (42)
HH:MM:SS.ssssss IP YYY.YYY.YYY.YYY.domain > XXX.XXX.XXX.XXX.CCCCC: ????? NXDomain* 0/1/0 (98)

또한 port 443를 캡처하면 DNSCrypt로 암호화 된 통신을 기록 할 수 있습니다. (어떤 문의를 했는지까지는 모른다.)

좋은 웹페이지 즐겨찾기