iRedMail Let’s Encrypt SSL

Długo się zbierałem żeby napisać kilka słów jak zabezpieczyć iRedMail wykorzystując Let’s Encrypt. Uprzedzam ,że opis jest oparty na dystrybucji debian z serwerem web nginx. Proces jak zainstalować iRedMail na systemie debian 11 znajdziesz tu o ile nie wprowadzam żadnych zmian – uaktualnień to temat jest aktywny. Przejdźmy do sedna! Zanim zaczniesz instalować Let’s Encrypt pamiętaj że rekord A w dns musi wskazywać na serwer na którym znajduje się iRedMail. W pierwszej kolejności instalujemy Let’s Encrypt SSL:

sudo apt update
sudo apt install certbot

zatrzymujemy nginx:

sudo systemctl stop nginx

następnie wykonujemy komendę jak poniżej – zamień moja domena i mój adres email na twój własciwy!

sudo certbot certonly --standalone -d mail.twojadomena.pl --preferred-challenges http --agree-tos -n -m twój@adresemail.pl --keep-until-expiring

Jak wszystko jest w porządku powinieneś otrzymać taki komunikat:

IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/mail.twojadomena.pl/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/mail.twojadomena.pl/privkey.pem
Your cert will expire on 2023-05-05. To obtain a new or tweaked
version of this certificate in the future, simply run certbot-auto
again. To non-interactively renew *all* of your certificates, run
"certbot-auto renew"
- If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

Kolejnym krokiem będzie nauczenie serwera poczty wykorzystać nasz nowy certyfikat. W tym celu robimy archiwum naszego oryginalnego certyfikatu:

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

następnie utworzymy dowiązanie aby nasz serwer używał certyfikatów letsencrypt (zmień mail.mojadomena.pl na swoją):

ln -s /etc/letsencrypt/live/mail.mojadomena.pl/privkey.pem /etc/ssl/private/iRedMail.key
ln -s /etc/letsencrypt/live/mail.mojadomena.pl/fullchain.pem /etc/ssl/certs/iRedMail.crt

podmieniamy w postfix i dovecot certyfikaty na nasze nowo utworzone:

postconf smtpd_tls_cert_file smtpd_tls_key_file
# smtpd_tls_cert_file = /etc/ssl/certs/iRedMail.crt
# smtpd_tls_key_file = /etc/ssl/private/iRedMail.key

doveconf ssl_key ssl_cert
# ssl_key = </etc/ssl/private/iRedMail.key
# ssl_cert = </etc/ssl/certs/iRedMail.crt

restartujemy postfix i dovecot:

service postfix reload
service dovecot reload

i uruchamiamy nginx:

service nginx start

Teraz pozostaje nam dodać do cron zadanie by nasz certyfikat za trzy miesiące na 100% został odnowiony:

sudo crontab -e
# Renew Let's Encrypt certs
15 3 * * * /usr/bin/certbot renew --pre-hook "systemctl stop nginx" --post-hook "systemctl start nginx"

Jeżeli wszystko jest ok to nasz serwer poczty jest zabezpieczony nowym certyfikatem ale nalezy jeszcze zrestartować nasz serwer:

sudo reboot

, wymuszając natomiast zadanie cron powinniśmy otrzymać taki komunikat:

Output from command /usr/bin/certbot renew --pre-hook "systemctl stop nginx" --post-hook "systemctl start nginx" ..

Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/mail.twojadomena.pl.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert not yet due for renewal

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
The following certificates are not due for renewal yet:
/etc/letsencrypt/live/mail.twojadomena.pl/fullchain.pem expires on 2023-05-05 (skipped)
No renewals were attempted.
No hooks were run.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

to by było na tyle!