두 번째 블로그가 NAS 안에서는 돌아가게 됐습니다. 이제 밖에서 볼 수 있게 도메인을 붙일 차례였습니다.
예전 같으면 공유기에 포트를 열고 인증서를 발급받았을 겁니다. 이번엔 둘 다 하지 않았습니다.
터널은 밖으로 나가서 만납니다
클라우드플레어 터널은 5편의 Tailscale과 발상이 같습니다. 밖에서 들어오는 연결을 받는 게 아니라, NAS가 밖으로 나가서 연결을 맺습니다.
NAS에서 터널 프로그램이 클라우드플레어로 연결을 걸어두면, 방문자가 도메인으로 들어왔을 때 클라우드플레어가 그 통로로 요청을 넘겨줍니다. 공유기 입장에서는 평범한 아웃바운드 연결이라 포트를 열 이유가 없습니다.
- 포트포워딩 불필요 — 공유기에 구멍을 안 뚫습니다
- 공인 IP 노출 안 됨 — 방문자는 클라우드플레어 주소만 봅니다
- SSL 자동 — 인증서를 직접 발급·갱신할 일이 없습니다
세 번째가 특히 좋았습니다. 인증서는 보통 90일마다 갱신해야 하는데, 자동 갱신이 실패하면 어느 날 갑자기 사이트가 경고를 띄웁니다. 그 걱정이 통째로 사라집니다.
블로그마다 터널을 따로 만들었습니다
기존 블로그에 이미 터널이 하나 있었습니다. 거기에 도메인만 하나 더 붙일 수도 있었지만 새 터널을 따로 만들었습니다.
이유는 8편에서 스택을 나눈 것과 같습니다. 하나를 손볼 때 다른 하나가 안 끊기게 하려는 겁니다. 터널 설정을 바꾸거나 재시작할 일이 생겨도 서로 영향을 주지 않습니다.
연결 대상은 컨테이너 이름으로 지정합니다. 호스트 포트가 아니라 같은 도커 네트워크 안의 서비스 이름으로 바로 가리킵니다.
Public Hostname : myblog.com
Service : HTTP → myblog:80
저장하면 DNS 레코드가 자동으로 만들어지고, 몇 초 뒤 도메인이 열립니다. SSL도 이미 붙어 있습니다.
관리자 화면을 여는 건 다른 문제입니다
블로그를 붙이고 나니 욕심이 생겼습니다. NAS 관리 화면도 밖에서 열고 싶었습니다.
여기서 한 가지를 정리하고 넘어가야 했습니다. 퀵커넥트든 포트포워딩이든 터널이든, 로그인 화면이 공개된다는 점에서는 똑같습니다.
| 방식 | 로그인 화면 | 공인 IP | 공유기 구멍 |
|---|---|---|---|
| 포트포워딩 | 공개 | 노출 | 있음 |
| 퀵커넥트 | 공개 | 가려짐 | 없음 |
| 터널만 | 공개 | 가려짐 | 없음 |
| 터널 + 접근 제어 | 차단됨 | 가려짐 | 없음 |
터널을 쓴다고 보안이 해결되지는 않습니다. IP는 가려지고 공유기에 구멍도 안 뚫리지만, 비밀번호를 대입해볼 로그인 폼은 여전히 인터넷에 있습니다.
5편에서 Tailscale을 두고 했던 이야기와 같은 구조입니다. 들어가는 길을 바꾸는 것과, 남이 못 들어오게 막는 것은 다른 일입니다.
로그인 화면 앞에 관문을 하나 더
그래서 관리 화면에는 접근 제어를 앞에 세웠습니다. 클라우드플레어의 Access 기능입니다.
허용할 이메일을 정해두면, 그 주소로 인증을 통과하기 전에는 NAS 로그인 화면 자체가 나오지 않습니다. 방문자는 클라우드플레어의 인증 페이지만 봅니다.
차이가 큽니다. 공격자 입장에서는 대입해볼 로그인 폼이 아예 존재하지 않는 상태가 됩니다. 비밀번호가 아무리 약해도 시도할 화면이 없습니다.
실제로 인증 없이 주소를 열어보면 NAS가 아니라 클라우드플레어 인증 화면으로 넘어갑니다. 무료 플랜으로 쓸 수 있습니다.
정리
- 클라우드플레어 터널은 포트를 열지 않고 도메인을 붙이는 방법입니다. NAS가 밖으로 나가서 연결을 맺습니다.
- SSL 인증서를 직접 관리할 필요가 없습니다. 갱신 실패로 사이트가 경고를 띄우는 일이 사라집니다.
- 블로그가 여러 개면 터널도 나누는 편이 안전합니다.
- 터널을 쓴다고 보안이 해결되지는 않습니다. 로그인 화면은 여전히 공개돼 있습니다.
- 관리자 화면처럼 민감한 곳에는 접근 제어를 앞에 세우십시오. 로그인 폼 자체를 안 보이게 만드는 게 핵심입니다.
NAS 복구·재구축 연재 — 전 11편 중 10편
1막 · 잃음
2막 · 다시 지음
3막 · 그 위에 블로그를 올림
- 나스 한 대로 블로그 두 개, 병목은 CPU가 아니었습니다
- 도커로 워드프레스 스택 분리하기, 멀티사이트를 안 쓴 이유
- MariaDB가 Permission denied로 죽는다, 시놀로지 ACL 함정
- 포트포워딩 없이 도메인 붙이기, 관리자 화면은 숨기기 — 지금 읽는 글
- 같은 일을 두 번 겪지 않으려고, RAID는 백업이 아닙니다