인증, 세션 및 서비스 범위
fn-knock의 인증은 게이트웨이 뒤에 있는 서비스를 보호하며 Docker 또는 OpenWrt 관리 패널의 접근 비밀번호와는 다릅니다. 전자는 방문자가 게이트웨이를 통과할 수 있는지를 결정하고, 후자는 관리 화면의 진입점만 보호합니다.
한 번 로그인할 때 거치는 과정
로컬이 아닌 출발지에서 보호된 서비스에 접속하면 일반적으로 다음 단계를 거칩니다.
- 게이트웨이가 매핑 규칙에 따라 서비스에 인증이 필요한지 판단하고, 이미 유효한 출발지 접근 권한이나 현재 Host의 고급 인증 임시 자격 증명이 있는지 확인합니다.
- 다른 허용 경로가 없으면 로그인 페이지에서 활성화된 사람 확인을 수행합니다.
- 설정된 로그인 모드로 본인 인증을 완료합니다.
- 세션을 만들고 세션 설정에 따라 현재 IP에 접근 권한을 부여할지 결정합니다.
- Host 또는 보호된 프로토콜 매핑에 접근할 때 해당 자격 증명의 서비스 범위를 다시 확인합니다.
LAN, 루프백 및 기타 사설망 출발지는 기본적으로 로컬 예외에 해당하므로 위 절차를 모두 거치지 않으며 자격 증명의 서비스 범위도 적용되지 않습니다. 인터넷 환경을 검증할 때는 실제 외부 네트워크를 사용합니다.
로그인 후 복귀가 일시 중지될 때
인증 페이지는 대상이 현재 인증 페이지를 가리키거나, 같은 대상으로 계속 순환하거나, 복귀 주소가 안전하지 않다고 판단하면 자동 이동을 일시 중지하고 안내를 표시합니다. 이때 인증 페이지를 반복해서 새로 고치지 않습니다. 원래 서비스 Host로 돌아가 다시 접속한 뒤 인증 Host, 루트 도메인과 쿠키 범위, 접속 프로토콜, 앞단 프록시가 전달하는 Host, X-Forwarded-Host, X-Forwarded-Proto를 차례로 확인합니다. 엣지 플랫폼은 로그인 또는 리디렉션 응답을 캐시하면 안 됩니다.
로그인 모드
| 모드 | 사용 가능한 방식 | 적합한 환경 |
|---|---|---|
TOTP 로그인 모드 | TOTP, 등록한 경우 패스키, QQ 및 기타 외부 계정 | 개인용, 하드웨어 또는 생체 인식으로 빠르게 로그인해야 하는 환경 |
계정 비밀번호 로그인 모드 | 사용자 이름과 비밀번호 | 여러 사용자가 각자 계정을 사용해야 하는 환경 |
두 모드는 인증 설정에서 전환합니다. 전환하기 전에 필요한 비밀번호 또는 TOTP가 준비되었는지 시스템이 확인합니다. 전환 후에는 비활성화된 방식으로 만든 세션에서 다시 로그인합니다.
전환 작업은 계정 이름, 권한 및 연결된 TOTP를 동기화합니다. 같은 작업을 반복해도 계정이 중복 생성되지 않으며 이미 설정한 비밀번호를 초기화하거나 빠른 로그인 연결을 복제하지도 않습니다. 계정 비밀번호 모드로 전환하기 전에는 동기화될 모든 계정에 비밀번호를 설정합니다. TOTP 모드로 되돌리기 전에는 모든 계정이 현재 존재하는 TOTP와 연결되어 있는지 확인합니다. 전환을 확인하면 비활성화되는 로그인 방식으로 만든 세션은 다음과 같이 폐기됩니다.
| 전환 대상 | 만료되는 세션 |
|---|---|
| 계정 비밀번호 모드 | TOTP, 패스키 및 OIDC 세션 |
| TOTP 모드 | 계정 비밀번호 세션 |
자격 증명과 권한의 관계
- TOTP는 이름을 지정할 수 있는 본인 인증 자격 증명이며 접근 가능한 서브도메인과 프로토콜 매핑 범위를 제한할 수 있습니다. 연결된 패스키, QQ 및 기타 OIDC 로그인도 이 범위를 상속합니다.
- 계정 비밀번호 모드의 계정에도 동일하게 서비스 범위를 설정할 수 있습니다.
- 서비스 범위를
사용자 지정으로 설정하면 권한 창에 보호된 서브도메인, 기본 선택 페이지 및 인증을 켠 TCP / UDP 프로토콜 매핑이 각각 표시됩니다. 아무 범위 항목도 선택하지 않으면 해당 자격 증명으로 보호된 진입점 어디에도 접근할 수 없습니다. 기본 선택 페이지/__select__도 별도로 선택해야 합니다. 로그인 필요가 설정된 Host는 유효한 수동 출발지 접근 권한으로 독립적으로 허용할 수 있습니다. 로그인 후 자동 생성되는 IP 접근 권한은 일반적으로 같은 출발지에서 계속 접근할 수 있게 합니다. 다만 브라우저에 이미 적용된 서비스 범위 거부를 자동 접근 권한이 덮어쓰지는 않습니다. 사용할 수 있는 출발지 접근 권한이 없을 때만 게이트웨이가 세션과 자격 증명 범위를 계속 판단합니다.- 로그인 후 자동 IP 접근 권한은
시스템 설정 → 세션에서 제어합니다. 이는 출발지 IP를 허용하는 경로이지 자격 증명의 범위를 제어하는 기능이 아닙니다. 수동 허용 목록을 지나치게 넓게 설정하면 해당 출발지에서는 브라우저로 로그인하지 않아도 보호된 Host에 바로 접근할 수 있습니다. - 서비스 범위가 제한된 로그인 자격 증명은 출발지 IP가 자격 증명 범위를 넓히지 않도록 모든 Host나 원본 포트를 허용하는 일반 자동 IP 접근 권한을 만들지 않습니다. 제한된 TOTP와 연결된 패스키 / OIDC, 서비스 범위가 제한된 계정 비밀번호 계정이 모두 여기에 해당하며, 직접 연결 모드에서 자동으로 접근을 허용하는 자격 증명으로 사용하기에는 적합하지 않습니다.
- 다만 사용자 지정 범위에서 특정 프로토콜 매핑을 선택할 수 있습니다. 로그인 후 IP 접근 허용을 끄지 않았다면 시스템은 정확한
TCP/UDP + 외부 포트와 현재 출발지 IP에 대해서만 범위 내 접근 권한을 만듭니다. 유효 기간은 세션 설정을 따르며 선택하지 않은 프로토콜 매핑을 허용하거나 일반 IP 허용 목록으로 바뀌지 않습니다.
관리 패널 비밀번호는 게이트웨이 로그인이 아님
Docker, OpenWrt 등의 배포 방식에서는 먼저 관리 패널 비밀번호를 설정합니다. 이 비밀번호는 7991 관리 엔드포인트를 보호할 뿐, 방문자가 게이트웨이 서비스에 로그인할 때 사용하는 계정으로 자동 등록되지 않으며 TOTP 또는 계정 비밀번호 인증을 대신하지도 않습니다.
별도의 패널 비밀번호를 사용하는 플랫폼에서 fn-knock 관리 패널을 서브도메인 매핑에 추가하면 인증 목록에 관리 패널 권한이 표시됩니다. 특정 TOTP 또는 계정에 이 권한을 켜면 해당 사용자는 보호된 서브도메인을 통해 관리 패널에 접근할 때 패널 비밀번호를 다시 입력하지 않아도 됩니다. 이 권한은 원본 7991 포트를 공개하지 않으며 선택하지 않은 서비스 Host에 대한 권한도 부여하지 않습니다.
자격 증명 가져오기 및 내보내기
인증 설정 → 더보기 → 자격 증명 가져오기/내보내기는 현재 로그인 모드에 따라 다음 항목을 처리합니다.
| 현재 모드 | 내보내는 내용 |
|---|---|
| TOTP | TOTP 비밀 키, 이름 및 권한 |
| 계정 비밀번호 | 계정, 비밀번호 해시, 권한 및 연결된 TOTP 비밀 키 |
가져오기에는 JSON 형식만 허용하며 관리 페이지에서 허용하는 최대 크기는 512 KB입니다. 가져오기는 인식할 수 있는 레코드를 병합하고 같은 ID, 사용자 이름, 비밀 키 또는 파일 내부의 중복 항목은 건너뜁니다. 패스키와 외부 계정 연결은 복원하지 않습니다. 내보낸 내용만으로도 로그인할 수 있으므로 .knock 시스템 백업과 같은 수준으로 보호합니다.
고급 인증은 로그인 방식이 아님
서브도메인 고급 인증은 요청이 출발지, 경로, 헤더, 쿼리 또는 HTTP 메서드 규칙과 일치할 때 현재 Host에만 유효한 임시 자격 증명을 발급합니다. 시스템 로그인 세션이나 로그인 후 IP 접근 권한을 만들지 않으며 TOTP, 패스키, OIDC 및 계정 비밀번호의 서비스 범위를 상속하거나 변경하지도 않습니다.
고급 인증은 독립된 허용 경로입니다. 현재 브라우저 세션의 서비스 범위에 해당 Host가 포함되지 않아도 요청이 고급 인증 규칙을 충족하면 현재 Host에 대한 임시 접근 권한을 받을 수 있습니다. 따라서 기존 자격 증명에 “검증 단계를 하나 더 추가”하는 용도로 사용하면 안 됩니다. 자격 증명의 범위를 좁히려면 해당 자격 증명의 서비스 범위를 직접 수정합니다. 규칙 설정 방법은 서브도메인 고급 인증을 참고합니다.
권장 설정 순서
- 주 로그인 방식 하나를 설정하고 예비 자격 증명을 하나 이상 준비합니다.
- 격리가 필요한 사람 또는 기기마다 별도의 자격 증명을 만듭니다.
- 자격 증명별로 접근 가능한 서브도메인 범위를 설정합니다.
- 자주 사용하는 기기에 패스키, QQ 또는 기타 외부 계정 로그인을 연결합니다.
- 마지막으로 세션 유효 시간,
로그인 상태 유지, 로그인 후 IP 접근 권한 정책을 조정합니다.
