Automatické sprístupnenie SSL certifikátov z NGINX Proxy Managera na e-mailový server

:open_mailbox_with_raised_flag: Automatické sprístupnenie SSL certifikátov z NGINX Proxy Managera na e-mailový server

:puzzle_piece: 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 a key.pem.
  • NGINX Proxy Manager spravuje Let’s Encrypt certifikáty, vrátane domény napr. mail.tvojadomena.sk.

:bullseye: 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.


:one: 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 cez cron.

:locked_with_key: Prepni sa na root:

sudo -i

:file_folder: Vytvor adresár pre skripty:

mkdir -p /SCRIPTS

:memo: Vytvor skript:

nano /SCRIPTS/copy_mail_ssh.sh

:page_facing_up: 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).

:white_check_mark: Nastav spustiteľné práva:

chmod +x /SCRIPTS/copy_mail_ssh.sh

:red_question_mark: 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.

:right_arrow: 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.


:magnifying_glass_tilted_right: 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.
:right_arrow: Priložený snímok obrazovky ukazuje, kde presne toto číslo nájdeš.


:two: 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.


:three: (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.

:wrench: Záznam do /etc/fstab:

/home/youruser/certs /DOCKER-DATA/certs none defaults,bind 0 0

:green_circle: Aktivácia mountu bez reštartu:

mount /DOCKER-DATA/certs

:light_bulb: Príklad konfigurácie v Postfixe:

smtpd_tls_cert_file = /DOCKER-DATA/certs/cert.pem
smtpd_tls_key_file  = /DOCKER-DATA/certs/key.pem

:four: Nastavenie domény v NGINX Proxy Manageri

Aby NGINX Proxy Manager mohol vygenerovať certifikát pre mail server:

  1. Pridaj nový Proxy Host (napr. mail.tvojadomena.sk).
  2. Nastav internú IP adresu a port mail servera alebo jeho web rozhrania.
  3. V sekcii SSL zaškrtni:
    • Force SSL
  4. Vygeneruj certifikát pomocou Let’s Encrypt.

:right_arrow: Priložené snímky obrazovky ti ukáže presne, ako to má vyzerať.


:test_tube: Overenie funkčnosti

  • Spusť skript manuálne: /SCRIPTS/copy_mail_ssh.sh
  • Over, že na mail serveri vznikli súbory cert.pem a key.pem
  • Reštartuj poštové služby: systemctl restart postfix dovecot
  • Sleduj logy, či nie sú problémy s TLS

:white_check_mark: 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é.

:paperclip: Priložené screenshoty:

  • Zobrazenie adresára s certifikátmi (npm-XX)
  • Nastavenie domény v NGINX Proxy Manageri