Kuidas sÔbrustada Ovirti ja Let's Encrypti

Infrastruktuuri tĂ€iustamise teel otsustasin lahendada juba ammu vaevanud kĂŒsimuse — pakkuda kolleegidele (arendajatele, testijatele, administraatoritele jne) vĂ”imaluse hallata oma virtuaalmasinaid ovirt's ilma liigsete pingutusteta. Ovirtis on mitmeid komponente, mis tuleb minu probleemi lahendamiseks seadistada: veebiliides, noVNC konsool ja ketta piltide laadimine.

Ei leidnud nuppu „Tee lahe“, seetĂ”ttu nĂ€itan, milliseid nuppe ma keerasin, et seda ĂŒlesannet lahendada. TĂ€ielik juhend on allpool:

Kuidas sÔbrustada oVirt ja Let's Encrypt.

DISCLAIMER:

Enne alustamist tahaksin juhtida tÀhelepanu, et mÔne mulle teadmata pÔhjusel luuakse infrastruktuuri domeenid privaatsetes tsoonides nagu lan, local jne.

Mille tÔttu ei saa kasutada organisatsiooni domeeni avalikus tsoonis, ei ole mulle teada. NÀiteks, selle asemel, et kasutada domeeni Alex-GLuck-Awesome-Company.local, on tÀiesti vÔimalik kasutada ettevÔtte veebisaidi domeeni Alex-GLuck-Awesome-Company.com.

Kui te kardate, et ei suuda oma organisatsioonis domeene jÀlgida ja see midagi Àra rikub, siis vÀikese 100 rubla aastamaksu eest saate vÔtta eraldi domeeni infrastruktuuri jaoks aglac.com.

Miks on avalikes piirkondades domeenide kasutamine soodsam:

1. Teie organisatsioonis tekivad teenused, mis saavad ligipÀÀsu avalikkusele: VPN, failide jagamine (Seafile, Nextcloud) ja teised. Traffic'i krĂŒpteerimise seadistamine sellistes teenustes nĂ€eb tavaliselt vĂ€lja nagu killustik ja MitM rĂŒnnakute eest me end ei kaitsme, kuna see on keeruline (tegelikult pole see nii).

VĂ”i on teie kontoris teenuse ĂŒhtne aadress, kuid internetist juurdepÀÀsuks on see teine, ning neid seoseid tuleb sĂ€ilitada, milleks kulutame meie piiratud spetsialistide ressursse. Lisaks peavad töötajad mĂ€letama erinevaid aadresse, mis tekitab ebamugavusi.

2. Saate kasutada tasuta sertifitseerimiskeskusi oma siseteenuste krĂŒpteerimiseks.

Oma PKI on teenus, mida tuleb hooldada; 100 rubla aastas tasuta sertifitseerimiskeskuste PKI kasutamise vĂ”imaluse eest katab Ă€ra töötajate aja, mida nad saaksid kulutada teistele ĂŒlesannetele.

Kasutades oma sertifitseerimiskeskust, paned sa takistusi oma kaug töötajatele ja kolleegidele, kes soovivad kasutada BYOD (toovad oma sĂŒlearvuteid, telefone, tahvelarvuteid), ning sa ei saa nende seadmeid hallata. Nad toovad Mac-id, Linuxid, Androidid, iOS-i, Windowsi — sellise loomaaias hoidmine ei oma mingit mĂ”tet.

Muidugi on kÔigis asjades erandeid, ning pangad koos teiste karmide ettevÔtetega, kellel on kehtestatud turvapoliitikad, ei suuda enam kunagi oma teenuseid oma töötajatele parandada.

Nende jaoks on saadaval tasulised sertifitseerimiskeskused, mis teatud tasu eest saavad nende CA sertifikaadi allkirjastada (otsi 'root signing service').

On ka teisi pÔhjuseid, miks avaliku domeeni kasutamine on kasulikum (peamine on, et see kuulub sulle), kuid artikkel ei kÀsitle seda.

