서버/홈서버

[홈서버구축하기 4] 클라우드플레어를 활용하여 내 서버 아이피 숨기기(feat. HTTPS)

for2gles 2024. 1. 6. 20:37
반응형

홈서버 구축하기 시리즈


 

앞선글에 작성한 대로 내가 염려하는 사항중에 하나는 내 서버의 아이피가 공공에 노출되는 것이다.
이는 누군가 내 서버에 대해 안좋은 마음을 품게된다면 얼마든지 공격으로 이어질 수 있기에 아이피에 대한 노출은 최소화하고싶었다.
하지만 모두가 알겠지만, 내가 운영하는 사이트의 주소가 blog.ewq.kr 이고, 이를 터미널에 ping blog.ewq.kr을 시도한다면 곧바로 아이피를 확인할 수 있다.(티스토리의 아이피이다.)

Pasted image 20240101185808.png

아이피를 보호하기 좋은 방법이라고 생각되는 방법이 있는데, 바로 Cloudflare Proxy를 사용하는것이다.

Cloudflare Proxy

Cloudflare?

클라우드플레어가 생소한 사람들이이 있을 수도 있다.
쉽게 생각하면 무료DNS를 제공하는 미국 업체 인 것이고, 더 나아가서 실제 IP 노출 차단, DDOS 방어, 트래픽 정보 제공, SSL인증서, 각종 모니터링 등을 제공한다.
더 자세히 Cloudflare를 알아보기

Proxy란?

Proxy가 작동하는 원리는 아래 이미지와 같다.

Pasted%20image%2020240101185843.png


출처: cloudflare docs

 

조금 더 정확하게 설명하자면

  1. Proxy를 설정하게 되면, 내 도메인의 A레코드는 사실 클라우드플레어 프록시 서버를 바라보게된다.
  2. User가 주소를 입력하면, 클라우드플레어 서버로 향하게되고, 클라우드플레어에서 내 서버로 요청을 Reverse Proxy 시켜주는 것이다.

따라서 내 도메인에 ping을 하게 된다면

Pasted%20image%2020240101190146.png


이와 같이 아이피가 노출되는데, 나의 아이피는 아니고 클라우드 플레어의 아이피이다.
http://172.67.151.135/
나와있는 아이피로 접속 해보면

Pasted%20image%2020240101190233.png


위와 같이 클라우드플레어 창이 나오고, 요청을 거부하는 화면을 볼 수 있다.

이렇게 내 아이피를 공공적인 도메인에서 숨길 수 있다.

Proxy 설정하는 방법

스크린샷%202024-01-01%20오후%207.07.05.png


설정하는 방법은 정말 쉽다.
Cloudflare DNS 설정 페이지에서 해당 체크박스만을 체크 해주면 된다.
설정하고 난 이후 페이지 접속이 되지 않고, 무한 Redirect의 현상이 발생할 수 있다.
이는 Proxy 포트가 정확하게 설정되지 않은 문제인데, 아래의 궁금증 파트를 쭉 읽으면 문제 해결이 가능하다.

궁금증

여기서 하나의 궁금증이 생길 수있다.
Q. Cloudflare에서 전달해주는 Reverse proxy는 어디 포트로 연결해줄까?

어디포트1.png


기본적인 전재로 Cloudflare 에서 Always Use HTTPS를 체크 한 것으로 생각하고 설명 하겠다.

Pasted%20image%2020240102094643.png


Cloudflare > SSL/TLS > Edge Certificates
Always Use HTTPS 설정은 말 그대로 언제나 https를 사용하겠다는 의미이다.
HTTP를 통해서 접속을 시도해도, 클라우드플레어에서 강제로 HTTPS로 적용시켜준다는 의미이다.
HTTP접속 > HTTPS로 301 Redirect
[[HTTPS를 사용해야하는 이유 그리고 원리]]

그렇게 된다면 유저의 일단 443포트로 클라우드플레어에 요청을 전송하게 될 것이다.
그렇다면 클라우드플레어에서는 우리의 서버로 어떤 포트로 요청을 전달하게될까?

Pasted%20image%2020240102095527.png


