저번에 ASUS 공유기에 Cloudflare DDNS를 적용하는 방법에 대해서 글을 적었다.
짧게 넘어갔지만 학교 재학시절에 잘 쓰던 G-Suite 무제한 구글 드라이브가 종료됨에 따라 엑소더스(...)를 결정하게 되었다. 생각보다 내가 가진 파일의 용량이 꽤 되었고 그때 마침 시놀로지 DS1821+를 출시기념으로 할인행사를 진행중이었다. 그때나 지금이나 개인용 NAS로는 오버스펙이지만 여러 용도로 아주 잘 쓰고 있다. 그런 오버스펙의 NAS도 나 혼자 집에서만 사용한다면 큰 문제가 안된다. 그런데 내 지인들도 쓰고 나도 외부에서 접속할 일이 가끔 있다.
따라서 전에 작업했던 DDNS(도메인) 연결과 더불어 포트포워딩, 시놀로지 자체에서 외부접속에 대한 보안설정까지 충분히 완료했다고 생각한다. 그런데 정작 외부에서 접속할 때 네트워크에 대한 보안이 문득 생각났다. 아무리 기기가 오버스펙이고 어쩐다해도 네트워크간의 보안을 신경쓰지 않으면 누군가가 남을 사칭해서 연결하고 정보를 탈취할 수도 있다.
요즘은 뜸하지만, 랜섬웨어가 무섭기도 하고 내 파일만 있으면 모르겠는데 그런 것도 아니다. 그래서 Let's Encrypt를 통하여 TLS 인증서를 발급받아 내 시놀로지에 적용해서 네트워크에 대한 보안도 최소한으로 챙기는 방법을 사용한다. 그런데 내 도메인별로 인증서를 전부 발급받는 것이 좋다고 생각하나 나에게 해킹이 그렇게 많이 들어올 것 같지도 않고 하나하나 적용하는게 귀찮고 발급 횟수도 일주일에 5회로 그리 많지 않다. 따라서 어떤 도메인에서 접속해도 동일한 인증서를 사용할 수 있도록 와일드카드 인증서를 발급받을 것이다.
하지만 내 시놀로지에서 바로 발급받고 적용하고 갱신하도록 설정하면 되겠지만 그에 관한 자료를 찾아봤을 때 생각보다 꽤 오래된 내용인데다 인증서 기간이 90일로 넉넉해서 대충 이메일로 갱신하라는 메일이 왔을 때 적당히 갱신하면 될 것 같다. 아마 나중에 스크립트 다시 찾아서 검토해서 적용할 수도 있긴한데 이 글에서는 귀찮으니 일단 발급 받는 것을 목표로 한다. 등록하는건 나중에. 이전에는 OPNsense에 HAProxy로 Cron 설정으로 자동 발급까지 잘 해놨는데 아쉽게도 지금은 사용이 불가능하다.
SSL/TLS 인증서는 시스템에서 ID를 확인하고 이후에 Secure Sockets Layer/전송 계층 보안(SSL/TLS) 프로토콜을 사용하여 다른 시스템에 대한 암호화된 네트워크 연결을 설정할 수 있도록 하는 디지털 객체입니다. 인증서는 퍼블릭 키 인프라(PKI)로 알려진 암호화 시스템 내에서 사용됩니다. 양쪽 모두가 인증 기관으로 알려진 타사를 신뢰하는 경우, PKI는 한쪽에서 인증서를 사용하여 다른 쪽의 자격 증명을 설정할 수 있는 방법을 제공합니다. 따라서 SSL/TLS 인증서는 네트워크 통신을 보호하고 인터넷을 통한 웹 사이트 및 프라이빗 네트워크의 리소스에 대한 아이덴티티를 설정하는 역할을 합니다.
[출처: AWS]
여기서는 M1 맥북으로 발급 받는데 어짜피 도커 이미지 자체가 X86, ARM 전부 지원하는 이미지라 리눅스(VM, WSL 포함)가 설치되어있는 시스템이라면 발급이 가능하다.
설정파일이라고 했지만 거창한게 없다. 이 부분은 이전에 ASUS 공유기에 Cloudflare DDNS를 적용하는 방법 - Cloudflare DNS API Token 생성하기를 참고하자. 토큰이 백업되어있다면 그거 그대로 사용하면 된다.
설정파일은 생성은 터미널로 진행하는데 그리 어렵지 않다. 인증서 발급용 디렉터리를 생성하고 거기에 텍스트 파일인 cloudflare.ini를 생성해서 발급받은 토큰을 넣고 저장하면 된다.
맥북 혹은 리눅스 계열의 터미널 등을 사용해서 진행하면된다. 터미널은 맥북기준 command + space 를 누르고 스포트라이트를 켜서 terminal 혹은 터미널 이라고 검색하면 알아서 잘 찾아준다. 물론 나는 iterm2를 사용한다.
# 아래의 명령어만 한줄씩 복사해서 입력하면 된다.
# CloudFlare_Certbot 디렉터리를 홈 디렉토리에 생성
mkdir ~/CloudFlare_Certbot
# CloudFlare_Certbot로 이동
cd ~/CloudFlare_Certbot
# cloudflare.ini 생성
touch cloudflare.ini
# cloudflare.ini 내용 수정을 위한 vi 편집기 실행
# 리눅스쪽이라 GUI 기반의 메모장 등은 사용하기 어렵다.
vi cloudflare.ini
cloudflare.ini 파일에 들어가는 내용은 아래와 같다. vi 편집기에서 i 혹은 a를 눌러서 편집 모드로 변경하고 아래의 내용을 복붙하면 된다.
# Cloudflare API token used by Certbot
dns_cloudflare_api_token = api_token
위의 내용에서 수정할 내용은 아래와 같다.
api_token 은 Cloudflare DNS API Token 으로 수정한다.
--> 예시: qwertyuiopasdfghjklzxcvbnm1234567890
내용이 정상적으로 수정되었다면 ESC를 누르고 :wq 혹은 :x를 입력하고 엔터를 눌러 저장 후 vi 편집기를 종료한다.
일반적으로 docker 명령어로 간단하게 할 수는 있지만 나는 관리의 편리함을 위하여 docker-compose를 사용하는 중이다. 명령어를 하나하나 기억하는 것도 일이라 파일 형식으로 남는 docker-compose가 있어서 아주 다행이라고 생각한다.
이것도 터미널에서 작성하면 된다. 그리 어렵지는 않으니 따라하면 된다.
# CloudFlare_Certbot로 이동
cd ~/CloudFlare_Certbot
# docker-compose.yml 생성
touch docker-compose.yml
# docker-compose.yml 내용 수정을 위한 vi 편집기 실행
# 리눅스쪽이라 GUI 기반의 메모장 등은 사용하기 어렵다.
vi docker-compose.yml
그리고 아래의 내용을 복사 & 붙여넣기하면 된다.
version: '3.1'
services:
certbot_cloudflare:
container_name: certbot_cloudflare
image: certbot/dns-cloudflare:v2.7.4
volumes:
- ./etc:/etc/letsencrypt
- ./var:/var/lib/letsencrypt
- ./cloudflare.ini:/cloudflare_certbot/cloudflare.ini
command: >
certonly --dns-cloudflare
--dns-cloudflare-credentials /cloudflare_certbot/cloudflare.ini
--dns-cloudflare-propagation-seconds 30
--email email
--agree-tos
-d domain
-d wildcard_domain
위의 내용에서 수정할 내용은 아래와 같다.
email 은 자신의 이메일 주소로 수정한다.
--> 예시:
email@email.com
domain 은 자신의 도메인으로 수정한다.
--> 예시:
example.com
wildcard_domain 은 자신의 와일드카드 도메인으로 수정한다.
--> 예시:
*.example.com
내용이 정상적으로 수정되었다면 ESC를 누르고 :wq 혹은 :x를 입력하고 엔터를 눌러 저장 후 vi 편집기를 종료한다.
docker-compose.yml 파일이 정상적으로 입력되었고 자신의 도메인이 Cloudflare에 등록되어있는 도메인이라면 그리 어렵지 않게 될 것이다.
# docker-compos를 포그라운드로 실행
docker-compose up
정상적으로 진행되었다면 위의 내용이 뜨면서 도커 컨테이너가 정상적으로 종료될 것이다.
그러면 홈 디렉터리 - CloudFlare_Certbot - etc - live - 도메인 디렉터리에 SSL/TLS 인증서가 저장되어 있을 것이다.
이 인증서를 나중에 내 시놀로지에 적용하는 방법을 포스팅할 예정이다. 이전에 있었던 내용을 가져오는 이전 글과는 다르게 새롭게 내용을 만들어야하다보니 조금 늦게 글을 올리게 되었다.
여러 목적으로 운영하던 서버가 일시적으로 사용이 불가능해졌는데 이때 같이 운영되던 HAProxy에서 리버스 프록시를 관장하고 있었다. 그런데 지금은 장비를 사용할 수 없고 DS1821+만 겨우 사용 가능한 수준이라 불편한 점이 많다. 하지만 그거라도 사용 가능한게 다행이라고 생각한다. 생각보다 시놀로지의 리버스프록시 기능도 그리 나쁘지 않고..