Cloudflare Proxy
graph TB;
internet["인터넷"]
cloudflare-dns["Cloudflare 프록시 서버<br>80 / 443"]
router["공유기 / 서버<br>80 / 443"]
internet --> cloudflare-dns;
cloudflare-dns --> router;
Cloudflare Proxy
는 DDOS
공격을 방어하기 위한 솔루션 이에요. 이를 사용하면 인터넷과 서버 사이를 Cloudflare 의 서버가 중계하게 되어, 내 서버의 공인 IP가 사용자에게 직접적으로 노출되지 않게 돼요. 이 덕분에 해커 역시 내 서버의 IP 주소를 알 수 없게 되어 Cloudflare 의 IP 주소로만 DDOS
공격을 시도할 수 있게 될 거예요.
graph TB;
ddos["DDOS 공격"]
cloudflare-dns["Cloudflare 프록시 서버<br>80 / 443"]
router["공유기 / 서버<br>80 / 443"]
ddos --> cloudflare-dns;
cloudflare-dns --트래픽 차단--> router;
그런데 해커가 Cloudflare 로 공격을 시도해도 결국 그 트래픽이 내 서버로 도달한다는 것은 똑같지 않나 생각하실 수 있어요. 이럴 때는 Cloudflare 에서 제공하는 Under Attack
모드를 켜면 기본적으로 모든 트래픽을 차단하고 악성 봇 검사를 통과한 트래픽만 내 서버로 전달해주게 돼요. 이제 좀 마음에 들지 않나요?
더 좋은 점은, Cloudflare 가 이 기능을 완전히 무료로 제공하고 있다는 거예요. 자신의 도메인만 가지고 있다면 누구나 이 기능을 사용할 수 있어요.
설정하기
설정을 위해서는 Cloudflare 도메인 설정 페이지에서 DNS - Records
탭으로 이동해 주세요.
이후 도메인 등록 정보에서 Edit
버튼을 클릭해 주세요.
수정 화면에서 Proxy status
를눌러 활성화 한 후 Save
버튼을 눌러 저장해 주세요.
만약 여러 DNS 정보가 등록되어 있다면 동일한 방법으로 변경해 주세요.
적용이 완료된 모습은 위와 같아요. 이제 다시 도메인으로 배포했던 서비스에 접속해 보세요.
이전과 같이 서비스에 정상적으로 접근된다면 잘 적용된 거예요. 설정은 간단하죠?
검증하기
이제 내 서버의 공인 IP가 잘 숨겨졌는지 확인할 차례에요. 다음의 명령어를 참고해 실행해 보세요.
nslookup 내_도메인
이 명령어는 Mac
, Windows Powershell
, Linux
모두에서 사용할 수 있어요.
출력된 결과를 보면 해당 도메인의 실제 IP 주소가 나오게 돼요. 이 주소가 여러분의 공인 IP가 아니라면 잘 동작하고 있는 거예요. 이제 공격자도 여러분의 실제 IP 주소를 알아낼 수 없게 됐어요.
SSL
Cloudflare Proxy 를 사용하면 서버에 SSL 인증서가 없더라도 SSL 암호화를 적용할 수 있게 돼요.
graph TB;
internet["인터넷"]
cloudflare-dns["Cloudflare 프록시 서버<br>80 / 443"]
router["공유기 / 서버<br>80"]
internet --SSL 암호화--> cloudflare-dns;
cloudflare-dns --암호화 없음--> router;
Cloudflare Proxy 서버는 우리가 설치한 Nginx Proxy Manager
와 마찬가지로 일종의 웹 서버에요. 이 서버는 자체적으로 SSL 인증서를 발급받아 암호화하기 때문에 내 서버에 인증서가 없더라도 SSL
암호화가 자동으로 적용되게 돼요. 참 신기하죠?
graph TB;
internet["인터넷"]
cloudflare-dns["Cloudflare 프록시 서버<br>80 / 443"]
router["공유기 / 서버<br>80 / 443"]
internet --SSL 암호화--> cloudflare-dns;
cloudflare-dns --SSL 암호화--> router;
하지만 이러면 서버와 Cloudflare 가 통신할 때는 중간에 데이터가 탈취될 수 있다는 위험이 있어요. 그래서 저는 항상 서버에까지 SSL
암호화 기능을 활성화하실 것을 권해드려요. 이 가이드를 따라오면서 서버의 SSL
인증서를 발급 받아 사용하셨다면 이미 이 상태가 적용되신 거예요.
Cloudflare Proxy는 기본적으로 서버에 SSL 인증서가 있건 없건 알아서 잘 동작하는 Flexible
모드로 동작하고 있어요. 만약 이를 확인하거나 변경하고 싶다면 SSL/TLS - Overview
에서 Configure
버튼을 클릭해 주세요.
만약 여기서 Full
을 선택하게 되면 서버와 통신할 때에도 SSL
암호화 사용이 강제돼요. 그래서 서버의 SSL 인증서에 문제가 생긴다면 더 이상 사이트에 접속되지 않게 될 거예요. 이 옵션이 마음에 든다면 활성화 하셔도 되고, Flexible
을 그대로 두셔도 괜찮아요.
한계점
이렇게 좋은 Cloudflare Proxy
도 장점만 있는 것은 아니에요. 오히려 이걸 사용해서 불편한 점을 겪을 수도 있는데 이런 상황들을 몇 가지 소개해 드릴게요.
대용량 파일을 다운로드/업로드 하는데 문제가 생길 수 있어요.
무료 플랜에서는 최대 다운로드/업로드 가능한 요청의 크기가 100MB
에요. 그래서 클라우드 스토리지 서버처럼 대용량 파일을 다운로드/업로드 하는 서비스의 경우 문제가 발생할 수 있어요. 파일 전송 중 문제가 생긴다면 이 제한 사항 때문일 가능성이 높아요.
그런데 요즘 스토리지 서비스들은 대용량 파일을 분할해서 전송하는 방식을 사용하고 있어요. 그래서 대부분의 경우는 문제가 발생하지 않을 거예요.
사이트 접속 속도가 빨라질 수도, 느려질 수도 있어요.
Cloudflare Proxy 는 사용자와 서버 사이에 중간 서버를 거치는 과정이 추가돼요. 그래서 사이트 접근 속도가 조금은 느려질 수 있어요. Cloudflare 의 서버 상태에 따라서도 영향을 미치게 돼요.
그런데 꼭 느려지기만 하는 것은 아니에요. 서버가 매우 먼 나라에 있는 경우는 내가 통신사를 거쳐 서버에 직접 접속하는 속도보다 Cloudflare 의 중계 서버를 거치는 속도가 더 빠를 수 있어요.
그리고 Cloudflare Proxy 는 자체적으로 텍스트, 이미지, 동영상 등의 파일에 대한 캐시를 생성해 같은 요청은 서버를 거치지 않고 사용자에게 제공해주게 돼요. 그래서 서버의 인터넷 회선이 느리다면 체감상 더 빨라졌다고 느낄 수도 있을 거예요.
웹 서버만 가능해요.
Cloudflare Proxy 는 기본적으로 웹 서버에요. 그래서 80
또는 443
포트로 들어오는 요청만 서버로 보내줄 수 있어요. 만약 다른 포트의 서비스(ssh, 게임 서버 등)도 도메인 주소로 접근 가능하게 하려면 Proxy 기능을 해제한 도메인 정보를 하나 생성해야 해요.
하지만 이렇게 지정하면 내 서버의 IP 주소를 노출할 수 있는 위험 요소를 하나 추가하게 되는 거예요. 그래서 저는 가급적이면 이렇게 추가하지 않는 것을 권해드려요. 만약 인터넷에서도 ssh
와 같은 서비스 접근이 필요하다면 VPN
이나 Tailscale
같은 가상 사설망을 배운 후 사용하시길 권해드려요.
내 공인 IP가 완전히 숨겨지는 것은 아니에요.
Cloudflare Proxy 는 내 도메인으로 서비스에 접속하는 사용자에게만 내 공인 IP 주소를 숨겨줘요. 그래서 인터넷 세상의 내 공인 IP는 그대로 존재하고 IP 주소로 접속할 수도 있는 상태에요. 그러니 여전히 함부로 공인 IP 주소를 다른 사람에게 알려줘서는 안돼요.