DNSnitch
고지 사항
이 도구는 제가 직접 사용하려고 만든 것이며, 필요하다면 다른 분도 사용할 수 있도록 공개해 둔 것입니다. 버그를 발견하면 이슈를 열어 주세요!
인터랙티브 터미널 DNS 방화벽
DNSnitch는 네트워크 트래픽을 완전히 제어할 수 있게 해주는 로컬, 프라이버시 우선 DNS 서버입니다. 수동적인 차단 목록과 달리 DNSnitch는 "Default Deny" 철학을 따릅니다. 즉, 실시간 터미널 대시보드에서 승인하기 전까지 모든 알 수 없는 도메인은 기본적으로 차단됩니다.
주요 기능
- 실시간 차단: 로컬에서 실행되며(포트 5353, 설정 가능) 시스템에서 나가는 모든 DNS 요청을 포착합니다.
- Default Deny 정책: 알 수 없는 도메인은 즉시
NXDOMAIN을 반환하고 "보류 대기열(Pending Queue)"에 표시됩니다.
- 4단계 권한 시스템:
- PERMANENT: 영구적으로 허용 목록에 추가합니다.
- TEMPORARY: 5분 동안 허용합니다(자동 만료, 설정 가능).
- ONCE: 정확히 한 번의 DNS 요청만 허용합니다(캡티브 포털이나 1회성 로그인에 유용).
- BLOCK: 도메인을 명시적으로 블랙리스트에 등록하여 다시 묻지 않도록 합니다.
- 단계적 워크플로: 변경 사항은 작업 영역에 "스테이징"되며
Apply할 때만 활성화됩니다.
- 트래픽 기록: 트래픽을 허용하면서 고유 도메인을 기록 목록에 저장하는 모드로 전환합니다.
- DNS 리디렉션: 도메인을 특정 IP(로컬 개발)나 다른 도메인(CNAME)으로 즉시 매핑합니다.
- 라이브 TUI 대시보드: Ncurses로 구축된 마우스 없는 다중 탭 인터페이스입니다.
- Console: 명령 기록 및 색상 피드백.
- Monitor: 활성 규칙의 4열 라이브 뷰.
- Queue: 차단된 요청의 대화형 목록.
- Logs: 원시 DNS 쿼리 실시간 스크롤.
- Redirections: 현재 적용 중인 리디렉션 미리보기.
- Records: 기록된 도메인 이름 요청 표시.
인터페이스
F-키를 사용하여 대시보드를 탐색합니다:
- [F1] CONSOLE: 기본 명령 센터. 여기에 명령을 입력합니다.
PgUp/PgDn으로 기록을 스크롤합니다.
- [F2] MONITOR: 규칙의 실시간 개요.
- 컨트롤:
Left/Right 화살표로 열(Temp, Once, Perm, Blocked)을 강조하고, Up/Down으로 해당 열을 스크롤합니다.
- [F3] QUEUE: 차단된 도메인의 "받은 편지함".
- 표시:
> 는 선택, * 는 스테이징된 변경 사항을 나타냅니다.
- [F4] LOGS: 엔진이 처리한 모든 요청의 원시 스트림.
- [F5] REDIRECTS: 사용자 정의 A/CNAME 레코드 관리.
- [F6] RECORDS: "Record Mode"에서 캡처된 도메인을 확인합니다.
명령 참조
DNSnitch는 키보드 기반으로 작동합니다. 아래는 콘솔 **[F1]**에서 사용 가능한 전체 명령 목록입니다.
선택 및 대기열 관리
작업을 적용하기 전에 대상을 선택해야 합니다. 보류 중인 요청은 ID로, 수동으로는 도메인 이름으로 선택할 수 있습니다.
작업 (스테이징)
도메인이 선택되면 다음 단축키로 상태를 설정합니다.
워크플로 (변경 사항 적용)
변경 사항은 적용하기 전까지 활성화되지 않습니다.
모드 및 기록
방화벽이 전체적으로 동작하는 방식을 변경합니다.
리디렉션
도메인을 사용자 정의 대상으로 매핑합니다(로컬 DNS 스푸핑).
시스템
사용 시나리오
1. 표준 워크플로 (사이트 차단 해제)
example.com에 접속을 시도합니다. 실패합니다.
- F3(대기열)을 누릅니다.
1. example.com이 보입니다.
s 1을 입력합니다. (행이 강조됩니다).
p를 입력합니다. (행에 [PERM]이 표시됩니다).
a를 입력합니다. (적용).
- 브라우저를 새로고침합니다. 정상 동작합니다.
2. 규칙 수정 (실수로 차단한 것 해제)
- 실수로
google.com을 차단했습니다.
s google.com을 입력합니다.
rm(제거) 또는 p(영구 허용)를 입력하여 차단을 덮어씁니다.
a를 입력합니다.
3. 로컬 개발
- 사이트를 개발 중이고
mysite.local로 접속하려고 합니다.
- F5를 누릅니다.
r mysite.local 127.0.0.1을 입력합니다.
- 이제 시스템이 해당 도메인을 localhost로 해석합니다.
4. 앱 감사 (Record Mode)
- 새 앱을 설치했고, 앱을 중단하지 않고 어떤 대상에 연결하는지 확인하려고 합니다.
m rec을 입력합니다(모드: Record).
- 앱을 5분간 사용합니다.
- F6을 누릅니다.
- 목록을 검토합니다.
m dft를 입력하여 보안 모드로 돌아갑니다.