에피소드 6: 외부에서 로컬 AI에 안전하게 접근하기 대표 이미지

에피소드 6: 외부에서 로컬 AI에 안전하게 접근하기

집이나 사무실의 로컬 AI 서버를 외부에서 접근할 때 필요한 도메인, DNS, HTTPS, reverse proxy, 인증, 로그 관리 원칙을 보안 중심으로 정리합니다.

지금까지는 모두 내 컴퓨터 안에서만 썼습니다. OpenWebUI도 localhost, n8n도 localhost, Ollama도 localhost였습니다.

이제 자연스럽게 이런 생각이 듭니다.

"밖에서도 접속하면 편하지 않을까?"

맞습니다. 편합니다. 카페에서 내 OpenWebUI를 열고, 휴대폰에서 n8n webhook을 호출하고, 집 NAS의 AI 서버를 업무 중에도 쓰면 훨씬 강력합니다.

하지만 이 편은 편리함보다 보안이 먼저입니다.

외부 접속은 문을 여는 작업입니다. 문을 열면 나도 들어갈 수 있지만, 남도 문을 볼 수 있습니다.

1. 먼저 하지 말아야 할 것

AI 로컬서버 가이드 ep06 본문 설명 이미지
외부 공개 전에 계정, 권한, 네트워크 경계를 먼저 확인해야 하는 지점을 모읍니다.

아래는 초보자가 가장 많이 하는 위험한 행동입니다.

  • 공유기에서 OpenWebUI 포트를 바로 인터넷에 열기
  • n8n을 인증 없이 외부에 공개하기
  • HTTP로 로그인하기
  • Telegram, Discord, Cloudflare token을 글이나 스크린샷에 노출하기
  • 기본 관리자 계정과 약한 비밀번호 쓰기
  • 로그와 백업에 credential이 남는지 확인하지 않기

이 중 하나라도 해당하면 외부 접속을 멈추고 먼저 보안을 정리해야 합니다.

2. 외부 접속의 기본 구조

안전한 외부 접근은 대략 이런 구조를 목표로 합니다.

사용자 브라우저
  -> HTTPS 도메인
    -> reverse proxy
      -> 내부 OpenWebUI 또는 n8n

핵심은 세 가지입니다.

  1. 외부에는 HTTPS로만 보입니다.
  2. 내부 서비스는 직접 노출하지 않습니다.
  3. 인증과 로그를 반드시 둡니다.

3. 도메인과 DNS

AI 로컬서버 가이드 ep06 본문 설명 이미지
도메인, HTTPS, reverse proxy가 내부 서비스 앞에 서는 기본 구조입니다.

외부에서 접속하려면 사람이 기억할 주소가 필요합니다. 예를 들어 ai.example.com 같은 서브도메인입니다.

Cloudflare 같은 DNS 서비스를 쓰면 도메인 record를 관리할 수 있습니다. 집이나 사무실 IP가 바뀌는 환경이라면 DDNS 또는 DNS record 업데이트 자동화가 필요할 수 있습니다.

공개 글에서는 실제 도메인과 IP를 쓰지 않습니다.

예시 도메인: ai.example.com
예시 공인 IP: 192.0.2.10
예시 내부 IP: <NAS_LOCAL_IP>

192.0.2.0/24는 문서 예시용으로 예약된 범위입니다. 실제 서버 주소가 아닙니다.

Cloudflare API를 쓸 때도 실제 token을 글에 쓰지 않습니다.

Authorization: Bearer <CLOUDFLARE_API_TOKEN>

또 하나 중요한 변화가 있습니다. Cloudflare는 오래된 Service Key 방식보다 API Token 사용을 권장하는 방향입니다. API Token은 권한 범위를 좁히고 만료/제한을 둘 수 있어야 합니다.

4. HTTPS는 선택이 아니다

외부에서 로그인하는 서비스는 HTTPS가 기본입니다. HTTP로 아이디와 비밀번호를 보내는 구조는 피해야 합니다.

Let's Encrypt는 무료 자동 인증서를 제공하는 대표적인 인증 기관입니다. Certbot 같은 ACME client를 사용해 인증서를 발급하고 갱신할 수 있습니다.

