~☆~ 우하하!!~ 개발블로그

pfSense 내부의 VM에서 Let's Encrypt 인증서 발급 및 갱신하기 본문

개발환경

pfSense 내부의 VM에서 Let's Encrypt 인증서 발급 및 갱신하기

iwoohaha 2024. 11. 7. 10:50
반응형

pfSense 를 방화벽으로 설치하고, 내부 subnet 에 gitlab 등 다양한 서버를 구성하여 운영중이다.

gitlab 은 80 또는 443 포트가 아닌 특별 번호의 포트를 사용하여 구성하였다. 아래에서 설명의 편의를 위하여 특별 번호의 포트를 7788 로 가정한다.

 

gitlab 은 https 통신이 아니면 보안상 위험이 있으므로 SSL 통신되도록 구성하였고, SSL 통신 포트를 7788 로 잡았다.

pfSense 방화벽에서도 7788 이 아닌 포트로는 gitlab 을 설치한 VM 에 접근되지 못하도록 설정했다.

 

이 경우 gitlab 에서 사용할 SSL 인증서인 let's encrypt 인증서를 발급받고 갱신하기 위해서는 임시로 80과 443 포트 통신을 허용하도록 수동작업해주는 수 밖에 없었는데, chatGPT 의 도움으로 방법을 알게 되어 기록한다.

 

우선 해당 서버에 설정한 도메인이 woohahaapps.com 이고, gitlab VM에는 gitlab 서브도메인을 할당해놓은 상태이다.

해당 도메인의 DNS 정보는 cloudflare 를 이용하여 관리하고 있다.

 

Certbot 설치 (ubuntu)

sudo apt update
sudo apt install certbot

 

DNS 플러그인 설치 (cloudflare)

sudo apt update
sudo apt install certbot python3-certbot-dns-cloudflare

 

Cloudflare API 토큰 발급

[계정관리] - [계정 API 토큰] 메뉴로 이동한다.

 

 

토큰 생성 버튼을 클릭한다.

 

영역 DNS 편집 템플릿을 사용한다.

 

영역 리소스에서 대상 도메인을 선택한다.

토큰을 생성하고나서 값을 잘 보관해둔다.

이 토큰값을 아래 파일에 형식을 갖추어 저장한다.

/etc/letsencrypt/cloudflare.ini

sudo vi /etc/letsencrypt/cloudflare.ini

 

토큰값을 저장하는 형식은 다음과 같다.

dns_cloudflare_api_token = your_cloudflare_api_token

 

= 기호의 오른쪽에 your_cloudflare_api_token 의 자리에 발급받은 토큰값을 채워넣으면 된다.

 

아래 명령으로 /etc/letsencrypt/cloudflare.ini 파일의 권한을 제한하여 안전하게 보호한다.

sudo chmod 600 /etc/letsencrypt/cloudflare.ini

 

Let's Encrypt SSL 인증서 발급 (certbot)

아래 명령어를 사용하여 DNS-01 챌린지를 통해 인증서를 발급받는다.

sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini -d gitlab.woohahaapps.com

 

인증서 자동 갱신 설정

매일 동일한 시각에 인증서를 갱신하는 명령을 수행하기 위해서 cron job 을 등록한다.

cron 이 설치되어 있지 않은 경우라면 아래 명령어를 이용하여 설치한다.

sudo apt update
sudo apt install cron

 

cron 을 서비스로 등록하고, 재부팅시 자동으로 시작되도록 설정한다.

sudo systemctl enable cron
sudo systemctl start cron

 

아래 명령어로 cron job 을 등록하기 위한 편집창을 연다.

sudo crontab -e

 

편집창에 아래 job 명령을 등록한다.

0 0 * * * /usr/bin/certbot renew --quiet --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini --post-hook "sudo gitlab-ctl restart"

 

이제 매일 0시에 let's encrypt SSL 인증서를 갱신하는 job 이 동작한다.

위와 같이 DNS 에 연동하는 경우에는 인증서 발급 또는 갱신시에 포트 지정을 별도로 진행하지 않아도 된다.

 

반응형