Si të bashkoni Ovirt dhe Let’s Encrypt

Duke ecur në rrugën e përmirësimit të infrastrukturës, vendosa që të zgjidh një çështje të lashtë dhe të mundimshme — të ofroj mundësinë për kolegët (zhvilluesit, testuesit, administratorët, etj.) që të menaxhojnë vetë makinat e tyre virtuale në Ovirt pa ndihmë të tepërt. Në Ovirt ka disa komponente që duhet të konfigurohen për të zgjidhur këtë çështje: vetë ndërfaqja ueb, konsolla noVNC dhe ngarkimi i imazheve të hard disqeve.

Nuk gjeta butonat "Bëje Super", prandaj po tregoj cilat doreza kam lëvizur për të zgjidhur këtë detyrë. Udhëzimi i plotë më poshtë:

Si të lidhni oVirt me Let's Encrypt

PËRGJEGJËSIA:

Para se të filloj, dëshiroj të theksoj se për një arsye të panjohur për mua, domenet e infrastrukturës krijohen në zona private lan, local, etj.

Çfarë pengon përdorimin e domenit të organizatës në zonën publike nuk e di. Për shembull, në vend të domenit Alex-GLuck-Awesome-Company.local, mund të përdoret qetësisht domendi për faqen e kompanisë Alex-GLuck-Awesome-Company.com.

Nëse keni frikë se nuk do të jeni në gjendje të monitoroni domenet në organizatën tuaj dhe se kjo do të shkaktojë ndonjë problem, për vetëm 100 rubla në vit mund të merrni një domen të veçantë për infrastrukturën aglac.com.

Pse është më e leverdishme të përdorni domene në zonat publike:

1. Ju keni brenda organizatës shërbime që dalin në hapësirën publike: vpn, shkëmbim skedalesh (seafile, nextcloud) dhe të tjera. Të konfigurosh enkriptimin e trafikut në këto shërbime zakonisht duket si një punë e shpejtë, dhe nuk do të mbrohemi nga MitM, sepse është e vështirë (në të vërtetë nuk është).

Ose brenda zyrës keni një adresë shërbimi, ndërsa nga Interneti një tjetër, dhe këto lidhje duhet të mbahen, për të cilat shpenzohen burimet tona të kufizuara të specialistëve. Po ashtu, punonjësit duhen të mbajnë mend adresa të ndryshme, gjë që është e pafavorshme.

2. Ju mund të përdorni qendra certifikimi falas për të enkriptuar shërbimet tuaja të brendshme.

PKI e vetme — është një shërbim që duhet mbështetur, 100 lekë në vit për mundësinë e përdorimit të PKI nga qendrat e certifikimit falas e kompensojnë me të madhe kohën e punonjësve, të cilët mund ta shpenzojnë atë në detyra të tjera.

3. Duke me përdorimin e qendrës tuaj të certifikimit, do të keni probleme me punonjësit dhe kolegët tuaj të largët që duan të punojnë me BYOD (duke sjellë laptopët, telefonët, tabletët e tyre) dhe nuk mund t'i menaxhoni pajisjet e tyre. Ata sjellin Mac, Linux, Android, iOS, Windows — mbështetja për një kopsht të tillë është krejtësisht e panevojshme.

Sigurisht, ka përjashtime, dhe bankat me ndërmarrje të tjera të rrepta që kanë politika të ngurta sigurie nuk do të jenë ndonjëherë në gjendje të përmirësojnë shërbimet për punonjësit e tyre.

Për ta, ekzistojnë qendra certifikimi me pagesë që për një shumë të caktuar mund të nënshkruajnë certifikatën e tyre CA (gjejni në internet "root signing service").

Ka edhe arsye të tjera pse përdorimi i domenit publik është më i favorshëm (më kryesorja është që ai të përkasë juve), por ky artikull nuk është për këtë.

Thelbësorja, e pra...

