Hoe om vriende te maak Ovirt en Kom ons Enkripteer

Op die pad van die verbetering van die infrastruktuur, het ek besluit om 'n ou en pynlike vraag af te handel - sonder onnodige gebare, bied die geleentheid aan kollegas (ontwikkelaars, toetsers, administrateurs, ens.) om hul virtuele masjiene onafhanklik in ovirt te bestuur. Ovirt het verskeie komponente wat gekonfigureer moet word om my probleem op te los: die webkoppelvlak self, die noVNC-konsole en die oplaai van skyfbeelde.

Ek het nie die "Make It Bad"-knoppie gevind nie, so ek wys jou watter knoppies ek gedraai het om hierdie probleem op te los. Volledige instruksies onder die snit:

Hoe om vriende te maak Ovirt en Kom ons Enkripteer

DISCLAIMER:

Voordat u begin, wil ek u aandag daarop vestig dat om een ​​of ander rede wat vir my onbekend is, infrastruktuurdomeine geskep word in privaat sones lan, plaaslik, ensovoorts.

Ek weet nie wat my verhinder om 'n organisasie se domein in 'n publieke sone te gebruik nie. Byvoorbeeld, in plaas van die domein Alex-GLuck-Awesome-Company.local, kan jy die domein veilig gebruik vir die maatskappy se webwerf Alex-GLuck-Awesome-Company.com.

As jy bang is dat jy nie die domeine in jou organisasie sal kan dophou nie, en dit sal iets breek, dan kan jy vir 'n beskeie 100 roebels per jaar 'n aparte domein vir die aglac.com-infrastruktuur koop.

Hoekom is dit meer winsgewend om domeine in openbare sones te gebruik:

1. Jou organisasie het dienste wat publiek toeganklik is: vpn, lΓͺerdeling (seafile, nextcloud), en ander. Die opstel van verkeersenkripsie op sulke dienste is gewoonlik 'n bietjie van 'n slordige saak, en ons sal nie teen MitM-aanvalle verdedig nie, want dit is moeilik (nie regtig nie).

Of jy het een diensadres binne die kantoor, en nog een vanaf die internet, en hierdie verbindings moet in stand gehou word, wat ons beperkte spesialishulpbronne mors. Wel, werknemers moet verskillende adresse onthou, wat ongerieflik is.

2. Jy kan gratis sertifikaatowerhede gebruik om jou interne dienste te enkripteer.

Jou eie PKI is 'n diens wat ondersteun moet word; 100 roebels per jaar vir die geleentheid om PKI van gratis sertifiseringsowerhede te gebruik, meer as betaal vir die tyd van werknemers wat dit aan ander take kan spandeer.

3. Wanneer jy jou eie sertifikaatowerheid gebruik, sal jy 'n speek in die wiele sit van jou afgeleΓ« werknemers en kollegas wat met BYOD wil werk (bring hul eie skootrekenaars, fone, tablette) en jy kan nie hul toestelle bestuur nie. Hulle bring Mac's, Linux, Androids, iOS, Windows - dit is geen sin om so 'n dieretuin te ondersteun nie.

In alles is daar natuurlik uitsonderings, en banke met ander harde ondernemings wat veiligheidsbeleide vasgestel het, sal nooit diens vir hul werknemers kan verbeter nie.

Vir hulle is daar betaalde sertifiseringsowerhede wat hul CA-sertifikaat vir 'n sekere bedrag kan onderteken (Google "root signing service").

Daar is ander redes waarom dit meer winsgewend is om 'n publieke domein te gebruik (die belangrikste ding is dat dit aan jou behoort), maar hierdie artikel gaan nie daaroor nie.

Die punt is...

AANDAG! As jy 'n Let's Encrypt CA-sertifikaat by ovirt se vertroude lys voeg, kan dit die sekuriteit van jou stelsels beΓ―nvloed!

