J-한솔넷

기록 보관 : iRedMail이용한 메일서버 SSL 설정 본문

웹 개발관련/서버

기록 보관 : iRedMail이용한 메일서버 SSL 설정

jhansol 2024. 1. 22. 21:52

저의 개인 홈페이지에 있던 내용을 옮겨 기록하고자 합니다. 제가 게으른 탓에 활용하기 힘들고 유지를 하기에 금전적으로도 낭비다 생각되어 님길 것은 남기고, 버릴 것은 버리고 사이트를 없에기 위함입니다. 기존 내용 그대로 아래와 같이 옮겼습니다.


앞의 과정에서 iRedMail을 설치는 완료했다. 그러나 아직 미완이다. 매일이 외부에서 정상 수용되도록 하기 위해서는 SSL, SPF, DKIM 등을 설정해야 한다. 그리고 아울러 DNS PTR 레코드 등록 여부도 확인을 해야 한다. 이번에는 그 첫째로 SSL 설정할 것이다.

설정 전 검토 사항

hostname 설정

앞에서 매일서버 설치과정에서 호스트 이름 및 도매인 설정을 완료했을 것이다. 만일 안되어 있다면 확인하고 해주어야 한다. 아래 명령으로 완전한 도매인 주소가 출력된다면

hostname -f
mail.jhansol.net

DNS 설정

SSL 설정을 하기 위해서는 도매인 또는 호스트 단위의 인증서를 받아야 한다. 인증서를 받기 위해 우리의 매일서버가 DNS 서버에 등록되어 도매인 주소로 접속 가능해야 한다. 설정하였다면 아래와 같이 접속 가능한지 점검한다.

$ dig +short -t a mail.jhansol.net
158.247.225.200

$ nslookup mail.jhansol.net
Server:        168.126.63.1
Address:    168.126.63.1#53

Non-authoritative answer:
Name:    mail.jhansol.net
Address: 158.247.225.200

인증서 발급

나는 인증서를 Lets Encrypt 의 무료 인증서를 받아 사용한다. 인증서의 만기가 3개월 단위라 만료되기 전에 주기적으로 갱신을 해주어야 한다는 단점이 있기는 하지만 무료로 발급 받을 수 있어 참 좋다.

Certbot 설치

인증서를 발급 받기 위해서는 Certbot이라는 클라이언트 프로그램이 설치되어 있어야 한다. 설치 방법 및 사용법은 공식 사이트(https://certbot.eff.org/)에서 운영체제 및 웹 서비스 데몬의 종류를 선택하여 확인할 수 있다. 사이트의 안내에 따라 설치까지만 진행한다. 나머지 부분은 아래 설명을 참고한다.

인증서 발급

아래와 같이 명령을 입력하여 인증서를 발급 받는다. Certbot을 처음 사용하는 경우 이매일 주소를 입력하로고 나올 것이다. 입력된 이매일 주소는 인증서의 만료 기간 임박 안내, 관리 등의 목적으로 사용되는 만큼 반드시 입력해야 한다.

$ certbot certonly --webroot -w /var/www/html -d mail.jhansol.net

위 명령으로 인증서는 발급된다. "/etc/letsencrypt" 폴더 아래에 "archive" 폴더에 발급 도매인 이름으로 폴더가 생성되고 폴더 속에 인증서 파일이 생성되게 된다. 그러나 그러나 이 파일들은 관리자 계정 소유이고 "live" 폴더와 "archive" 폴더는 소유자 외에는 접근할 수 없도록 설정되어 있다. 그러므로 각각의 계정으로 실행되는 서비스 데몬은 이 파일에 접근할 수 없게된다.

그래서 아래와 같이 두 폴더에 모든 사용자가 접근하여 읽을 수 있도록 해야 한다.

$ cd /etc/letsencrypt
$ chmod 0755 live archive

인증서 갱신 예약 설정

이 글을 적으면서 나의 인증서 발급 일자를 보니 올해 8월 21이다. 그래서 2개월 단위로 갱신하도록 할 것이다. 아래와 같이 crontab을 실행하고 설정한다.

$crontab -e

Select an editor.  To change later, run 'select-editor'.
  1. /bin/nano        <---- easiest
  2. /usr/bin/vim.basic
  3. /usr/bin/vim.tiny
  4. /bin/ed

편집기를 통해 보니 이매일관련 예약설정이 꽤 되어 있다. 나는 맨 아래에 인증서 갱신 명령을 넣어 두었다.

0 0 21 2,4,8,10,12 *  /usr/bin/certbot renew --post-hook '/usr/sbin/service postfix restart; /usr/sbin/service nginx restart; /usr/sbin/service dovecot restart'

인증서 적용

발급 과정을 마치면 "/etc/letsencrypt/archive/발급도매인" 폴더에 인증서, 개인키, 풀체인 파일들이 저장되어 있다. 한편 "/etc/letsencrypt/발급도매인" 폴더에는 "archive" 폴더의 인증서 파일 중 현재 사용하는 파일이 심블릭 링크되어 있다.

그리고 iRedMail을 설치하게되면 "/etc/ssl/certs" 폴더에 "iRedMail.crt" 파일이 저장되어 있고, "/etc/ssl/private" 폴더에 "iRedMail.key" 파일이 저장되어 있다. 그리고 이 두 파일이 설치된 매일 솔루션에 모두 적용되어 있다.

나는 이 두 파일을 다른 이름으로 변경해두고 위에서 발급받은 인증서를 심블릭 링크로 연결할 것이다.

기존 인증서 백업

아래와 같이 이름을 변경해둔다.

$ mv /etc/ssl/certs/iRedMail.crt /etc/ssl/certs/iRedMail.crt.bak
$ mv /etc/ssl/private/iRedMail.key /etc/ssl/private/iRedMail.key.bak

그리고 아래와 같이 발급받은 인증서를 "iRedMail.crt"와 "iRedMail.key"에 심블릭 링크한다.

$ ln -s /etc/letsencrypt/live//etc/letsencrypt/live/mail.jhansol.net/fullchain.pem /etc/ssl/certs/iRedMail.crt
$ ln -s /etc/letsencrypt/live//etc/letsencrypt/live/mail.jhansol.net/privkey.pem /etc/ssl/private/iRedMail.key

서비스 재실행

이재 아래의 서비스 데몬을 재실하기만하면 끝이다.

$ service postfix restart
$ service dovecot restart
$ service nginx restart