KUJDES! Nëse shtoni certifikatën CA nga Let’s Encrypt në listën e besuar për oVirt, kjo mund të ndikojë në sigurinë e sistemeve tuaja!

E mira e parë për të cilën duhet të shkoni është se ekspozimi i ndërfaqeve të ovirt në internet është një praktikë e keqe, pasi nuk ka asnjë kuptim praktik dhe krijon kërcënime të këtij në siguri.

Prandaj është e nevojshme të merrni një certifikat në ndonjë nga bastion-hostet tona, pas së cilës të transferoni certifikatën dhe çelësin në hostin tonë me ovirt-engine.

Shtojmë adresën tonë të jashtme të bastion-hostit në DNS me emrin tonë të ovirt ovirtengine.example.com, instalimin e certbot dhe nginx do ta lë jashtë skenës (si të bëni këtë është përshkruar tashmë në Habr).

Konfigurojmë nginx versioni >=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;

    # lejonëzoni serverin të bashkëngjisë OCSP, duke reduktuar kështu kohën e ngarkesës së faqeve për përdoruesit
    ssl_stapling on;
    ssl_stapling_verify on;
    add_header Strict-Transport-Security max-age=15768000;

    location / {
        return 444;
    }
}

Pastaj marrim certifikatën dhe çelësin tonë:

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

Arkivoni certifikat dhe çelësin tonë:

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

Po shkarkojmë arkivin nga bastion-host dhe e ngarkojmë në ovirt-engine tonë:

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

Shkoni te destinacioni

Tani ne do të nxjerrim arkivin tonë dhe do të krijojmë simbole lidhëse për të thjeshtuar kuptimin e sistemit të vendosjes së skedave:

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

Konfigurojmë pki-në e integruar në ovirt që për kontrollin e certifikatave të përdoret depoja e certifikatave java (openjdk):

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

Konvertojmë CA nga let’s encrypt në formatin der dhe e shtojmë në depozitat e certifikatave java trust store të ovirt-it (kjo është një kontenier në të cilin ndodhet një listë e certifikatave, një sistem i tillë përdoret në java):

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

Modifikojmë cilësimet SSL për apache, shtojmë parametrin për mbështetje të simlinkeve dhe hiqnim parametrin për CA, i cili kontrollon certifikatat (me default do të përdorim grupin sistemik të CA të besuara për verifikim):

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

Pas kësaj, backupojmë për çdo rast skedarët origjinalë, të gjeneruar përmes PKI të ovirt, automatikisht dhe zëvendësojmë simlinket me skedarët nga Let’s Encrypt:

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

Rikthejmë kontekstet e SElinux në skedarë dhe rinisnim shërbimet tona (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 — server web apache
ovirt-engine — ndërfaqja web e ovirt
ovirt-imageio-proxy — demon për ngarkimin e imazheve të disqeve
ovirt-websocket-proxy — shërbimi për funksionimin e konsolës noVNC

Të gjitha më lart janë kontrolluar në versionin e oVirt 4.2.

Rifreskimi automatik i certifikatave në oVirt

Sipas praktikave të mira të sigurisë, nuk duhet të ketë lidhje midis hostit të bastionit dhe oVirt, dhe certifikata jepet vetëm për 3 muaj. Këtu lind një moment diskutues në lidhje me mënyrën se si realizohet rifreskimi i certifikatave për mua.

Kam një playbook Ansible që ekzekutohet në Foreman çdo ditë në ora 5 në mëngjes sipas orarit. Ky playbook hyn në oVirt, kontrollon afatin e skadimit të certifikatës dhe nëse mbetet më pak se 5 ditë deri në skadimin, kalon në hostin e bastionit dhe ekzekuton rifreskimin e certifikatës.

Pas rifreskimit të certifikatës, ai arkivon dosjen me skedarët, shkarkon në hostin e Foreman dhe nxjerr në hostin e oVirt. Pas kësaj, rikthen kontekstet e SElinux në skedarë dhe rinstalon shërbimet tona.

Burimi: habr.com

Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS 🔥 Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS | ProHoster