Profile picture

[Linux] 클라우드 플레어(Cloud Flare)로 홈 서버 IP 보호하는 방법

JaehyoJJAng2025년 03월 05일

개요

홈 서버에서 운영 중인 서비스를 외부로 배포할 때,

가장 꺼림칙한 문제는 "홈서버의 공인 IP 노출" 이겠죠?


홈서버의 IP는 매우 쉽게 노출됩니다.

예를 들어, 제가 example.com 이라는 도메인을 사용하고 있다고 해볼게요.

터미널에서 nslookup 명령어를 사용해 example.com을 치면 다음과 같이 해당 도메인에 매핑된 IP 주소가 나오게 됩니다.

nslookup example.com


Non-authoritative answer:
Name:   example.com
Address: 96.7.128.175
...

그렇다면 내 홈서버 IP를 보호하기 위해서는 어떤 방법을 사용해야 할까요?


클라우드 플랫폼에서 인스턴스를 임대해 해당 인스턴스를 프록시 서버 대용으로 사용할 수도 있겠네요.

그러나, 위 방법은 지속적인 서버 임대 비용이 나오게 되므로, 홈서버를 운영 중인 입장에서는 그리 좋은 방법은 아닐 것 같습니다.


그래서 찾게된 것이 Cloud Flare의 프록시입니다!

Cloudflare의 프록시 기능을 사용하여 아주 쉽게 홈서버의 IP를 보호할 수 있어요!


Cloudflare에도 여러 구독 플랜들이 있지만, 무료 플랜만으로도 홈서버 IP를 지키기에는 차고도 넘친답니다!

그럼 이제부터 관련 내용을 알아가보도록 할게요.


클라우드플레어?

image


홈서버 운영하시는 분들이라면 클라우드플레어는 익숙한 어감이지 않나요?

무료 DNS를 제공하는 미국 업체라고 보시면 됩니다.

위에서 언급했던 것과 같이 홈서버의 real IP 노출을 차단해준다던지, DDoS 방어, 트래픽 정보 제공, SSL 인증서 등등 수 많은 서비스를 제공하고 있어요.


그럼 이제부터 홈서버 IP를 보호하기 위한 Cloudflare 설정을 진행해보도록 하겠습니다.


Cloudflare 리버스 프록시 설정하기

0. 사전 준비

작업을 진행하기 이전에 도메인 임대와, Cloudflare 회원가입, nginx proxy manager(npm) 설치 등은 미리 진행해주세요.


1. 구입한 도메인을 Cloudflare로 관리하기

Cloudflare에 접속한 후, 내가 임대한 도메인을 추가해줘야 해요!

클라우드 플레어 대시보드로 이동한 후, 도메인을 추가해주세요.
image


도메인을 추가하면 Cloudflare의 Nameserver로 변경하라는 문구가 있을거에요.

도메인 업체 DNS 설정에 가서 cloudflare의 네임서버로 변경해주시면 됩니다.


이 때 DNS 변경 전파까지 시간이 조금 걸릴 수 있어요.

전파가 완료되면 Cloudflare가 도메인을 관리하게 됩니다.


[질문 1] 네임서버를 변경해야하는 이유?

Q. 클라우드플레어의 네임서버로 변경해야하는 이유가 뭔지 궁금합니다.

클라우드플레어는 보안 프록시 & CDN & DNS 관리 를 하나로 제공하는 서비스입니다.


제가 이루고 싶은 목적은 홈 서버의 real ip를 가리는 것입니다.

이를 위해서는 클라우드플레어가 도메인의 DNS 질의에 대해 최종 결정권자(authoritative name server) 가 되어야 해요.


그렇게 되면

  • 가비아는 단순히 도메인 등록자 관리 (연장, 소유권 유지) 역할만 하고,
  • 클라우드플레어가 DNS 응답 및 프록시 보안(방화벽, DDoS 차단) 을 맡게 되는거죠.

따라서 네임서버를 클라우드플레어로 바꿔야

👉 외부 사용자의 요청은 클라우드플레어 네트워크를 먼저 거쳐서

👉 악성 트래픽을 걸러내고

👉 정상이면 최종적으로 네 홈서버 IP로 전달됩니다.


[질문 2] 네임서버를 클플로 바꾸면 기존 레코드는?

Q. 네임서버를 클라우드플레어의 네임서버로 변경하게 되면 기존 가비아에서 설정했던 레코드는 어떻게 되나요?

DNS 최종 결정권자가 가비아 -> 클라우드플레어로 변경되었으므로,

가비아에서 직접 작성한 DNS 레코드는 더 이상 쓰이지 않겠죠.


  • 1️⃣ 현재까지는 example.com(내 도메인)의 A레코드, CNAME 등을 가비아 DNS 관리에 등록했을 것입니다.
  • 2️⃣ 클라우드플레어 네임서버로 바꾸면, 가비아는 등록기관 역할만 하고 DNS는 클라우드플레어만 사용됩니다.
  • 3️⃣ 따라서 클라우드플레어에서 새롭게 A, CNAME, MX 등 레코드를 직접 설정해야 해요!

실제 흐름을 표로 표현해보면 다음과 같을 것 같네요.

단계 기존 변경 후
DNS 질의 사용자 -> 가비아 네임서버 -> 가비아 DNS 레코드 -> 홈서버 사용자 -> 클라우드플레어 네임서버 -> 클라우드플레어 DNS 레코드 -> (프록시 & 방화벽) -> 홈서버

즉, 클라우드플레어가 중간에서 프록시 역할을 하며,

  • DDoS를 차단하고
  • 원래 IP는 외부에 노출하지 않도록 하는거죠.

2. Cloudflare DNS Proxy 설정하기

