Pihole사용을 위한 regex 정규표현식 문법 정리 / pihole 유지보수작업 정리

목차

글의 목적

이번 EC2를 이용한 VPN을 만들면서 같이 설치한 Pihole도 3달동안 사용해왔다. 그러면서 pihole 사용법도 많이 찾아봤고 관련 영상들도 많이 보았었다. 그래서 이번 글에 간단히 pihole을 좀 더 잘 쓸 수 있는 방법을 정리해보려고한다.
결론적으로 도메인차단방식이 아닌 regex 정규표현식으로 사이트 블랙/화이트리스트를 관리해야하다는 것 | pihole이 몇달동안 재부팅없이 오래 켜있다보니 pihole의 로드율이나 DNS 접속오류가 생기는 상황에 대한 대처방법 | EC2에 호스팅하다보니 다른 VPS들까지 pihole이 dns 처리를 하게되는 현상을 차단하는 방법등 3가지가 가장 필요함을 느끼게 되었고 이에대한 필자의 해결책을 정리해보겠다.

결론

각각의 카테고리에 맞게 정리해보았다.

Regex 정규표현식

pihole에서 도메인등록으로 사이트를 차단할 수 있도록 해주긴하지만 필자의 경험상으로는 도메인으로 등록된 주소들은 pihole이 그다지 잘 걸러내지못하는 것 같았다. 그래서 regex를 통해 차단/허용할 도메인을 지정해 사용하고 있다.

pihole_regex_page

이처럼 regex에 우리가 원하는 사이트를 입력하기위해서는 regex문법에 따라 입력해야한다. pihole 튜토리얼사이트에 잘 설명되어있고 regex 테스트 사이트에서 실제로 잘 차단되는지 확인해볼 수 있지만 빠른 적용을 위해 필자가 사용하고 있는 regex를 예제로 적어놓겠다.

  • api.ruliweb.com을 차단하고 싶을때 -> api\.ruliweb\.com
  • img.ruliweb.com/cartoon를 허용하고 싶을때-> img\.ruliweb\.com\/cartoon
  • 특정단어(strip)이 들어가는 사이트를 차단하고 싶을때 -> strip.*
  • 특정단어(nid)로 시작하는 사이트를 허용하고 싶을떼 -> ^nid

Pihole 오류관리 및 오류 대처방법

pihole을 재부팅없이 3달동안 써보긴했지만 로그가 누적될수록 느려지는 게 체감이 될정도이기에 주기적으로 인스턴스를 재부팅해주는 게 오류를 줄이는데 최선이라고 생각했다. 그래서 aws eventbridge를 이용해서 crontab으로 입력한 주기대로 재부팅하도록 했다. 아마존의 crontab구조는 일반적인 crontab과 살짝 다르기에 관련된 설명서를 읽어보는 것을 추천한다.

필자는 다음처럼 매일 6시에 재부팅되도록 설정했다. 미리 인스턴스 ID만 복사해놓고 가면 큰 어려움없이 설정할 수 있다. 아마존의 cron은 GMT 기준이기에 원하는 시간-9를 해서 입력해야한다!

pihole_rebootevent_page

pihole_timezone_page

혹시 pihole이 업데이트가 필요하거나 이미 상태가 안좋다면 pihole 홈메뉴에서 setting-teleporter에서 백업을 받은 후에 docker로 새로 pihole 이미지를 불러오고 기존 설정을 복원하는 방식으로 진행하는 것을 추천한다. 추가로 기존에 사용한 pihole docker 커맨드는 미리 준비해놓고 하는 것이 훨씬 진행하기에 수월하다.

다른 VPS 제외방법

필자는 인식단에서 자동으로 pihole이 vpn이외의 내부네트워크를 인식하지못하게 하는 방식을 하려했지만 docker 환경내에서는 시도하기가 너무 번거로웠다. 임시방편으로는 GroupManagment-Group/Client/Domains 등에서 자신의 디바이스만으로 그룹을 만들고 그 그룹만 필터링하는 방식을 사용하고 있지만 필자처럼 이미 등록한 도메인이 많다면 스크립트를 활용하거나 블랙리스트만이라도 adlist로 돌려서 활용해야할 것 같다. 근본적인 방법을 좀 더 고민해보겠다.

22.02.04 추가: 원인을 알았다!

우리는 DNS 서버 주소를 입력해서 DNS 서버를 사용한다. 이와 같은 방법으로 무작위 대입 공격을 통해 DNS 서버를 찾아내고 자신들이 원하는 주소로 디도스 공격을 하는데 활용하는 것으로 보인다. 이 과정에서 아무리 높은 사양의 DNS 서버를 써도 가끔씩 서버가 다운되는 것이었다. 이제 이러한 공격을 방어하기 위해서는 AWS의 VPC 네트워크 인터페이스 기능에서 방화벽을 설정해야한다. 물론 네트워크 방화벽에서 할 수도 있겠지만 조금 복잡하더라도 비용이 없는 방법으로 해보고 싶었다. 이제 방화벽의 규칙을 정해보자

  1. 내가 사용하는 IP들의 DNS 접근을 허가해야한다.
  2. 그 외 IP들의 DNS 접근을 막아햐한다.
  3. Docker 업데이트 등 다른 트래픽을 방해하면 안된다.
  4. 아웃바운드 트래픽은 간섭하지않는다.

이와 같은 규칙을 방화벽에 적용해보자!

방화벽 세팅

적용하는 ACL을 꼭 원하는 VPC나 서브넷에 적용했는지 2번 확인해보자! 이제 무작위 대입 공격에서 우리의 DNS 서버를 지켜낼 수 있다!

중요하다고 생각한 내용들

생각보다 pihole이 퍼지면 디스코드,게임서버 연결문제 등등 곤란한 상황이많다. 그래서 다른 IP로 백업용 pihole 구성하는 것도 큰 도움이될 것으로 보인다. 아직은 위의 방법으로 pihole 컨디션을 유지할 수 있어 사용해보진 않았지만 pihole 서버를 하나더 파서 백업용으로 사용하는 것도 괜찮을 것 같다. 설정 공유도 쉽게 되므로 53포트에 여유만 있다면 충분히 좋은 선택지일 것 같다. 다만 아마존내에 VPC,elastic이나 nat 설정이 복잡할 것으로 보인다.

맥락에는 안 맞지만 넷플릭스 영상정보보기 단축키는 영상이 재생중인 상태에서 컨트롤+쉬프트+알트+D다!

참고한 자료들과 같이보기 좋은 자료들