[NAS 구축] 9. HAProxy에 Let’s Encrypt SSL 인증서 적용

NAS 자작의 종장이다.
HAProxy에 SSL 인증서를 적용해보자.
참고로 이미 와일드카드 SSL 인증서를 발급했다는 걸 전제로 글을 작성한다.

필자의 NAS에는 이미 와일드카드 SSL 인증서를 통해 WebDAV(apache)가 https로 서비스되고 있다.
하지만 이제부터는 HAProxy가 SSL 인증을 하게 되니 HAProxy 뒷단의 모든 서비스들은 SSL 인증이 필요하지 않게 된다.

SSL 키 병합

우선 Let’s Encrypt SSL 인증서를 HAProxy에서 사용할 수 있도록 병합한다.
풀체인키와 프라이빗키를 차례대로 병합하면 된다.

$ sudo bash -c "/etc/letsencrypt/live/<Domain>/fullchain.pem /etc/letsencrypt/live/<Domain>/privkey.pem > /etc/haproxy/certs/ssl.pem"

안타깝게도 이 작업은 SSL 인증서가 자동갱신되는 경우 마찬가지로 반복되어야 한다.
이를 위해 다음과 같이 cron을 수정해줄 수 있을 것이다.

# sudo crontab -e
> 0 4 * * 0 /usr/local/bin/certbot renew --dns-route53
> 5 4 * * 0 /usr/sbin/cat /etc/letsencrypt/live/nas.hooni-playground.com/fullchain.pem /etc/letsencrypt/live/nas.hooni-playground.com/privkey.pem > /etc/haproxy/certs/ssl.pem
> 6 4 * * 0 /usr/bin/systemctl restart httpd

원래는 따로 스크립트를 만들어 실행하는 것이 좋으나 귀찮은 관계로 세 줄에 걸쳐 cron을 작성했다.

HAProxy SSL 적용

본래 443포트에서 운영되던 웹서비스를 HAProxy 뒷단에서 운영해보고자 한다.
WebDAV가 예시가 될 수 있을 것이다.

HAProxy 서버에 SSL을 적용하기 때문에 기존의 웹서비스는 다시 http 기반으로 변경되어야 한다.
필자의 경우 기존의 서비스가 다시 80포트를 사용하도록 변경하였다. (80포트는 오픈되지 않음)

이제 오픈되어있지 않은 80포트의 서비스를 aaa.hooni-playground.com:443을 통해 접근할 수 있게 해보자.
이를 위해 /etc/haproxy/haproxy.cfg를 다음과 같이 수정한다.

global
        ca-base /etc/haproxy/certs  # 병합된 SSL 키가 위치하는 디렉터리
        crt-base /etc/haproxy/private  # 어차피 현재 설정에서는 사용하지 않는다

frontend https
        mode http
        bind :443 ssl crt /etc/haproxy/certs/ssl.pem  # Listen 포트와 SSL 키 위치
        acl is_aaa hdr_end(host) -i aaa.hooni-playground.com  # 접근제어를 위한 도메인네임
        use_backend aaa if is_aaa

backend aaa
        balance roundrobin
        server server1 127.0.0.1:80

이후 aaa.hooni-playground.com를 DNS에 등록하여 hooni-playground.com의 CNAME을 가르키도록 설정하자.
이제 aaa.hooni-playground.com을 443 포트로 접속하면 hooni-playground.com 서버의 80포트에서 운영되는 서비스에 접속할 수 있다.
물론 예시기 때문에 실제로는 접속해봐야 아무런 응답도 없을 것이다.

Series Navigation<< [NAS 구축] 8. HAProxy를 이용한 포트 도메인네임 매핑

댓글 남기기