Die eerste ding waaraan u moet let, is dat die blootstelling van Ovirt-koppelvlakke aan die internet slegte praktyk is, want Dit maak geen praktiese sin nie, en skep bykomende sekuriteitsbedreigings.

Daarom moet jy 'n sertifikaat op een van ons bastion-gashere kry, en dan die sertifikaat en sleutel aan ons gasheer oordra met ovirt-enjin.

Ons voeg die eksterne adres van ons bastion gasheer by die dns met ons ovirt naam ovirtengine.example.com, Ek sal die installering van certbot en nginx agter die skerms laat (hoe om dit te doen is reeds op HabrΓ© beskryf).

Stel njinx-weergawe op >=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;

    # позволяСм сСрвСру ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»ΡΡ‚ΡŒ OCSP-ΠΎΡ‚Π²Π΅Ρ‚Ρ‹, Ρ‚Π΅ΠΌ самым ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ врСмя Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ страниц Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ
    ssl_stapling on;
    ssl_stapling_verify on;
    add_header Strict-Transport-Security max-age=15768000;

    location / {
        return 444;
    }
}

Dan kry ons ons sertifikaat en sleutel:

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

Argiveer ons sertifikaat en sleutel:

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

Laai die argief van die bastion-gasheer af en laai dit op na ons ovirt-enjin:

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

Kom ons gaan aan na die doelwit

Vervolgens pak ons ​​ons argief uit en skep simskakels om begrip van die lΓͺerliggingstelsel te vergemaklik:

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

Ons konfigureer die ingeboude pki in Ovirt sodat die java-sertifikaatwinkel (openjdk) gebruik word om sertifikate te verifieer:

cat << EOF > /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

Ons skakel die CA om van kom ons enkripteer na die formaat en voeg dit by die ovirt java trust store sertifikaatwinkel (dit is 'n houer wat 'n lys sertifikate bevat, so 'n stelsel word in java gebruik):

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

Ons wysig die SSL-instellings vir apache, voeg 'n parameter by om simlinks te ondersteun en verwyder die parameter vir die CA waarmee sertifikate gekontroleer kan word (by verstek sal die stelselstel vertroude CA's vir verifikasie gebruik word):

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

Dan, vir ingeval, rugsteun ons die oorspronklike lΓͺers wat deur Ovirt se outomatiese PKI gegenereer is en vervang dit met simbole met lΓͺers van 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

Ons herstel SElinux-kontekste op die lΓͺers en herbegin ons dienste (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 β€” webbediener apache
ovirt-enjin - ovirt-webkoppelvlak
ovirt-imageio-proxy - daemon vir die aflaai van skyfbeelde
ovirt-websocket-proxy - diens vir die bestuur van die noVNC-konsole

Al die bogenoemde is op Ovirt weergawe 4.2 getoets.

Outomatiese hernuwing van sertifikate op ovirt

Volgens goeie sekuriteitspraktyke behoort daar geen verband tussen die bastiongasheer en die ovirt te wees nie, en word die sertifikaat slegs vir 3 maande uitgereik. Dit is hier waar 'n kontroversiΓ«le kwessie ontstaan ​​oor hoe ek die hernuwing van sertifikate geΓ―mplementeer het.

Ek het 'n ansible speelboek wat elke dag om 5:5 volgens 'n skedule op voorman loop. Hierdie speelboek gaan na die ovirt, kontroleer die geldigheidstydperk van die sertifikaat, en as daar minder as XNUMX dae oor is voor verstryking, gaan dit na die bastion-gasheer en begin die sertifikaat bywerk.

Nadat die sertifikaat opgedateer is, argiveer dit die lΓͺergids met lΓͺers, laai dit af na die Forman-gasheer en pak dit uit na die Ovirt-gasheer. Daarna herstel SElinux die kontekste op die lΓͺers en herbegin ons dienste.

Bron: will.com

Koop betroubare hosting vir werwe met DDoS-beskerming, VPS VDS-bedieners πŸ”₯ Koop betroubare webwerfhosting met DDoS-beskerming, VPS VDS-bedieners | ProHoster