Oma asja point...

TĂ€helepanu! Kui lisad Let’s Encrypt’i CA sertifikaadi ovirt’i usaldatute nimekirja, vĂ”ib see mĂ”jutada sinu sĂŒsteemide turvalisust!

Esimene asi, millele tÀhelepanu pöörata, on see, et ovirt'i liidese vÀljapandmine interneti on halba praktika, kuna see ei oma mingit praktilist mÔtet ja loob tÀiendavaid turvaohtusid.

Seega on vajalik sertifikaadi saamine mĂ”nel meie bastionihostist, mille jĂ€rel tuleb sertifikaat ja vĂ”ti meie hostile ovirt-engine'iga ĂŒle kanda.

Lisame meie bastionihosti vÀlise aadressi DNS-ise koos meie ovirt'i nimega. ovirtengine.example.com, certboti ja nginx'i installatsiooni jÀtan ma kÔrvale (kuidas seda teha on juba Habr'is kirjeldatud).

Seame ĂŒles Nginx'i versioonis >=1.15.7.

/etc/nginx/conf.d/default.conf

server {
    server_name _;
    listen 80 default_server;
    location /robots.txt { alias /usr/share/nginx/html/robots.txt; }
    location /.well-known {
        root /usr/share/nginx/html;
    }
    location / {
        return 444;
    }
}

server {
    server_name _;
    listen 443 ssl http2 default_server;
    location /robots.txt { alias /usr/share/nginx/html/robots.txt; }
    location /.well-known {
        root /usr/share/nginx/html;
    }

    ssl_certificate /etc/nginx/ssl/$ssl_server_name/fullchain.pem; 
    ssl_certificate_key /etc/nginx/ssl/$ssl_server_name/privkey.pem;

    ssl_protocols TLSv1.2;
    ssl_prefer_server_ciphers on;

    ssl_dhparam /etc/nginx/ssl/dhparam.pem;
    ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;

    # lubame serverile OCSP vastuste lisamise, et vÀhendada laadimisaja
    ssl_stapling on;
    ssl_stapling_verify on;
    add_header Strict-Transport-Security max-age=15768000;

    location / {
        return 444;
    }
}

SeejÀrel saame oma sertifikaadi ja vÔtme:

certbot certonly --nginx -d ovirtengine.example.com

Arhiveerime meie sertifikaadi ja vÔtme:

tar Phczf /tmp/ovirtengine.example.com.tgz /etc/letsencrypt/live/ovirtengine.example.com

Laadime bastion-hostilt alla arhiivi ja laadime selle oma ovirt-engine'i:

scp bastion-host:/tmp/ovirtengine.example.com.tgz /tmp/
scp /tmp/ovirtengine.example.com.tgz ovirtengine.example.com:/

Sammume sihtkohta

SeejĂ€rel lahti pakime meie arhiivi ja loome sĂŒmboolsed lingid, et hĂ”lbustada failide asukoha mĂ”istmist:

tar Pxzf /ovirtengine.example.com.tgz && rm -f ovirtengine.example.com.tgz
mkdir -p /etc/letsencrypt/live
ln -f -s /etc/letsencrypt/live /etc/pki/letsencrypt

Seame ovirtis sisse sisseehitatud pki, et kasutada sertifikaatide kontrollimiseks java (openjdk) sertifikaadipoe:

cat < /etc/ovirt-engine/engine.conf.d/99-setup-pki.conf 
ENGINE_HTTPS_PKI_TRUST_STORE="/etc/pki/java/cacerts"
ENGINE_HTTPS_PKI_TRUST_STORE_PASSWORD=""
EOF

Konverteerime let’s encrypt CA der formaati ja lisame selle ovirt's java trust store'i (see on konteiner, kus hoitakse sertifikaatide nimekirja, sellist sĂŒsteemi kasutatakse javades):

openssl x509 -outform der -in /etc/pki/letsencrypt/ovirtengine.example.com/chain.pem -out /tmp/ovirtengine.example.com.chain.der
keytool -import -alias "Let's Encrypt Authority X3" -file /tmp/ovirtengine.example.com.chain.der -keystore /etc/pki/ovirt-engine/.truststore -storepass $(grep '^ENGINE_PKI_TRUST_STORE_PASSWORD' /etc/ovirt-engine/engine.conf.d/10-setup-pki.conf | cut -f 2 -d '"')
rm -f /tmp/ovirtengine.example.com.chain.der

Muudame Apache'i SSL-seadeid, lisame sĂŒmbolite toimetamiseks parameetri ja eemaldame CA parameetri, millega sertifikaate kontrollida (vaikimisi kasutatakse sĂŒsteemi usaldusvÀÀrsete CA-de kogumit):

sed -r -i 's|^(SSLCACertificateFile.*)|#1|g' /etc/httpd/conf.d/ssl.conf
sed -r -i '0,/(^#?SSLCACertificateFile.*)/ s//1nOptions FollowSymlinks/' /etc/httpd/conf.d/ssl.conf

SeejĂ€rel teeme igaks juhuks originaalfailidest varukoopia, mis on genereeritud PKI ovirt’a poolt automaatselt, ja asendame sĂŒmbolid Let’s Encrypti failidega:

ln -f -s /etc/pki/letsencrypt/ovirtengine.example.com/fullchain.pem /etc/pki/ovirt-engine/apache-chain.pem
services=( 'apache' 'imageio-proxy' 'websocket-proxy' )
for i in "${services[@]}"; do
cp /etc/pki/ovirt-engine/certs/$i.cer{,."$( date +%F )".bak}
cp /etc/pki/ovirt-engine/keys/$i.key.nopass{,."$( date +%F )".bak}
ln -f -s /etc/pki/letsencrypt/ovirtengine.example.com/privkey.pem /etc/pki/ovirt-engine/keys/$i.key.nopass
ln -f -s /etc/pki/letsencrypt/ovirtengine.example.com/cert.pem /etc/pki/ovirt-engine/certs/{apache,imageio-proxy,websocket-proxy}.cer
done

Taastame failide SElinux kontekstid ja kÀivitame uuesti meie teenused (httpd, ovirt-engine, ovirt-imageio-proxy, ovirt-websocket-proxy):

restorecon -Rv /etc/pki
systemctl restart httpd ovirt-engine ovirt-imageio-proxy ovirt-websocket-proxy

httpd — veebiserver. apache
ovirt-engine — ovirt'i veebiliides
ovirt-imageio-proxy — demon ketasfailide laadimiseks
ovirt-websocket-proxy — teenus noVNC konsooli jaoks

KĂ”ik ĂŒlaltoodud on kontrollitud oVirt 4.2 versioonil.

Sertifikaatide automaatne uuendamine oVirtis.

Heade turvapraktikate kohaselt ei tohiks bastion-host ja oVirt omavahel ĂŒhenduses olla ning sertifikaat antakse vĂ€lja vaid kolmekuuseks. Siin tekib vaieldav hetk, kuidas on sertifikaatide uuendamine minu puhul teostatud.

Mul on Ansible'i mÀnguplaan, mis töötab Foremani peal iga pÀev kell 5 hommikul graafiku alusel. See mÀnguplaan siseneb oVirti, kontrollib sertifikaadi kehtivusaega ja kui kehtivus on vÀhem kui 5 pÀeva, lÀheb bastion-hostile ja kÀivitab sertifikaadi uuendamise.

PÀrast sertifikaadi uuendamist arhiveerib ta failide kausta, laadib Foremani hostile alla ja dekompresseerib oVirti hostile. SeejÀrel taastab ta failide SElinux kontekstid ja taaskÀivitab meie teenused.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster