Pi-Hole을 써봤다.

두괄식으로 요약하면 1) DNS 서버 수준에서 광고/트래킹 사이트 접속을 차단한다. 2) DB+HTTP server의 결합으로 DNS/DHCP관리를 할 수 있다. 3) AD/트래커 제거 기능은 엄청나게 우수하다고 볼 수는 없지만 반면 관련 광고/트래커 제거 플러그인이 잡아내지 못하는 것들도 잡아낸다. 4) DNS query 통계를 이용해서 집안의 어떤 장치에서 일어나는 다양한 접속시도를 탐지/차단 시킬 수 있다.

누군가 라스베리파이로 하는 프로젝트를 소개하는 중에 나온 것인데 뒤늦은 감이 있지만 한번 따라해보았다. 설치는 매우 간단하다. AUR에서 만든 패키지를 가져다가 설치하면 되는데 명령 두 줄로 설치는 완료할 수 있고 서버관련 config 몇 줄 넣어주는 것으로 끝난다. RPI4에 설치했는데 자체 기능 동작이라든가 UI 접속속도도 대단히 빨라서 매우 만족스럽다. 저가의 라우터에 설치한다고 보면 용량이나 컴퓨팅 파워문제로 어려울 것 같고 최근의 제법 고가의 것들에나 추가가 가능하지 싶다. openwrt를 설치한 그 위에 설치가 가능한지는 알 수 없다.

Pi-Hole이란 것은 일종의 DNS server인데 blacklist를 온라인으로 공유해서 광고나 유해사이트 접속을 막는 역할을 한다. 그러니까 ad-block이라든가 ghostery 같은 것들은 브라우저로부터 사이트의 소스를 가져다가 분석하면서 tracker나 ad를 업에는 기능을 한다면 Pi-Hole은 그냥 아예 광고 사이트로 등록된 곳의 주소에 대한 query가 오면 ‘모른다’ 잡아떼는 식으로 광고를 제거한다고 보면 된다.

기본적으로 db(sqlite3)로 모든 dns query에 대한 통계를 내주기 때문에 단지 광고 사이트만 차단하는 게 아니라 나도 모르게 어떤 디바이스에서 어떤 사이트에 접속하려고 하는지 다 알 수 있다. 필요에 따라서 해당 주소를 blacklist에 추가 하면 다음부터는 관련된 모든 query에 대한 resolve가 실패하게 된다. 그러니까 단순히 광고/유해사이트만 차단할 수 있는 게 아니라 원치 않은 불필요한 트래픽도 줄일 수 있다.

집에 라우터가 1개라면 그리고 pi-hole의 설정을 잘해놓았다면 어떤 기기에서 어떤 query를 보내고 있고 얼마나 많은 query가 차단되었는지에 대한 통계도 다 볼 수 있다.

문제는 집에 여러 개의 라우터가 있으면 그것이 라우터 기능이 아닌 단순한 AP 기능으로 동작한다고 해도 DNS query는 해당 AP의 ip주소로 날리는 (forward하는) 관계로 해당 AP에 속한 디바이스들은 정확히 찾아낼 수 없다.

대부분 DNS forward/resolve를 라우터가 하고 있으니까 아예 라우터에 이 기능이 있으면 좋을텐데 내가 아는 무선 라우터에는 이런 기능이 없고 openwrt같은 것을 설치해도 이런 기능은 없다. 결국 별도의 컴퓨터 리소스를 희생해서 이 작업을 시켜야 하는데, 그러다보니 raspberry pi가 적당한 타겟이 되는 거다.

pi-hole에는 php-sqlite3를 이용한 편리한 UI를 가지고 있고 여기에 자체적으로 DHCPD 관리기능도 있어서 매우 유용한데, 대개 무선 라우터에 DNS/DHCP/NAT 등등의 기능이 들어있고 DHCP/DNS를 별도의 장치로 따로 빼놓는 게 더 불편한 일이라 사실 DHCP 기능은 잘 안쓰게 되는데, 무선라우터가 아예 이 기능을 지원해주면 좋을 것 같단 생각이 든다.

