프로젝트 소개
Domain Check는 ICANN이 WHOIS의 후속으로 지정한 RDAP를 사용하여 레지스트리 RDAP 서버를 직접 쿼리하는 권위 있는 도메인 가용성 확인 도구입니다. README에 따르면 RDAP는 구조화된 JSON과 HTTPS를 사용하는 반면, WHOIS는 텍스트 기반 TCP 43번 포트를 사용하며 .dev 및 .app 지원이 부족하고 파싱이 까다로운 레지스트리별 텍스트를 반환합니다. 프로젝트 테스트 결과, whois는 등록된 도메인을 가용 상태로 보고한 사례가 있었으나 RDAP는 모든 테스트 케이스에서 정확했으며, 이에 대한 정확도 비교 연구 문서가 링크되어 있습니다.
인터페이스. 이 프로젝트는 세 가지 쿼리 방법을 제공합니다. 웹 UI는 가입 없이 사용할 수 있는 양식을 제공합니다. REST API는 /api/v1/ 경로에서 제공되며, 단일 도메인 확인, 쉼표로 구분된 tlds 파라미터를 사용하는 다중 TLD 확인, 최대 50개 도메인(바디 제한 64KB)을 처리하는 대량 POST 엔드포인트 및 상태 확인(health) 엔드포인트를 지원합니다. API 응답은 JSON 형식으로 도메인, 가용성, TLD, 확인 타임스탬프, 데이터 소스, 캐시 상태 및 소요 시간을 보고하며, 등록된 도메인의 경우 등록처, 생성 및 만료일, 네임서버 및 상태 코드를 포함합니다. CLI는 check 및 bulk 서브커맨드, 다중 TLD 확인, JSON 또는 CSV 출력, 대량 실행 시 진행 표시줄, 구성 가능한 동시성 및 문서화된 종료 코드(모두 가용 시 0, 하나라도 등록됨 시 1, 오류 시 2)를 제공합니다.
도메인 감시(Domain Watch). enable-watch 플래그로 활성화되는 선택적 기능으로, 감시 대상 도메인을 폴링하여 등록 상태에서 가용 상태로 전환될 때 웹훅을 전송합니다. 감시 등록 시 id, 웹훅 URL 및 HMAC 비밀키가 반환됩니다. 전송 시에는 수신자가 비밀키로 검증할 수 있는 sha256 접두사 서명이 포함된 X-DomainCheck-Signature 헤더가 포함됩니다. 감시는 일회성으로 90일 후 만료되며, IP당 24시간 내 10개로 제한되고 기본 폴링 간격은 15분입니다. 또한 SSRF 보호, 사설 IP 차단 및 DNS 리바인딩 방지 기능이 포함되어 있으며, 도메인과 웹훅 URL만 저장됩니다.
속도 제한은 IP별로 적용됩니다. 웹 UI는 분당 10회, 단일 확인 API는 60회, 대량 확인 API는 5회로 제한되며, 초과 요청 시 429 상태 코드와 Retry-After 헤더를 반환합니다.
셀프 호스팅 및 설정. Domain Check는 런타임 의존성이 없는 단일 Go 바이너리 또는 Docker 이미지로 제공됩니다. 소스 빌드에는 Go 1.26 이상이 필요합니다. 템플릿과 정적 자산은 바이너리에 내장되어 있습니다. 설정은 플래그, DOMCHECK_ 환경 변수, 또는 YAML 설정 파일로 지정할 수 있으며, 우선순위는 플래그 > 환경 변수 > 설정 파일 > 기본값 순입니다. 문서화된 파라미터에는 리슨 주소, LRU 캐시 크기 및 가용/등록 결과에 대한 개별 캐시 TTL, IANA RDAP 부트스트랩 갱신 간격, X-Forwarded-For 처리를 위한 trust-proxy, CORS 오리진, Prometheus 메트릭 엔드포인트, 로그 형식 및 레벨, 감시 데이터베이스 경로, 폴링 간격, 최대 TTL 및 IP당 감시 제한 등이 포함됩니다. Caddy 및 nginx를 위한 리버스 프록시 예제도 제공됩니다.
아키텍처. 코드는 커맨드 진입점과 내부 패키지로 구성됩니다. 내부 패키지에는 확인 엔진(RDAP 클라이언트, WHOIS 폴백, DNS 사전 필터, IANA 부트스트랩 로더, LRU 캐시, SSRF 가드, 레지스트리별 속도 제한), 계층형 설정, IDN-to-punycode 및 publicsuffix TLD 추출을 포함한 도메인 검증, HTTP 서버 및 핸들러, CLI가 포함됩니다. README에 설명된 요청 흐름은 검증 -> 캐시 조회 -> 명백히 등록된 이름을 빠르게 걸러내는 DNS 사전 필터 -> 레지스트리별 속도 제한 -> RDAP 쿼리 -> 파싱 -> 캐시 저장 -> JSON 응답 순입니다. 기본 캐시 TTL은 가용 결과 5분, 등록 결과 1시간, 오류 30초입니다.
보안 및 유지관리. README에는 SSRF 보호, 보안 헤더(CSP, X-Frame-Options, X-Content-Type-Options, Referrer-Policy), 비루트(non-root) Docker 사용자 및 분석 도구, 쿠키, 데이터 보관이 없는 제로 트래킹 정책이 명시되어 있습니다. 개발에는 go test, 퍼즈 테스트(fuzz testing) 및 golangci-lint가 사용되며, 저장소에는 공격적인 자동 git 가비지 컬렉션 설정이 적용되어 있습니다. 이 프로젝트는 MIT 라이선스이며, 셀프 호스팅 git 인스턴스의 읽기 전용 GitHub 미러로 설명되어 있으며 끝부분에 미러 테스트 노트가 포함되어 있습니다.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.