들어가기에 앞서
안녕하세요.
Synology DS220+ 구매한 뒤로 Bitwarden, WebDAV, … 다양한 용도로 사용하고있습니다.
이전까지는 DuckDNS와 함께 DSM 6.X 사용중이었습니다만, DSM 업데이트 이후로 만들어두었던 자동화 프로세스가 동작하지 않더라구요.
이번 기회에 갖고싶던 Domain을 CloudFlare에서 Domain 구매를 한 뒤, 새롭게 프로세스를 정리하였습니다.
공식 가이드 대로 진행했던 과정을 순차적으로 정리하려고 합니다.
Domain 구입과 DDNS 설정에 대한 내용은 기회가 되면 작성하도록 하겠습니다.
사용한 환경
- DSM 7.X
- Synology DS220+
- Domain Provider : CloudFlare
Let’s Encrypt란?
HTTPS를 사용할 때는 CA(인증기관)에서 제공하는 인증서를 사용합니다.
원하는 도메인으로 인증서를 발급하고자 할때, 업체마다 다른 가격을 지불해야합니다.
Let’s Encrypt는 비영리 기관으로서 무료로 TLS인증서를 제공합니다.
장점은 무료로 인증서를 제공받을 수 있지만,
단점으로는 타업체는 유효기간이 1년인데 비해 짧은 3개월이라는 점입니다.
acme.sh 는 뭔가요?
Let’s Encrypt는 ACME 프로토콜을 사용하여 도메인 소유자인지 확인한 뒤에 인증서를 발급합니다.
인증서 발급을 위해서는 ACME 클라이언트 소프트웨어를 선택해야하는데요.
CertBot
사용을 권장하지만, 상황에 따라 다른 소프트웨어를 선택할 수 있습니다.
acme.sh
는 bash를 사용해 인증서를 발급해 줄 수 있는 대체 소프트웨어입니다.
본인의 선호도에 따라 선택할 수 있습니다.
상세한 내용은 공식문서를 참고해주세요.
CloudFlare API Token 발급
인증서 발급 절차에 대해 정확하게 알지는 못해도, 파악한 흐름은 아래와 같습니다.
- 원하는 Domain의 인증서 발급 요청 (to Let’s Encrypt)
- 해당 Domain의 소유자임을 증명하기 위해 TXT Record값을 응답값으로 받음
- CloudFlare API를 사용하여 TXT Record 값을 등록
- TXT Record값을 확인한 후, 인증서 발급
위 과정에서 사용되는 CloudFlare API를 사용하기위해 Token 발급을 진행합니다.
Global Key로도 사용가능하지만, 필요이상의 권한을 가지고 있기때문에 진행하진 않습니다.
token을 발급하고자 하는 Domain을 선택하면, 아래의 같은 Home 화면이 나타납니다.
빨간색 화살표를 클릭합니다.
API Token 생성 버튼을 누르면, 아래의 같은 페이지가 나타나게됩니다.
우리는 DNS 관련된 수정 권한을 Token을 발행해야하기 때문에, 빨간색 화살표의 버튼을 누릅니다.
아래의 이미지에서 1번에 권한이 필요한 Domain을 선택합니다.
그뒤에는 2번을 선택해 바로 생성하도록 합니다.
정상적으로 진행되었다면, Token값을 확인할 수 있습니다.
이 값은 더이상 볼 수 없기 때문에 잘 기억해주시기 바랍니다.
ACME 설치 및 인증서 발급
인증서 발급을 진행해줄 Client를 설치하도록 하겠습니다.
아래의 명령어대로 설치를 진행하도록 합니다.
계정은 root로 진행합니다.
|
|
이제 인증서 생성을 진행해 볼텐데요.
아래의 환경 변수들을 만들어 줍니다.
|
|
아래의 명령어들을 실행해서 인증서를 생성해보겠습니다.
|
|
위의 마지막 명렁어를 실행했을때, 에러없이 마무리되었다면 정상적으로 된 것입니다.
만약 email을 update하라는 문구가 출력된다면 아래처럼 진행해주세요.
|
|
혹여나 문제가 생긴다면 댓글로 문의주세요.
기본 인증서 교체
신규로 생성한 인증서를 기본 인증서로 교체해보겠습니다.
|
|
Success가 출력된다면, 정상적으로 마무리된 것입니다.
시놀로지 제어판-> 보안 -> 인증서
로 들어가서 잘 등록되었는지 확인해봅니다.
또는 브라우저에서 DSM에 접속한 뒤 새로고침해서 인증서 정보를 확인해주세요.
만약 OTP를 설정해두셨다면, 위 과정을 진행하면서 SYNO_TOTP_SECRET
값을 설정해주라는 출력과 함께 에러가 발생할 것입니다.
관리자 계정으로 로그인 할때, OTP 인증을 거치게 설정을 해두었기때문에 당연하다고 볼 수 있습니다.
출력된 메시지대로 값을 지정해주는 것도 방법이겠지만, 중요한 정보이기 때문에 선뜻 작성하기엔 내키지 않습니다. (관리자 뚫리면 어차피 소용없지만, 괜히 그렇더라구요..;;)
이를 대체할 수 있는 값이 있는데, SYNO_DID
입니다.
DeviceID값을 의미합니다. 이 값을 얻기위해서는 DSM에 로그인시 Remember this device
에 체크한 후, 관리자 계정으로 로그인하면 Cookie로 저장됩니다.
개발자 모드로 들어가서 이 값을 복사한뒤, 환경변수로 지정해 줍니다.
위의 설명한 방식은 http 프로토콜을 사용하여 localhost에 인증서 교체 요청을 합니다.
특별히 문제될건 없지만, 혹~~~~~시나 무조건 https 프로토콜을 사용해야한다!!! 라고 생각하시는 분이 계시다면
아래의 2개 환경변수를 지정해준뒤, --insecure
argument를 추가한뒤 실행해주면 https 프로토콜을 사용하게 됩니다.
|
|
인증서 갱신 스케줄러 설정
인증서 유효기간이 3개월이기 때문에, 3개월마다 갱신작업을 해주어야합니다.
하지만 이 작업을 매번 수행하기엔… 놀랍도록 귀찮습니다.
만료일에 가까워지면 갱신해야되는 초조함은 덤 입니다.
이 번거로운 일에서 벗어나기 위해 자동화를 하겠습니다.
제어한 -> 서비스 -> 작업 스케줄러 -> 생성 -> 예약된 작업 -> 사용자 정의 스크립트
를 순서대로 선택합니다.
이미지로는 아래와 같습니다. 빨간원 숫자 순서대로 진행합니다.
하나의 팝업창 나타날텐데요.
이미지처럼 3가지 값을 확인해줍니다.
DSM6 버전까지는 root
로 진행해야 인증서 교체가 가능했는데요.
7 버전에서 다른계정으로 실행해도 되는지 테스트 해보진 않았습니다.
다음으로는 언제실행할지 스케줄을 지정할 차례입니다.
이미지처럼 설정할 경우 매주 토요일 오전 1시에 갱신을 시도하려고 할겁니다.
선호하는 요일, 시간을 지정해주세요.
매달 실행할 수 있게 변경 가능하지만, 갱신은 만료 1개월 전부터 가능합니다.
첫번째이자 마지막 갱신 시도하는 날에 모종의 이유로 실패할 경우, 위에서 진행하셨던걸 다시해주셔야합니다.
그래서 안전하게 매주 실행하도록 설정했습니다.
다음으로는 실행할 스크립트를 지정하는 단계입니다.
알림 설정해두신 분이라면, 실행 상세정보를 이메일로 보내기
를 체크해주면 좋습니다.
잘 실행되는걸 메일 오는것으로 확인할 수 있을 테니까요.
저의경우에는 메일 대신에 텔레그램으로 메시지 오도록 변경했습니다. 이와 관련해서는 따로 포스트 하겠습니다.
사용자 정의 스크립트는 이미지처럼 인증서를 갱신하는 스크립트를 넣어줍니다.
간단합니다. 한줄의 커맨드만 입력해주면 됩니다.
|
|
이제 설정 완료하시면 아래의 같은 팝업이 출력됩니다.
사뿐히 확인버튼 눌러주시면 됩니다.
알림 외에도 실행한 로그를 확인하고 싶으실수 있는데요.
아래 이미지처럼 로그 경로를 설정할 수 있습니다.
저의경우에 log
디렉토리로 지정했습니다.
이와같이 지정했을 경우 스케줄러 로그는 /volume1/log/synoscheduler
경로에 저장됩니다.
우리가 실행한 작업의 로그는 /volume1/log/synoscheduler/${task_number}/${실행시간}
경로에서 확인하실수 있습니다.
task_number
는 스케줄러가 몇번째로 만들어졌는지 의미하는 값으로 보입니다.
output.log
는 실행하며 출력된 결과이고, script.log
는 실행한 스크립트를 볼 수 있습니다.
정리
왜 이렇게 까지 해야되나 궁금해 하실수도 있습니다.
집에서만 사용하도록 하신경우라면 이 과정 전혀 필요없습니다. 왜냐하면 외부에서 접근이 불가능하니까요.
하지만 외부에서 접근을 허용하는 경우라면 이야기가 달라집니다.
설정을 해두신 시점 이후로, 수시로 타국가에서 접근을 시도합니다. 보안 허점을 찾으려고 하는 거죠.
http 통신은 보안상 문제가 있기 때문에, 이 상황에서 http를 사용해서 외부에서 접근하면… 더 이야기 안해도 아실거라 생각합니다.
이러한 이유로 https를 사용하게된거고, 최소한의 방어수단을 갖춘 셈입니다.
여튼 여기까지 진행하셨다면, CloudFlare의 Domain에 TLS인증서 기반의 https를 사용할 수 있는 환경을 만드신 겁니다.
진행하느라 고생 많으셨습니다.👏👏
저도 이번에 새롭게 설정하다보니, 자동 갱신이 잘 되는지는 확인하진 못했습니다.
2개월 뒤에 내용을 보충 하도록 하겠습니다.