Post

라즈베리파이 서버 구축기: Cloudflare Tunnel + Zero Trust + ttyd 완성까지 요약본...

라즈베리파이 서버 구축기: Cloudflare Tunnel + Zero Trust + ttyd 완성까지 요약본...

📅 프로젝트 개요

오늘의 목표는 라즈베리파이를 기반으로 24시간 돌아가는 원격 개발 환경을 구축하는 것이었다. 보안, 접근성, 자동화를 모두 만족하는 서버 구조를 직접 설계하고 구현했다. 결과적으로 Cloudflare Tunnel + Zero Trust + ttyd(Web Terminal) 조합으로 완성된 환경을 만들었다.


🔧 서버 및 환경 세팅

  • Raspberry Pi OS (Lite) 기반의 서버 환경
  • ttyd (Web Terminal) 설치 및 systemd 서비스 등록 시도

    • 실행 명령:

      1
      
      ExecStart=/home/<REDACTED_USER>/ttyd -p 3000 --check-origin --writable --credential <REDACTED_USER>:<REDACTED_PASS> /usr/bin/bash
      
    • Restart=always 옵션으로 재시작 자동화
    • 초기 오류 (status=203/EXEC) 발생 → 실행 경로 및 권한 문제 확인 중

🌐 네트워크 및 보안 설정

  • Cloudflare Tunnel을 통해 외부 접근 가능하도록 구성

    • 로컬 ttyd를 HTTPS로 터널링
    • Zero Trust 인증 + GitHub 로그인 연동
    • .dev 도메인 구입 후 HTTPS 활성화
    • Zero Trust Access 정책 적용, 외부 접근 완벽 차단

🧱 보안 강화 전략

  • --credential 옵션으로 기본 계정/비밀번호 인증
  • --check-origin 활성화로 CSRF 방어
  • Cloudflare Zero Trust + GitHub OAuth로 다중 인증 체계 구축
  • root 권한 최소화, 일반 사용자 계정 중심 운영

⚙️ 시스템 유지보수

  • systemctl daemon-reload 오류 처리 및 서비스 재시작 테스트
  • sudo 권한 및 실행 경로 점검
  • 재부팅 후 ttyd 자동 실행 확인 예정

🧩 실험 및 테스트

  • tmux 세션 분리 / 중첩 테스트
  • Cloudflare 무료 플랜의 접속 제한, 도메인 의존성 확인
  • LAN IP 구조 (<REDACTED_LOCAL_NET>) 재학습 — 서브넷, 게이트웨이 이해도 향상

📜 하루 요약

오늘은 Pi 서버의 보안형 원격 개발 환경이 완성된 날이었다. Cloudflare Tunnel과 Zero Trust 인증을 엮어서 외부 접근을 통제했고, ttyd를 systemd 서비스로 등록해 자동화되고 지속적인 CLI 환경을 구축했다. 다음 목표는 203/EXEC 실행 오류 해결재부팅 후 자동 복구 안정화다.


🧠 현장 일지

1️⃣ 라즈베리파이 OS 굽기

SSH가 기본적으로 꺼져 있어서 /boot/ssh 파일을 수동으로 만들어 부팅 시 자동으로 SSH가 켜지게 수정함.

2️⃣ ttyd로 내 bash를 띄우기

Node.js 기반 웹터미널을 시도했지만 렌더링이 엉망이라 포기하고, 가볍고 단순한 ttyd로 전환. 보안상 취약점을 우려했지만 추후 Cloudflare로 보강하기로 결정.

3️⃣ Cloudflare Tunnel 구성

임시 서버로 터널링 테스트 중 도메인 고정 불가 및 Zero Trust 설정 미적용 문제 발견. 해결책: 도메인을 직접 구매하고 Tunnel을 정식 등록.

4️⃣ Squarespace + Cloudflare 연동

.dev 도메인을 Squarespace에서 구입하고 Cloudflare DNS로 넘기는 과정에서 연결 지연 발생. config.json 직접 수정으로 해결.

5️⃣ systemd 서비스 구성

부팅 시 자동 실행을 위해 ttyd.service 작성. 처음엔 bashrc에서 실행하려 했으나, 로그인 세션 한정이라 실패. systemd + Restart=always로 안정화.

6️⃣ 보안 인증 완성

ttyd에 비밀번호 인증 추가 후 Cloudflare Zero Trust에서 GitHub OAuth 인증 연동. tunnel.<REDACTED_DOMAIN>에 접근 시 GitHub 로그인 필요하도록 설정 완료.

7️⃣ 복구 테스트

라즈베리파이를 완전히 종료 후 재부팅. 터널, 인증, ttyd 모두 정상 복구되는지 확인 완료.


🧩 회고

32시간 걸렸다… “군대에서도 결국 환경은 만든다.” 제한된 환경에서도 도메인 구입부터 Zero Trust 인증까지 직접 구축하며, 단순한 개인 서버가 아닌 보안형 개발 인프라를 완성했다.

다음 목표:

  • Docker로 환경 분리
  • Zero Trust 로그 분석 자동화
  • ttyd와 Python 환경 통합

This post is licensed under CC BY 4.0 by the author.