하지만 HTTPS 인증서만으로 보안이 끝나는 것은 아닙니다.

  • 인증서
  • 강한 비밀번호
  • 접근 제한
  • 업데이트
  • 로그 확인
  • 백업

이것이 함께 가야 합니다.

5. reverse proxy

AI 로컬서버 가이드 ep06 본문 설명 이미지
토큰과 API 키가 로그나 화면에 남지 않도록 분리해야 하는 이유를 보여줍니다.

reverse proxy는 외부 요청을 받아 내부 서비스로 넘겨주는 앞문입니다.

예를 들어 외부에서는 https://ai.example.com으로 접속하지만, 내부에서는 OpenWebUI 컨테이너의 8080 포트로 전달됩니다.

이 구조가 좋은 이유는 다음과 같습니다.

  • HTTPS 처리를 한 곳에서 관리할 수 있습니다.
  • 내부 서비스 포트를 직접 공개하지 않아도 됩니다.
  • 인증, rate limit, 로그를 앞단에서 관리할 수 있습니다.
  • 나중에 여러 서비스를 서브도메인으로 나누기 쉽습니다.

초보자에게 가장 위험한 방식은 내부 서비스 포트를 그대로 공유기에서 열어버리는 것입니다.

6. n8n과 OpenWebUI를 외부 공개할 때의 차이

OpenWebUI는 사람이 로그인해서 쓰는 화면입니다. n8n은 자동화 엔진입니다. 둘 다 중요하지만 n8n은 특히 조심해야 합니다.

n8n에는 여러 서비스 credential이 들어갈 수 있습니다. Gmail, Slack, Telegram, WordPress 같은 credential이 n8n에 저장될 수 있습니다. n8n이 뚫리면 단순 채팅 기록보다 더 큰 문제가 생깁니다.

그래서 n8n은 외부 공개 전에 다음을 확인해야 합니다.

  • 관리자 계정 보호
  • webhook URL 노출 범위
  • credential 저장 위치
  • workflow 실행 권한
  • 로그에 민감 정보가 남는지
  • 백업 파일 암호화 또는 접근 제한

7. Telegram/Discord 봇은 나중에

AI 로컬서버 가이드 ep06 본문 설명 이미지
외부 접속 실험 뒤에는 로그와 되돌리기 경로까지 같이 확인해야 합니다.

Telegram이나 Discord 봇을 붙이면 편합니다. 휴대폰에서 메시지를 보내고 로컬 AI 답을 받을 수 있습니다.

하지만 bot token은 비밀번호와 비슷하게 다뤄야 합니다.

공개 글에는 절대 이렇게 쓰면 안 됩니다.

123456:ABCDEF...

반드시 이렇게 씁니다.

<YOUR_TELEGRAM_BOT_TOKEN>

실제 token은 n8n credential 또는 승인된 secret source에만 넣습니다.

8. 외부 접근 전 체크리스트

아래 항목을 통과하지 못하면 아직 외부 공개 단계가 아닙니다.

  • HTTPS가 적용되어 있다.
  • 관리자 비밀번호가 길고 고유하다.
  • 기본 계정이 없다.
  • 서비스가 최신 버전이다.
  • 외부에 열 포트가 최소화되어 있다.
  • 로그를 볼 수 있다.
  • 백업을 만들 수 있다.
  • token과 password가 문서/스크린샷에 없다.
  • 문제가 생기면 즉시 포트를 닫을 수 있다.

9. 다음 편 예고

외부 접근까지 생각하면 PC를 매일 켜두는 문제가 생깁니다.

그래서 다음 편에서는 NAS로 넘어갑니다. Synology NAS나 비슷한 24시간 장비에서 Docker 컨테이너로 Ollama, OpenWebUI, n8n을 안정적으로 운영하는 구조를 다룹니다.

다음 글: 에피소드 7: NAS에 24시간 AI 서버 구축

참고한 공식 문서

  • Cloudflare DNS Records: https://developers.cloudflare.com/dns/manage-dns-records/
  • Cloudflare DNS API: https://developers.cloudflare.com/api/resources/dns/
  • Cloudflare API Deprecations: https://developers.cloudflare.com/fundamentals/api/reference/deprecations/
  • Let's Encrypt Documentation: https://letsencrypt.org/docs/
  • Certbot Instructions: https://certbot.eff.org/instructions

댓글 달기

위로 스크롤