간단하게 테스트해보면…

1) dns resolve를 실패하게 함으로써 광고 사이트를 차단하는 것이라 그림을 로딩해오는 경우에는 엑박이 뜨게 되어 미관상으론 별로 좋지 않다. 2) 대개 브라우저 말고도 백그라운드로 도는 수많은 잡들에서도 수시로 ad site에 접속하는 경우가 있는데, 이 경우는 확실하게 차단이된다. 3) 브라우저에 AD 차단을 붙일 수 없는 디바이스도 모두 해택을 받는다. 4) html을 열어보고 광고를 차단하는 플러그인에 비해 AD 차단 성능이 더 좋다고 말하기는 어렵다. 5) 광고 제거 플러그인을 비활성화한 뒤에 확인해보면 일부는 여전히 허용이 되고 있는 것을 알 수 있고, 또 광고 제거 플러그인이 켜져있다고 하더라도 웹 페이지 어딘가에 광고 사이트 접속은 이루어지는 것을 확인할 수 있다. 그러니까 광고 제거 플러그인과 pi-hole을 같이 사용하면 효과가 매우 커진다고 볼 수 있다.

pi-hole의 통계를 보면 단시간에도 정말 엄청나게 많은 DNS query가 일어나고 있음을 알 수 있다. 물론 해당 dns record는 cache에 들어가서 실제적인 dns traffic은 cache에 유지되는 동안엔 딱 한번 밖에 일어나지 않지만. 각종 스마트 기기 (폰/태블릿/PC)뿐 아니라 집안의 thermostat, 차고 셧터 개폐기, 와이파이 카메라 등등에도 cloud 연결 기능이 들어가 있어서 이들이 계속해서 외부와 접속을 한다 (데이터를 퍼나른다).

나는 광고/트래커 차단 플러그인을 쓰고 있고 몇 개 안되는 사이트에만 다니고 있으니까 별 거 없겠지 싶었는데, 아직 분석해보진 않았지만 대략 1% 정도의 DNS query가 차단되는 것을 확인했다. 각종 IoT 장치들에 물려있는 AP에서 보내온 query들이 대부분 여기에 해당되었다. 이들이 어떻게든 계속해서 데이터를 수집하는 것은 어찌보면 당연한 일이지만 그렇단 거다. 또 예상은 했지만 회사에서 나눠준 PC들의 보안 S/W에서 회사에 수시로 접속하는데, 사실 이 PC들은 아무 일도 안하고 있는 것처럼 보여도 집안 그 어떤 장치들 보다 많은 트래픽을 만들어내고 접속하는 호스트의 개수도 엄청나게 많다는 것을 알게 되었다.

그러니까 회사에서 사용하는 PC들은 여러 개의 업체들이 요청사항에 따라 만들어서 설치한 S/W들을 가지고 있기 때문에 수집하는 정보 중에 공유되는 것이 없어서 이놈 저놈 중복된 정보를 가져오거나 내보내기도 하고 업체 실력에 따라 쓸데없이 많은 트래픽을 만들어내기도 하는 것으로 해석이 된다. 어차피 사용하지 않는 기능들이 많다면 이들이 접속하는 노드를 black list에 추가하면 불필요한 트래픽과 전력소모를 줄 일 수 있다고 생각한다. 문제는 그렇다고 이것 저것 다 블랙리스트에 추가하다간 멀쩡한 기능마저 동작하지 않을 수 있단 것이지만.

이를테면 노트북 뚜껑을 열었다 닫았다만 해도 수많은 정보가 오고 가는 것을 확인할 수 있다. 가만히 놔두면 스스로 업데이트를 할 때가 있는데 이 때 정말 엄청난 양의 트래픽을 일으킨다. 또 어떤 데이터를 새로 가지고 들어왔다거나 해당 PC에서 어떤 activity가 일어나고 있어도 계속해서 특정 node에 접속하려는 시도가 감지된다. 재미 삼아 하나씩 차단해보고 그 반응을 보는 것도 의미가 있지 싶다.