Bash na přidání LE certifikátu pro POSTFIX a DOVECOT

Mnoho z Vás by možná rádo nabídlo zákazníkům, nebo klientům stahovat si poštu z Vašeho VPS přes Outlook, nebo Thunderbird.


To je ale podmíněno tím, že musíte mít přístupný POSTFIX a DOVECOT z SSL portů.
Řešení je hned několik, já si oblíbil tohle:

  • Nasměřujte si subdoménu smtp.{mojedomena.cz} na svoje VPS
  • Nasměřujte si subdoménu pop3.{mojedomena.cz} na svoje VPS
  • Nasměřujte si subdoménu imap.{mojedomena.cz} na svoje VPS
  • Vytvořte si NGINX config, nebo Apache, nebo jakokoliv jinou webovou službu s VHOSTem pro subdomény výše uvedené, tak ať je můžete směřovat do adresáře
  • Nastavte si POSTFIX a DOVECOT aby poslouchal na zabezpečených portech
  • Nasměřujte si všechny domény do adresáře např.: /var/www/html, nebo jakýkoliv jiný, jen si to pak upravte v BASHi
  • Jestli používáte ISPconfig, tak si do něj přidejte tabulku smtp_domains (nebo jakokoliv jinou, jen ať má sloupce id a smtp_domain)
  • Jednorázově si vygenerujte svůj certifikát, např.: smtp.myvps.com a vložte jej do bashe. Tento certifikát bude zapsaný „natvrdo“ v POSTFIX a DOVECOT config file
  • Pro postfix použijte vygenerovaný certifikát následovně:
    • # TLS parameters smtpd_tls_cert_file = /etc/letsencrypt/live/smtp.myvps.com/cert.pem smtpd_tls_key_file = /etc/letsencrypt/live/smtp.myvps.com/privkey.pem smtpd_tls_CAfile = /etc/letsencrypt/live/smtp.myvps.com/fullchain.pem smtpd_use_tls = yes
  • Vytvořte si file /etc/postfix/mysql-mydomains.cf
  • Naincludujte si jej do /etc/postfix/main.cf na řádku mydestination = localhost, localhost.localdomain, proxy:mysql:/etc/postfix/mysql-mydomains.cf
  • Nyní si spousťte script ve tvaru „mujBash.sh smtp.klientovadomena.cz“
  • Certifikát Vašeho serveru smtp.myvps.com se rozšíří o zadaný

Script si reloadne službu a natahne si virtual domains z tabulky v MYSQL tím se vám, celý proces rozšiřování certifikátu u domén podstatně zjendoduší.
Podobně se dá postupovat i u dovecotu a dalších. Návod slouží, jako vodítko, aby Vás nakoplo k vlastnímu řešení.

!#/bin/bash

DOMAINS="$(certbot-auto certificates --cert-name $MY_SMTP_DOMAIN | grep 'Domains:')"
DOMAINS=${DOMAINS:13}
DOMAINS=${DOMAINS// /,}
if [[ $DOMAINS == *"$NEW_DOMAIN"* ]]; then
    echo "INSERT INTO smtp_domains (id, smtp_domain) VALUES (NULL, '${NEW_DOMAIN}');" | mysql -u$MYSQL_DATABASE -p$MYSQL_PASS $MYSQL_USER
    echo "SMTP certifikát pro doménu $NEW_DOMAIN byl úspěšně vygenerován!" 
    service postfix reload  
else
    echo "Nastala chyba při generování certifikátu! Prosím opakujte akci za chvíli!"
fi