Automatické sprístupnenie SSL certifikátov z NGINX Proxy Managera na e-mailový server
Východisková situácia
Tento návod popisuje riešenie, ako sprístupniť platný SSL certifikát pre e-mailový server, pričom certifikát sa generuje a obnovuje pomocou NGINX Proxy Managera (NPM), ktorý beží na inom zariadení v rámci LAN.
Architektúra:
- NGINX Proxy Manager (Docker) beží na samostatnom serveri (napr. VM) v LAN.
- Mailový server (napr. Mailu) beží na inom serveri (tiež VM) v tej istej sieti.
- Na mail serveri bežia služby ako Postfix a Dovecot, ktoré vyžadujú certifikáty vo forme
cert.pem
akey.pem
. - NGINX Proxy Manager spravuje Let’s Encrypt certifikáty, vrátane domény napr.
mail.tvojadomena.sk
.
Cieľ
Zabezpečiť, aby sa platný SSL certifikát z NGINX Proxy Managera každý deň automaticky skopíroval na mail server, kde ho môžu poštové služby čítať bez ďalších zásahov.
Vytvorenie skriptu na kopírovanie certifikátov
Všetky nasledujúce kroky vykonaj ako používateľ
root
, aby si predišiel problémom s oprávneniami pri prístupe k certifikátom aj pri spúšťaní skriptu cezcron
.
Prepni sa na root
:
sudo -i
Vytvor adresár pre skripty:
mkdir -p /SCRIPTS
Vytvor skript:
nano /SCRIPTS/copy_mail_ssh.sh
Vlož nasledujúci obsah:
#!/bin/bash
# Funkcia pre zistenie najnovšieho súboru podľa vzoru
newest_file_matching_pattern(){
find $1 -name "$2" -print0 | xargs -0 ls -1 -t | head -1
}
# Cesta k certifikátom – číslo npm-XX zistíš zo screenshotu nižšie
CERT_FOLDER="/home/youruser/nginx/letsencrypt/archive/npm-29/"
FULLCHAIN=$(newest_file_matching_pattern $CERT_FOLDER "fullchain*")
PRIVKEY=$(newest_file_matching_pattern $CERT_FOLDER "privkey*")
# Kopírovanie certifikátov na mail server
scp "$FULLCHAIN" youruser@mail-server:/home/youruser/certs/cert.pem
scp "$PRIVKEY" youruser@mail-server:/home/youruser/certs/key.pem
Ulož súbor (Ctrl+O
, Enter) a zatvor (Ctrl+X
).
Nastav spustiteľné práva:
chmod +x /SCRIPTS/copy_mail_ssh.sh
Prečo sa názvy certifikátov pri kopírovaní premenujú?
NGINX Proxy Manager ukladá certifikáty s číslami, napr.:
fullchain3.pem
privkey3.pem
Po každej obnove certifikátu vzniká nový súbor s vyšším číslom.
Mailové služby ako Postfix alebo Dovecot ale vyžadujú pevne zadané názvy – napr. cert.pem
, key.pem
.
Preto skript počas kopírovania súbory premenuje, aby boli na mail serveri vždy pod rovnakým názvom – bez potreby meniť konfiguráciu po každej obnove.
Ako zistiť správne číslo npm-XX
Certifikáty sa v NGINX Proxy Manageri ukladajú do zložky:
/home/youruser/nginx/letsencrypt/archive/npm-XX/
Číslo (npm-29
, npm-32
…) nájdeš podľa názvu domény v názve priečinka.
Priložený snímok obrazovky ukazuje, kde presne toto číslo nájdeš.
Cron úloha (automatické spúšťanie skriptu)
Ako root
uprav crontab
:
crontab -e
Na koniec pridaj:
0 0 * * * /SCRIPTS/copy_mail_ssh.sh
Tým zabezpečíš, že skript sa spustí každý deň o polnoci.
(Voliteľné) Bind mount na mail serveri
Na mail serveri môžeš vytvoriť bind mount, ktorý spojí cieľový adresár s certifikátmi do cesty, ktorú používajú poštové služby.
Záznam do /etc/fstab
:
/home/youruser/certs /DOCKER-DATA/certs none defaults,bind 0 0
Aktivácia mountu bez reštartu:
mount /DOCKER-DATA/certs
Príklad konfigurácie v Postfixe:
smtpd_tls_cert_file = /DOCKER-DATA/certs/cert.pem
smtpd_tls_key_file = /DOCKER-DATA/certs/key.pem
Nastavenie domény v NGINX Proxy Manageri
Aby NGINX Proxy Manager mohol vygenerovať certifikát pre mail server:
- Pridaj nový Proxy Host (napr.
mail.tvojadomena.sk
). - Nastav internú IP adresu a port mail servera alebo jeho web rozhrania.
- V sekcii SSL zaškrtni:
- Force SSL
- Vygeneruj certifikát pomocou Let’s Encrypt.
Priložené snímky obrazovky ti ukáže presne, ako to má vyzerať.
Overenie funkčnosti
- Spusť skript manuálne:
/SCRIPTS/copy_mail_ssh.sh
- Over, že na mail serveri vznikli súbory
cert.pem
akey.pem
- Reštartuj poštové služby:
systemctl restart postfix dovecot
- Sleduj logy, či nie sú problémy s TLS
Výsledok
- Certifikát sa generuje iba na NGINX Proxy Manageri.
- Na mail serveri je vždy aktuálny certifikát bez potreby Certbotu.
- Všetko je automatizované, prehľadné a spoľahlivé.
Priložené screenshoty:
- Zobrazenie adresára s certifikátmi (
npm-XX
) - Nastavenie domény v NGINX Proxy Manageri