Cloudflare > SSL/TLS > Overview
위 설정 에서 이를 설정할 수 있다.
보안을 사용 할 것 이기 때문에 Off는 사용 할 필요가 없고, 그 아래에 Flexible, Full, Full (strict)의 원리를 이해하면 될 것이다.

따라서 묻지도 따지지도 않고 Full 이상의 보안 설정을 사용하면 된다.
그리고

Q. 브라우저에서 HTTPS를 사용했다라고 나오는데 Flexible을 써도 안전한 것 아닌가요?
대답은 절대 NO 이다.
아무리 브라우저에서 HTTPS 사용 안전함이 나오지만 이는 엄연하게 브라우저 > 클라우드 플레어까지 요청이 보안 처리 된 것이다.
만약에 Flexible모드를 사용한다면, 이는 내 서버에 Plain text(평문)로 데이터를 전송하겠다는 의미인데, 결국 http 요청을 보낸것과 동일 한 결과를 낳는다.
이는 치명적인 보안 위험임을 꼭 인지하고 있어야 한다.

그럼 Cloudflare는 만능인가?

아쉽게도 아니다. 아래의 단점들이 있으니, 서버 아이피를 숨기려는 목적과 이에 따른 결과가 납득가능 한 것인지 잘 판단하시길 바란다.

  • 속도가 느려진다.
    직접접속하는것이 아니라 Cloudflare 서버를 통해 접속을 하게 되기 때문에, 느려질 수 밖에 없다.
    그 뿐만 아니라, 클라우드플레어는 Enterprise 플랜을 사용하지 않으면 기본적으로 한국(인천/ICN) 서버를 사용할 수 없고 일본 서버를 사용하게된다.
    이 말은 어쩔 수 없이 일본 광케이블을 거쳤다 오기 때문에 느려질 수 밖에 없다.
  • Timeout이 생긴다.
    Timeout이 없어도 문제지만 원치않은 Timeout이 생기는 것도 문제다.
    100초의 Timeout이 있어, 내 서버에서 100초동안 요청에 대한 응답을 100초가 넘어가도록 주지 않으면 클라우드플레어에서 524Status를 리턴 해 버린다.
  • 업로드 용량 제한
    내 홈페이지에서 파일 업로드를 받아야 하는 경우 100MB의 용량 제한이 생긴다.(Business 플랜으로 가면 200MB까지 상향이 가능하다.)
    왜냐하면 모든 업로드파일이 Cloudflare로 우선적으로 전송되기 때문이다.

하지만 아래의 클라우드플레어만의 장점들도 있다.

  • 봇 차단
    우리가 한번 씩 만나볼 수 있는 접속시 "사람임을 인증하세요"라는 챌린징 창이 대표적이다.
  • DDoS 방어
    나는 아직 사용해본 적은 없지만, 무료플랜에서도 기본적으로 "Under attack mode"를 제공하고, Security > DDoS 페이지가 있어 ruleset을 설정할 수 있는 창이 보인다. 아직 사용해본 적은 없다.
  • CDN
    무료플랜에서도 설정에 따라 기본적으로 js, css파일 등에 대한 캐싱 또한 지원한다.
    추가로 "Always Online"라는 기능 또한 제공하는데, 내 서버에 문제가 생겨 작동하지 않는 상황에도 캐시 된 데이터를 일단 보여주는 기능이라고 한다.(무료플랜은 30일 주기로 Always Online 캐싱)
  • SSL
  • WAF
    웹 방화벽 시스템인데, 이 친구도 꽤나 유용한 친구이다.
    다양한 형태의 보안 시스템을 구축할 수 있다. 국가별, ip, 도메인, path, mimetype 등등에 대한 보안설정이 가능하다.
    예를들어 특정 페이지를 특정 아이피에게만 접속 가능하도록 하고 싶을 때 이 기능을 활용할 수 있다.
    코드를 변경할 필요 없이 클라우드플레어에서 몇번의 클릭으로 설정이 가능해서 보안이 필요한 페이지에 설정하기 유용하다.
    ex) 워드프레스 관리자페이지 접속 가능 아이피 제한

 

반응형