핵심 요약
- 홈서버 서비스를 외부에 통째로 노출하지 않고 지인 공유 링크만 안전하게 열어주는 Caddy 프록시 설정 방식이 소개되었습니다.
- 공유 키 유효성에 따라 403과 401을 다르게 반환하는 백엔드 API 동작을 검증기로 활용해 유효한 요청만 통과시킵니다.
- 비정상적인 접근이나 다른 경로는 Caddy에서 바로 404 처리되므로 내부 서비스 종류조차 노출되지 않아 보안성이 크게 향상됩니다.
요약 개인 홈서버나 자체 구축(Self-hosted) 인프라를 운영할 때 대부분의 서비스는 보안을 위해 VPN 내부망에만 두고 외부 접속을 차단하는 것이 일반적입니다. 하지만 사진 보관 서비스인 Immich나 파일 공유 서비스인 Nextcloud처럼, 외부 지인에게 특정 사진 앨범이나 파일 링크를 공유해야 하는 상황에서는 난감해집니다. 외부인이 링크를 열람하기 위해 일일이 VPN 클라이언트를 설치하거나 계정을 만들 수는 없기 때문입니다. 그렇다고 공유 기능 하나 때문에 로그인 화면과 모든 API 엔드포인트가 열려 있는 전체 서비스를 공용 인터넷에 통째로 노출하는 것은 심각한 보안 위험을 초래합니다.
작성자는 역방향 프록시(Reverse Proxy)인 캐디(Caddy)의 인증 위임 패턴을 응용해 이 문제를 해결하는 방식을 공유했습니다. Caddy에는 특정 요청을 백엔드로 넘기기 전 별도의 인증 서버에 먼저 유효성을 확인하는 forward_auth 기능이 있는데, 작성자는 외부 인증 서버 대신 서비스 자체의 API 응답 특성을 인증 검증기로 활용했습니다. 예컨대 Immich의 경우 유효한 공유 키를 붙여 특정 유저 조회 API(/api/users/me?key=...)를 호출하면 프로필 열람 권한이 없어 403 에러가 반환되지만, 키가 잘못되었거나 만료되었을 때는 401 에러가 반환되는 점에 착안했습니다. 즉, 403 응답이 돌아올 때만 키가 유효하다고 판단해 실제 요청을 백엔드로 프록시하고, 그 외의 경우에는 전부 404를 반환하도록 Caddy의 reverse_proxy와 handle_response 설정을 작성한 것입니다.
이와 함께 외부 공개용 Caddy 사이트 설정에서는 방문자가 자신의 세션 토큰이나 인증 헤더를 임의로 덮어쓰지 못하도록 주요 인증 헤더를 제거하고, 정규식을 통해 공유 페이지 열람 및 관련 에셋 조회에 필요한 극소수의 엔드포인트만 화이트리스트 형태로 허용하도록 구성했습니다. 결과적으로 유효한 공유 링크를 가진 사용자만 해당 콘텐츠를 정상 열람할 수 있으며, 잘못된 키를 입력하거나 허용되지 않은 관리자 페이지/API 경로로 접근하려는 시도는 Caddy 단에서 즉시 404로 차단되어 배후에 어떤 소프트웨어가 구동 중인지조차 파악할 수 없게 만들어 보안을 대폭 끌어올렸습니다.
Sponsored · 광고