자작나스 만들기 STEP 3 (transmission web https 설정)
HTTPS 인증서
Transmission 설정을 완료하고 실제로 사용할 사람들에게 공유하기에 앞서 해결해야할 문제가 하나 더 있었습니다.
Transmission web의 경우 외부 네트워크를 이용해서 접속을 할 것이며, 접속에 ID, PW를 이용할 것이기 때문에 오픈된 네트워크 환경에서 누군가 패킷을 탈취할 경우 비밀번호가 그대로 노출될 위험이 있었습니다. 그래서 서버에 HTTPS 인증서를 설정해야 했습니다.
먼저 HTTPS를 이용하기 위해서 도메인이 필요로 했고, 도메인은 개인적으로 친숙한 AWS를 ROUTE53을 통해서 개인 도메인을 구매했으며, 인증서 발행은 Let's encrypt를 이용하기로 하였습니다. 무료이기도 하고, 자동 갱신을 설정할 수 있으며, 편하다! 실제로 이전에 사용하던 Synology NAS도 Let's encrypt를 이용하여 https 인증서를 발급받고 있었습니다.
Nginx를 이용한 라우팅 설정
여러 유저에게 transmission을 오픈하기 위해 유저별로 서비스를 돌리도록 설정을 했었고, 그러다보니 각 서비스별로 다른 포트로 구동이 되어있는 상태입니다. 이를 https의 기본 포트인 443으로 받아서 내부 포트로 포워딩을 해주는 방식으로 Nginx를 구성해 보았습니다.
/etc/nginx/conf.d/default.conf
server {
server_name usera.mydomain.org
root /usr/share/nginx/html;
include /etc/nginx/default.d/*.conf;
listen 443 ssl;
location / {
proxy_pass http://127.0.0.1:13003;
}
유저별로 서브도메인은 분리하고, 이 조건을 이용해서 내부의 별도의 포트로 연결시켜주는 세팅입니다.
Let's encrypt
Let's encrypt 인증서는 발급받기 위한 script들이 잘되어있는 걸 느꼈습니다.
certbot을 이용하면 인증서가 발급이 되고, nginx conf까지 자동으로 수정해줍니다.
certbot 설치
sudo snap install --classic certbot
certbot을 이용하여 인증서 발급
sudo certbot --nginx -d usera.mydomain.org
발급과정에서 나오는 부분들은 http(80포트) redirect 설정이나 .well-known directory를 통한 도메인 인증은 가이드에 따라 설정을 해주면 어렵지 않게 발급받을 수 있습니다.
자동 갱신 설정
sudo openssl x509 -enddate -noout -in /etc/letsencrypt/live/user.mydomain.org/fullchain.pem
notAfter=Jul 23 12:39:44 2022 GMT
인증서를 발급받고 나면 인증서의 유효기간을 위 커멘트로 체크해볼 수 있습니다. 일반적인 몇년 단위의 인증서와는 달리 기간이 짧습니다. 그러므로 추후에도 관리를 하지 않아도 되도록 갱신 script를 crontab과 같은 tool을 이용하여 자동화를 시키는 게 편리합니다.
sudo certbot --nginx --redirect --renew-by-default -d usera.mydomain.org
갱신을 위한 명령어는 간단합니다. 위와 같이 실행만 해주게되면 인증서가 갱신됩니다.
이제 이를 crontab으로 한달에 한번 정도 수행되도록 등록을 해두었습니다.
$ cat /bin/nginx-cert-update.sh
certbot --nginx --redirect --renew-by-default -d userA.mydomain.org
certbot --nginx --redirect --renew-by-default -d userB.mydomain.org
위와 같이 script를 하나 만들고 crontab에 command로 이를 연결해주게 되면 끝입이다!