letsencrypt na Slackware
Posted on Mon 01 April 2019 in Linux, Wirtualizacja • 3 min read
Generowanie certyfikatów LetsEncrypt na dystrybucji Slackware nie jest możliwe za pomocą domyślnego skryptu urzędu czyli Certbota.
Z pomocą przychodzi napisany, zdaje się w Bashu, skrypt dehydrated. Poniżej opisuję jego jak najszybsze i bezproblemowe (ha!) użycie.
W niniejszym artykule pokazuję jak generować certyfikaty dla dwóch serwerów, jeden z nich to serwer www, drugi to serwer pocztowy.
Problem w tym, że oba serwery to dwie, oddzielne (wirtualne) maszyny, posiadające karty sieciowe skonfigurowane w sieci lokalnej:
test.zz i www.test.zz ma adres 192.168.7.80 mail.test.zz ma adres 192.168.7.25
Ruch na obie maszyny przekierowany jest na firewallu z adresem publicznym w taki sposób, że port 80 na łączu WAN wskazuje na 192.168.7.80:80, a porty protokołów pocztowych (IMAP, POP, SMTP, itp.) wskazują na odpowiednie porty maszyny 192.168.7.25.
Maszyną na której generuję certyfikaty jest: mail.test.zz czyli 192.168.7.25.
Instalacja polega na pobraniu archiwum, rozpakowaniu i skopiowaniu skryptu dehydrated np. do /usr/local/bin.
Tworzę katalog z konfiguracją skryptu: /etc/dehydrated i kopiuję do niego 3 pliki konfiguracyjne:
mkdir /etc/dehydrated/ cp ./docs/examples/* /etc/dehydrated/. ls -1 /etc/dehydrated/ config domains.txt hook.sh*
W pliku /etc/dehydrated/config mam następujące linie:
IP_VERSION=4 CA="https://acme-staging.api.letsencrypt.org/directory" BASEDIR=/etc/dehydrated WELLKNOWN="/var/www/dehydrated" HOOK=${BASEDIR}/hook.sh CONTACT_EMAIL=admin@test.zz
Plik /etc/dehydrated/domains.txt zawiera następujące wpisy:
test.zz www.test.zz mail.test.zz
W pliku /etc/dehydrated/hook.sh dodałem tylko kilka linii. Muszą się one znaleźć w sekcji: deploy_ocsp() { } (pomiędzy nawiasami klamrowymi):
# przeladuj Dovecot i Postfix if [ "$DOMAIN" = "mail.test.zz" ] then /etc/rc.d/rc.postfix restart /etc/rc.d/rc.dovecot restart fi
# reload Apache if [ "$DOMAIN" = "test.zz" ] then /etc/rc.d/rc.httpd restart fi
Po zalogowaniu się na tym serwerze, który działa pod Debianem, jako root tworzę folder /var/www/dehydrated. Do konfiguracji serwera Apache dodaję nowy plik: /etc/apache2/conf-available/dehydrated.conf z taką zawartością:
Alias /.well-known/acme-challenge /var/www/dehydrated <Directory /var/www/dehydrated> Options None AllowOverride None # Apache 2.x <IfModule !mod_authz_core.c> Order allow,deny Allow from all </IfModule> # Apache 2.4 <IfModule mod_authz_core.c> Require all granted </IfModule> </Directory>
Aktywuję i przeładowuję konfigurację:
a2enconf dehydrated systemctl reload apache2
Testuję czy konfiguracja działa:
echo "Jak widać konfiguracja działa. Ponie" > /var/www/dehydrated/test.txt curl http://mail.test.zz/.well-known/acme-challenge/test.txt
waż folder znajduje się na serwerze www, a ja instaluję certyfikat na serwerze pocztowym, muszę mieć dostęp do tego folderu z serwera poczty. I to dostęp z możliwością zapisu.
Na serwerze www eksportuję folder /var/www/dehydrated po NFS-ie. To jest Debian i wygląda to tak:
apt install nfs-kernel-server portmap perl -pi -e 's/^OPTIONS/#OPTIONS/' /etc/default/portmap echo "portmap: 192.168.7." >> /etc/hosts.allow echo "/var/www/dehydrated 192.168.7.0/255.255.255.0(rw,no_root_squash,subtree_check)" >> /etc/exports exportfs -a systemctl reload nfs-server.service
Wracam na serwer pocztowy. To jest Slakcware więc muszę uruchomić, nie używaną dotąd usługę RPC:
chmod +x /etc/rc.d/rc.rpc /etc/rc.d/rc.rpc start
Tworzę folder /var/www/dehydrated i montuję jego odpowiednik z serwera www:
mkdir /var/www/dehydrated mount 192.168.7.80:/var/www/dehydrated /var/www/dehydrated/ cat /var/www/dehydrated
waż na serwerze poczty wszystko już właściwie zrobione to wydaję polecenie utworzenia certyfikatów:
dehydrated -c
Wszystko jest OK, muszę jeszcze zakomentować linię zaczynającą się od "CA" w pliku /etc/dehydrated/config i powtórzyć ostatnią komendę.
Certyfikaty pojawiają się w folderach /etc/dehydrated/certs/mail.test.zz oraz /etc/dehydrated/certs/test.zz.
Ich przypisanie do konfiguracji Postfixa i Dovecote'a to w przypadku pierwszego dopisanie linii do pliku /etc/postfix/main.cf:
smtpd_tls_cert_file = /etc/dehydrated/certs/mail.test.zz/fullchain.pem
a dla Dovecote'a, do pliku /etc/dovecot/conf.d/10-ssl.conf:
ssl_cert = </etc/dehydrated/certs/mail.test.zz/fullchain.pem
I zrestartowanie obu usług (to jest Slackware):
/etc/rc.d/rc.postfix restart /etc/rc.d/rc.dovecot restart
W folderze /etc/dehydrated/certs/test.zz pojawił się również certyfikat dla serwera www. Wystarczy go przekopiować na ten serwer i dopisać do odpowiedniej konfiguracji Apache2. Nie będę tu tego opisywał bo nie leży to w temacie niniejszego wpisu.
Dziękuję za uwagę i pozdrawiam,
paczor