![[Cloudflare] 가비아 NS -> Cloudflare로 전환](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FzU2zx%2FbtsPwvD3k9s%2FAAAAAAAAAAAAAAAAAAAAAM_1AaFCCj1vjIkCnDfD28u37vx5U3E9olyb4a2MbyzP%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DJDRczLqgYeO4S4z7SXRsfqOw8H8%253D)
- 서버 환경 ubuntu server - 24.04LTS
기존에 가비아에서 도메인을 샀기 때문에 가비아 네임서버를 이용했다.
하지만 Cloudflare에서 제공하는 기능이 너무 좋아보여서 갈아타기로 결정했다.
간단하게 Cloudflare의 네임서버를 사용하면 아래의 이점이 있다.
- 기본 DDoS 공격 방어
- 무료 SSL 인증서 자동 발급
- 빠른 DNS 속도
- 실제 서버 IP 숨김(프록시 기능)
- GeoIP 기능
위와같이 프록시 상태가 되면 사용자는 원(origin)서버의 주소를 알 수 없게된다.
사용자의 요청은 Cloudflare의 서버를 거쳐서 원(origin)서버에 요청을 보내기 때문이다.
Cloudflare 통해 HTTPS 강화
Full(strict) 적용
기본적인 Cloudflare TLS 기본 설정만 사용하면 보안적인 문제점은 존재한다.(SSL/TLS FULL)
여기서 SSL/TLS의 full과 full(strict)차이점을 알아야 한다.
간단히 설명하면
- Full: 암호화만 하고 상대 신원은 신경 안씀
- Full (Strict): 암호화 + 상대가 진짜인지 철저히 검증
구분 | Full | Full(Strict) |
origin과의 연결 | HTTPS로 암호화만 보장됨 | HTTPS 암호화 + 인증서 유효성 검증까지 수행 |
인증서 유효성 검증 | 자체 서명, 만료, 도메인 불일치 모두 허용됨 | 유효한 인증서(공인 CA 또는 Cloudflare Origin CA)와 도메인 일치 |
보안 수준 | 암호화는 되지만 무결성/신뢰성 보장은 약함 | 암호화 + 서버 신원 검증으로 MITM 리스크 최소화 |
1. 클라이언트 -> Cloudflare 엣지서버 HTTPS
- Cloudflare가 표준 TLS 1.2/1.3, PFS 등을 사용
2. Cloudflare 엣지서버 -> origin 서버
- 공인 CA 인증서를 사용하고, Cloudflare SSL 모드를 Full (Strict) 로 설정했다면 안전
- 암호화 + 인증서의 유효성/도메인 일치 검증이 모두 수행
- Full (Strict)이 아니라 Full 모드면 암호화는 되지만(공인 CA를 써도) 검증이 강제되지 않아 보안 모델상 약점이 남음
다른 공인 인증서(Let’s Encrypt 등) VS Cloudflare Origin CA
현재 구조에서 Cloudflare 엣지서버 -> origin 서버 구간에서 Let’s Encrypt나 Cloudflare에서 제공하는 인증서를 통해 HTTPS를 적용할 수 있는데 Cloudflare에서 제공하는 인증서를 적용하는 것이 좋아보인다.
이유는 다른 공인 인증서를 사용하면 origin 서버의 IP를 클라이언트가 알았을때, Cloudflare 엣지서버를 거치지 않고 우회해서 origin 서버를 거치게 되면 해당 요청이 차단되지 않고 받아들여지기 때문이다.
이러면 WAF·RateLimit·IP 차단·GeoIP 차단 등 중요한 보안 기능이 우회당하고 처리된다.
반대로 Cloudflare Origin CA를 사용하면 브라우저·일반 클라이언트는 인증서를 신뢰하지 못하므로 직접(origin IP로) HTTPS 접속이 사실상 불가능해진다.
Cloudflare만 그 인증서를 신뢰하므로, 엣지 → 오리진 구간만 정상적으로 TLS가 성립된다.
다만 이것만으로 ‘완전 차단’은 아니다.
완전 차단하는 방법은 아래 Cloudflare 엣지서버의 IP만 화이트 리스트로 등록을 참고
Cloudflare 엣지서버 -> origin 서버에 적용하는 SSL 인증서 또한 cloudflare에서 제공한다.
이후 생성되는 origin-cert.pem, origin-key.pem를 다운로드하거나 복사해서 아래 경로에 생성한다.
- /etc/ssl/cloudflare/origin-cert.pem
- /etc/ssl/cloudflare/origin-key.pem
nginx 서버블록에 아래의 내용을 추가한다.
ssl_certificate /etc/ssl/cloudflare/origin-cert.pem; ssl_certificate_key /etc/ssl/cloudflare/origin-key.pem; |
이러면 Cloudflare 엣지서버 -> origin 서버에 적용하는 SSL 인증서가 Cloudflare Origin CA를 사용하게 되는 것이다.
Cloudflare 엣지서버의 IP만 화이트 리스트로 등록
uwf등 방화벽 도구에서 Cloudflare의 IP만 허용하면 완벽하다.
for ip in $(curl -s https://www.cloudflare.com/ips-v4); do
sudo ufw allow from $ip to any port 80,443 proto tcp
done
- https://www.cloudflare.com/ips-v4 는 클라우드 페어 엣지 서버의 ip-v4 리스트이다.
- https://www.cloudflare.com/ips-v6 는 클라우드 페어 엣지 서버의 ip-v6 리스트이다.
이렇게 하면 방화벽에서 80, 443 포트의 연결을 Cloudflare의 IP만 허용하기 때문에 상대가 origin 서버의 IP를 알더라도 요청을 완전차단할 수 있게 된다.
즉, 클라우드플레어를 통해서만 origin 서버로 요청이 가능한 구조가 완성되어서 Cloudflare가 제공하는 보안기능을 누릴 수 있다.
'서버 구축기' 카테고리의 다른 글
[GitHub Actions] Self-Hosted Runner JDK 업그레이드 (0) | 2025.07.11 |
---|---|
[GitHub Actions] Self-Hosted Runner (0) | 2025.01.09 |
[Ubuntu] GeoIP 를 이용한 해외 IP SSH 접속 차단 (0) | 2025.01.02 |
[Nginx] Nginx 기본 보안 설정 (1) | 2024.12.28 |
[MySQL] MySQL 보안 설정 (1) | 2024.12.27 |