서비스 검색 및 일괄 등록
서비스 검색은 fn-knock가 접근할 수 있는 로컬 IPv4 네트워크 대역에서 HTTP 서비스를 찾아 확인 대기 중인 서브도메인 매핑이나 경로 매핑으로 변환합니다. 인터넷을 스캔하지 않으며 열린 포트를 찾았다고 해서 서비스를 자동으로 공개하지도 않습니다.
메뉴 및 사전 조건
서비스 검색은 별도 메뉴가 아니며 다음 위치에서 실행합니다.
서브도메인 매핑 → 서비스 검색: 루트 도메인을 먼저 저장해야 하며 검색 결과로 서비스 Host를 생성합니다.경로 매핑 → 서비스 검색:리버스 프록시 모드 → 경로 모드에서만 표시되며 검색 결과로 경로 규칙을 생성합니다.
서브도메인 매핑에서 루트 도메인을 아직 저장하지 않았거나 페이지에 저장하지 않은 변경 사항이 있으면 검색을 시작할 수 없습니다. 검색은 fn-knock 실행 환경에서 대상에 연결할 수 있는지만 확인합니다. Docker의 네트워크 관점은 호스트와 다르므로 호스트 서비스에는 컨테이너 네트워크에서 접근 가능한 주소를 사용합니다.
스캔 대상
서비스 검색을 열면 스캔 대상 설정을 펼칠 수 있습니다. 기본 대상은 현재 실행 환경에서 가져옵니다.
| 출처 | 설명 |
|---|---|
| 루프백 | Docker 이외의 배포에서 127.0.0.1/32 사용 |
| Docker 호스트 | Docker 배포에서 관리 진입점을 기준으로 접근 가능한 호스트 네트워크 대역 식별 |
| 네트워크 인터페이스 | 현재 환경에서 스캔이 허용된 로컬 IPv4 인터페이스의 네트워크 대역 |
| 기존 매핑 | 기존 서브도메인 또는 경로 매핑의 대상(타깃)에서 추론 |
| 사용자 지정 | 관리자가 직접 추가하고 저장한 CIDR |
| 저장됨 | 이전에 저장했으며 현재도 스캔 범위로 사용하는 CIDR |
다음 범위에 완전히 포함되는 IPv4 CIDR만 사용할 수 있습니다.
- 루프백
127.0.0.0/8 - RFC 1918 사설망
10.0.0.0/8,172.16.0.0/12,192.168.0.0/16 - CGNAT
100.64.0.0/10 - 링크 로컬
169.254.0.0/16
한 번에 CIDR을 최대 16개 선택할 수 있으며 중복 제거 후 전체 호스트는 최대 1024대입니다. 큰 네트워크 대역을 입력할 때는 시스템이 검색 결과를 잘라 내도록 두지 말고 더 좁은 CIDR로 나눕니다.
“자동 사용”을 선택하면 현재 자동 대상에 다시 맞춰집니다. CIDR을 직접 선택하거나 선택 해제 또는 추가한 뒤에는 저장합니다. 바로 스캔을 시작해도 페이지에서 먼저 현재 범위 저장을 시도합니다. 대상은 하나 이상 남깁니다.
스캔 범위 및 강도
각 대상 호스트에서 80–60000번 포트를 검사하지만 fn-knock 자체 포트와 알려진 내부 서비스 포트는 건너뜁니다. 로컬 호스트를 스캔할 때는 자체 탐색을 유발하기 쉬운 포트도 추가로 제외합니다. 열린 TCP 포트를 찾으면 시스템에서 HTTP 요청을 보내 서비스를 식별합니다. HTTP가 아닌 포트가 열려 있기만 한 경우에는 후보 매핑을 만들지 않습니다.
스캔 강도는 기기 권장 설정을 따르거나 직접 선택할 수 있습니다.
| 단계 | 목표 동시 실행 수 |
|---|---|
| 낮음 | 32 |
| 중간 | 115 |
| 높음 | 256 |
| 매우 높음 | 512 |
실제 동시 실행 수가 표의 값에 무조건 도달하는 것은 아닙니다. 시스템은 CPU 코어, 사용 가능한 메모리, 파일 디스크립터 한도 및 컨테이너 자원 제한을 기준으로 안전 상한도 계산한 뒤 둘 중 작은 값을 사용합니다. 자동 모드는 기본으로 활성화되며 기기 성능이 바뀌면 단계를 다시 추천합니다.
단계는 소요 시간과 기기 부하에만 영향을 주며 CIDR, 포트 범위 또는 식별 규칙은 바꾸지 않습니다. NAS, 라우터 및 메모리가 적은 기기에서는 자동 또는 낮음 강도를 우선 유지합니다. 동시 실행 수를 높여도 여전히 느리다면 단계가 적용되지 않은 것이 아니라 스캔 범위가 너무 넓은 경우가 많습니다.
식별 결과
스캔 창에는 호스트, 포트, 진행 상황 및 식별된 서비스가 계속 표시됩니다. 시스템은 HTTP 상태, 응답 헤더 및 페이지 특성을 바탕으로 일반적인 애플리케이션을 식별합니다. 정확히 식별할 수 없으면 페이지 제목 또는 HTTP + 포트로 일반 후보를 만듭니다.
후보 값은 권장 사항일 뿐입니다.
- 서브도메인 모드에서는 서브도메인 이름을 제안하고 기본적으로 로그인 필요, WAF 활성화 및 업스트림 Host 유지 옵션이 적용된 매핑을 만듭니다.
- 경로 모드에서는 경로, HTML 다시 작성 여부, 루트 모드 사용 여부 및 기본 라우트 지정 여부를 제안합니다.
- 업스트림 Basic Auth가 감지되면 위험만 안내하고 사용자 이름과 비밀번호는 자동으로 저장하지 않습니다.
- 같은 대상(타깃), Host, 경로 또는 중복 후보가 이미 있으면 페이지에서 필터링하거나 일괄 저장을 거부합니다.
저장 전에 각 후보 이름과 대상(타깃)을 확인합니다. 일반 식별 기능은 애플리케이션의 실제 기본 경로, 콜백 URL, WebSocket, 쿠키 또는 신뢰 프록시 요구 사항을 알 수 없습니다. 일괄 추가에 성공했더라도 인터넷 접근이 가능하다는 뜻은 아닙니다.
스캔을 중지하거나 창을 닫으면 현재 작업이 취소됩니다. 표시된 후보는 일괄 저장을 클릭해야 설정에 추가됩니다.
권장 작업 순서
- fn-knock 실행 환경에서 대상 IP와 포트에 접근할 수 있는지 먼저 확인합니다.
- 루트 도메인을 저장하거나 올바른 경로 모드로 전환합니다.
- 서비스 검색을 열고 설정을 펼쳐 CIDR을 실제 기기의 네트워크 대역으로 좁힙니다.
- 자원이 부족하면 자동 또는 낮음 강도를 유지한 채 스캔을 시작합니다.
- 공개할 필요가 없는 후보는 선택 해제하고 충돌하거나 의미가 불분명한 서브도메인 이름과 경로를 수정합니다.
- 일괄 저장한 뒤 각 항목의 인증, WAF, 대상(타깃) 및 라우팅 옵션을 확인합니다.
- LAN에서 업스트림을 먼저 확인한 뒤 모바일 네트워크에서 외부 DNS, 터널, 인증서 및 로그인을 확인합니다.
- 요청 로그에서 Host, 출발지 IP, 라우트 및 업스트림 상태를 확인합니다.
자주 묻는 문제
호스트 서비스를 찾지 못함
Docker에서 127.0.0.1은 컨테이너 자체입니다. 서비스가 호스트의 루프백 주소에서만 수신 대기하지 않는지 확인하고 컨테이너에서 접근할 수 있는 호스트 주소를 사용합니다. Docker 네트워크, 방화벽 및 서비스의 수신 대기 범위도 함께 확인합니다.
Docker 이외의 배포에서는 대상이 허용된 로컬 IPv4 범위 안에 있는지도 확인합니다. IPv6, 도메인 및 공인 주소는 검색 CIDR로 사용할 수 없지만 검색이 끝난 뒤 유효한 대상(타깃)을 직접 만들 수는 있습니다.
포트를 찾았지만 후보가 없음
서비스 검색은 HTTP로 분석할 수 있는 후보만 만듭니다. TCP, UDP, TLS 전용 또는 특수한 핸드셰이크가 필요한 서비스는 포트만 열려 있고 결과는 없을 수 있습니다. HTTP 서비스가 평문 요청을 HTTPS 전용 포트로 강제로 보내는 경우에도 검색에서 제외될 수 있습니다. 이때는 매핑을 직접 추가하고 프로토콜을 확인합니다.
스캔 시간이 너무 길거나 기기 부하가 높음
먼저 CIDR과 호스트 수를 줄인 뒤 강도를 낮춥니다. 스캔에서는 최대 1024 × 59921개의 포트를 검사할 수 있으므로 목표 범위가 동시 실행 단계보다 전체 작업량에 더 큰 영향을 줍니다. 창을 닫으면 작업을 취소할 수 있지만 이미 보낸 일부 네트워크 탐색은 시간 초과까지 기다려야 할 수 있습니다.
후보 서비스가 중복되거나 포트가 예상과 다름
같은 애플리케이션이 여러 포트에서 비슷한 페이지를 반환할 수 있습니다. 시스템은 식별 키를 기준으로 일부 결과를 병합하지만 실제 진입점을 관리자 대신 판단할 수는 없습니다. 업스트림이 정식으로 수신 대기하는 포트만 남기고 상태 확인 포트, 리디렉션 포트 또는 다른 매핑이 이미 처리하는 후보는 삭제합니다.