레코드에서 A 유형과 CNAME 유형을 설정해줘야 합니다.

A 유형의 이름은 구매한 도메인, 콘텐츠는 홈서버 공인 IP를 넣어주시면 돼요.


CNAME의 이름은 *, 콘텐츠는 구매한 도메인을 입력해주세요.

DNS 전파가 바로 안돼요. 조금 기다려주세요.


이후에 개요 탭으로 이동한 후 오른쪽 하단을 보면 다음과 같이 "API 토큰 가져오기"가 있을겁니다.

API 토큰 생성 버튼을 클릭해서 하단에 사용자 설정 토큰 생성 버튼을 클릭해주세요.
image


토큰 이름은 알아서 지정해주시고, 권한은 영역 - DNS - 편집으로 설정해주시고 토큰 생성 버튼을 눌러주시면 됩니다.
image
토큰이 생성될텐데, 복사하시고 메모장 같은 곳에 붙여주세요.


[질문] 클라우드플레어의 리버스 프록시 동작 과정

Q. 클라우드플레어의 리버스 프록시 동작 과정이 궁금합니다.

제 상황에 맞춰서 설명해보자면 cloudflare 리버스 프록시는 다음과 같이 동작합니다.


  • 방문자가 직접 홈 IP로 요청하지 않도록,
  • Cloudflare의 글로벌 Anycast CDN 노드가 방문자와 통신하고,
  • Cloudflare가 백엔드 서버(=나의 홈서버)로 요청을 대신 전달하는 역할을 합니다.
[방문자][Cloudflare CDN/보안 레이어][당신의 홈서버]

이렇게 되면

  • 외부 방문자는 Cloudflare IP만 알 수 있고,
  • 제 홈서버 IP는 숨겨집니다.
  • 또한, DDos는 Cloudflare가 흡수하거나 차단해줘요.
  • 심지어 WAF(Web Application Firewall)등 추가 보안도 적용 가능합니다.

이 모든 과정을 요약해보면 다음과 같아요!

  • 1️⃣ 방문자가 https://yourdomain.com 요청
  • 2️⃣ DNS 쿼리 (Cloudflare): 사용자의 브라우저는 yourdomain.com의 IP 주소를 질의하고, 이 질의는 Cloudflare의 네임서버로 전달됩니다.
  • 3️⃣ Cloudflare 응답: Cloudflare는 해당 도메인이 프록시(주황색 구름)로 설정되어 있음을 확인하고, 사용자에게 Cloudflare의 IP 주소를 반환합니다.
  • 4️⃣ Cloudflare로 연결: 사용자의 브라우저는 이제 Cloudflare의 IP 주소로 직접 연결됩니다. 이때부터 사용자와 Cloudflare 간의 통신은 암호화(HTTPS)됩니다.
  • 5️⃣ Cloudflare의 요청 처리: Cloudflare는 사용자로부터 받은 웹 요청을 수신하고, 이 요청을 자체적으로 분석합니다.
    • 보안 검사: DDoS 공격, SQL Injection, XSS 등 다양한 웹 공격으로부터 보호하기 위해 트래픽을 필터링합니다.
    • 캐싱: 만약 해당 콘텐츠가 Cloudflare의 캐시에 저장되어 있다면, Cloudflare는 즉시 캐시된 콘텐츠를 사용자에게 전달하여 응답 시간을 단축시킵니다. (정적 파일의 경우)
  • 6️⃣ Origin 서버로 포워딩 (홈 서버): 보안 검사를 통과하고 캐시되지 않은 요청에 대해 Cloudflare는 설정된 DNS 레코드(A 레코드)에 기반하여 홈 서버의 실제 공인 IP 주소로 요청을 전달합니다. 이때 Cloudflare와 홈 서버 간의 통신 역시 SSL/TLS 설정에 따라 암호화될 수 있습니다.
  • 7️⃣ 홈 서버 응답: 홈 서버의 Docker 컨테이너에서 실행 중인 웹 서비스는 Cloudflare로부터 전달받은 요청을 처리하고, 웹 페이지나 데이터를 Cloudflare로 반환합니다.
  • 8️⃣ Cloudflare 응답 전달: Cloudflare는 홈 서버로부터 받은 응답을 다시 사용자에게 전달합니다.

이 때 주의해야할 점은!

Cloudflare DNS에 ‘Proxy 모드(구름 아이콘 ☁️ 노란색)’ 로 설정해야만 리버스 프록시가 작동합니다!

Proxy 모드가 꺼지면 그냥 DNS만 전달하므로 홈 서버 IP가 노출될 수 밖에 없어요!


3. npm SSL 설정

이제 npm UI로 접속해서 SSL Certificates로 들어가겠습니다.

Add SSL Certificate 버튼을 클릭하시고 Let's Encrypt를 눌러주세요.
image


도메인 네임에 (*.도메인이름)을 적어주시구요

예를 들어, 도메인이 example.com 이면 *.example.com 이런식으로요!


dns provider는 클라우드플레어로 지정해주시고요,

그러면 자동으로 TOKEN 변수가 생성될텐데


기존에 있던 값을 지우고 위에서 생성된 클라우드 플레어 API 토큰 값을 붙여넣어줍시다.
image


그리고 save 버튼을 눌러주세요.

그러면 다음과 같이 SSL Certificates가 등록됩니다.
image


그리고 Hosts 탭에 있는 Proxy Hosts로 이동한 후에

위에서 설정한 서브 도메인 별 Proxy Hosts를 등록해주시면 됩니다.
image


4. DNS 검증 (테스트)

이제 도메인 조회 시 내 홈서버 real ip가 가려지는지 확인해볼게요.
image
도메인 조회 시 제 홈서버 IP가 안뜨네요!

    Tag -

Loading script...