도메인 구매
저는 Cloudflare Registrar를 통해 도메인을 구매했습니다.
Cloudflare를 선택한 이유는 관리 편의성도 있지만, 도메인 등록 비용에 별도의 수수료를 붙이지 않고 도매가 수준으로 제공하기 때문입니다. 또한, 뒤에 설명할 보안 기능들을 도메인 연동 즉시 무료 플랜에서도 대부분 사용할 수 있다는 점이 큰 장점입니다.
Cloudflare Tunnel (cloudflared) 도입
기존의 서비스 노출 방식은 공유기에서 포트 포워딩(Port Forwarding) 을 설정하는 것이었습니다. 하지만 이 방식은 몇 가지 고질적인 문제가 있습니다.
- 보안 취약성: 특정 포트가 인터넷에 직접 노출되어 공격자의 타겟이 되기 쉽습니다.
- 유동 IP 대응: IP가 바뀔 때마다 DDNS 설정을 갱신해야 합니다.
- 포트 부족: 하나의 공인 IP에서 여러 서비스를 운영하기 번거롭습니다.
저는 이를 해결하기 위해 Cloudflare Tunnel을 사용했습니다.
Reverse Tunnel의 의의 & 장점
cloudflared는 서버 내부에서 외부(Cloudflare Edge)로 연결을 먼저 수립하는 Reverse Tunnel 방식으로 동작합니다.
- 포트 개방 불필요: 인바운드 포트를 열지 않아도 됩니다. 외부의 공격자가 우리 집 공유기 IP를 알아도 뚫고 들어올 구멍이 없습니다.
- NAT 트래버셜: 방화벽이나 CGNAT 뒤에서도 동작합니다.
- 안전한 종단: 모든 트래픽은 Cloudflare 인프라를 거쳐 오기 때문에 DDoS 보호와 SSL 인증서 처리가 자동으로 이루어집니다.
보안 강화: WAF와 IP Allowlist
서비스를 외부로 열었지만, 대부분이 개인용 서비스이며, 상용서비스가 아니기 때문에 WAF(Web Application Firewall) 를 통해 allow list 설정을 적용했습니다.
- Cloudflare Dashboard > Security > WAF > Custom Rules로 이동합니다.
- 집과 사무실의 공인 IP를
Allow리스트에 등록합니다. - 그 외 모든 트래픽은
Block되도록 설정했습니다. - 다만, 블로그 도메인의 경우 예외 규칙(Exception Rule)을 설정하여, 인증이나 IP 제한 없이 누구나 접속할 수 있도록 퍼블릭하게 노출했습니다.
무료 플랜의 유익한 기능
Cloudflare 무료 플랜만으로도 홈서버 운영에 필요한 필수 기능들을 충분히 누릴 수 있습니다.
- 자동 SSL/TLS: 인증서 갱신 걱정 없이 항상 HTTPS 보안 접속을 보장합니다.
- 캐싱(Caching): 고정적인 리소스(이미지, JS 등)는 Cloudflare 에지 노드에서 캐싱되어 홈서버의 부하를 줄이고 로딩 속도를 높여줍니다.
- 상세 분석(Analytics): 누가 내 서버에 얼마나 방문하는지, 어떤 국가에서 접속하는지 한눈에 볼 수 있습니다.
POC: Docker로 샘플 Nginx 띄우기
모든 설정이 잘 되었는지 확인하기 위해 Docker로 간단한 HTML 페이지를 띄워보겠습니다.
1. Nginx 컨테이너 실행
docker run -d --name sample-web -p 8080:80 nginx
2. Cloudflare Tunnel 설정
터미널에서 cloudflared를 설정하거나 Zero Trust 대시보드에서 다음과 같이 호스트네임을 연결합니다.
- Public Hostname:
test.yourdomain.com - Service:
http://localhost:8080
3. 결과 확인
이제 브라우저에서 https://test.yourdomain.com으로 접속하면 Nginx 페이지에 액세스 됩니다.