Bagaimana cara berteman Ovirt dan Let's Encrypt

Berjalan di sepanjang jalan meningkatkan infrastruktur, saya memutuskan untuk menyelesaikan pertanyaan kuno dan menyakitkan - tanpa gerakan yang tidak perlu, memberikan kolega (pengembang, penguji, admin, dll) dengan kesempatan untuk secara mandiri mengelola mesin virtual mereka di ovirt. Ada beberapa komponen dalam ovirt yang perlu saya konfigurasi untuk menyelesaikan pertanyaan saya: antarmuka web itu sendiri, konsol noVNC, dan mengisi gambar disk.

Saya tidak menemukan tombol "Make Flicker", jadi saya menunjukkan pena mana yang saya putar untuk menyelesaikan masalah ini. Instruksi lengkap di bawah potongan:





PENOLAKAN:


Sebelum memulai, saya ingin menarik perhatian pada kenyataan bahwa untuk beberapa alasan tidak diketahui oleh saya, domain infrastruktur dibuat di zona pribadi lan, lokal, dan sebagainya.

Apa yang mencegah saya menggunakan domain organisasi di zona publik tidak diketahui oleh saya. Misalnya, alih-alih domain Alex-GLuck-Awesome-Company.local, Anda dapat menggunakan domain dengan aman untuk situs perusahaan Alex-GLuck-Awesome-Company.com.

Jika Anda takut tidak dapat melacak domain di organisasi Anda, dan ini akan merusak sesuatu, maka untuk 100 rubel sederhana setahun Anda dapat mengambil domain terpisah untuk infrastruktur aglac.com.

Mengapa lebih menguntungkan menggunakan domain di zona publik:

1. Layanan muncul di ruang publik Anda dalam organisasi Anda: VPN, berbagi file (seafile, nextcloud) dan lainnya. Mengkonfigurasi enkripsi lalu lintas pada layanan tersebut biasanya terlihat seperti blooper, dan kami tidak akan melindungi diri dari MitM, karena sulit (sebenarnya tidak).

Atau di dalam kantor Anda memiliki satu alamat layanan, dan yang lain dari Internet, dan komunikasi ini harus dijaga, yang menghabiskan sumber daya spesialis kami yang terbatas. Nah, karyawan harus mengingat alamat yang berbeda, yang tidak nyaman.

2. Anda dapat menggunakan otoritas sertifikat gratis untuk mengenkripsi layanan internal Anda.

PKI sendiri adalah layanan yang perlu didukung, 100 rubel per tahun untuk kesempatan menggunakan PKI dari otoritas sertifikasi gratis lebih dari membayar waktu karyawan yang dapat menghabiskannya untuk tugas-tugas lain.

3. Saat menggunakan otoritas sertifikasi Anda sendiri, Anda akan meletakkan tongkat di roda karyawan dan kolega jarak jauh Anda yang ingin bekerja dengan BYOD (membawa laptop, ponsel, tablet) dan Anda tidak dapat mengontrol perangkat mereka. Mereka membawa bunga poppy, Linux, android, iOS, Windows - tidak ada gunanya mendukung kebun binatang semacam itu.

Secara keseluruhan, tentu saja, ada pengecualian, dan bank dengan perusahaan keras lainnya yang telah menetapkan kebijakan keamanan tidak akan pernah dapat meningkatkan layanan untuk karyawan mereka.

Ada otoritas sertifikasi berbayar untuk mereka, yang untuk jumlah tertentu dapat menandatangani sertifikat CA mereka (google "layanan penandatanganan root").

Ada alasan lain mengapa lebih menguntungkan untuk menggunakan domain publik (yang paling penting adalah bahwa itu milik Anda), tetapi artikelnya bukan tentang itu.

Intinya, tapi intinya ...


PERHATIAN! Jika Anda menambahkan sertifikat CA dari Let's Encrypt ke daftar tepercaya ovirt, ini dapat memengaruhi keamanan sistem Anda!

Hal pertama yang perlu Anda perhatikan adalah menempatkan antarmuka Internet di Internet adalah praktik yang buruk, karena ini tidak masuk akal secara praktis, dan menciptakan ancaman keamanan tambahan.

Karena itu, Anda perlu mendapatkan sertifikat pada beberapa host benteng kami, dan kemudian mentransfer sertifikat dan kunci ke host kami dengan mesin ovirt.

Kami menambahkan alamat eksternal host benteng kami di DNS dengan nama ovirtengine.example.com ovirt kami, saya akan meninggalkan instalasi certbot dan nginx di belakang layar (cara melakukan ini pada hub sudah dijelaskan).

Mengkonfigurasi versi Nginx> = 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; } } 


Kemudian kami mendapatkan sertifikat dan kunci kami:

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

Kami mengarsipkan sertifikat dan kunci kami:

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

Unduh arsip dari bastion host, unggah ke ovirt-enzhin kami:

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

Pergi ke tujuan


Selanjutnya, kami membongkar arsip kami dan membuat symlink untuk menyederhanakan pemahaman tentang sistem lokasi file:

 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 

Kami mengonfigurasi pki bawaan di ovirt untuk menggunakan java sertifikat store (openjdk) untuk verifikasi sertifikat:

 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 

Kami mengonversi CA dari yang dienkripsi menjadi format der dan menambahkan ovirt ke toko sertifikat java trust store (ini adalah wadah tempat daftar sertifikat berada, sistem seperti itu digunakan di 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 

Kami mengedit pengaturan SSL untuk apache, menambahkan parameter untuk mendukung symlink dan menghapus parameter untuk CA, yang akan memeriksa sertifikat (secara default, sistem akan menggunakan CA tepercaya yang ditetapkan untuk verifikasi):

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

Setelah itu, untuk berjaga-jaga, kami akan membuat cadangan file asli yang dihasilkan melalui PKI ovirt'a secara otomatis dan mengganti symlink dengan file dari 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 

Kami mengembalikan konteks SElinux pada file dan memulai kembali layanan kami (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 - antarmuka web ovirt
ovirt-imageio-proxy - daemon untuk memuat gambar disk
ovirt-websocket-proxy - layanan untuk menjalankan konsol noVNC

Semua hal di atas telah diuji pada versi 4.2 dari ovirt.

Perpanjang otomatis sertifikat untuk ovirt


Menurut praktik keamanan yang baik, seharusnya tidak ada koneksi antara host bastion dan ovirt, dan sertifikat hanya dikeluarkan selama 3 bulan. Di sinilah titik kontroversial muncul tentang bagaimana saya telah menerapkan pembaruan sertifikat.

Saya memiliki buku pedoman ensembel yang beroperasi pada mandor setiap hari jam 5 pagi pada suatu jadwal. Buku pedoman ini masuk ke dalam ovirt, memeriksa periode validitas sertifikat dan jika kurang dari 5 hari tersisa sebelum kedaluwarsa, ia akan pergi ke host benteng dan memulai pembaruan sertifikat.

Setelah memperbarui sertifikat, itu mengarsipkan folder dengan file, mengunduh mandor ke host, dan membuka ritsleting host ovirt. Kemudian ia mengembalikan konteks SElinux pada file dan me-restart layanan kami.

Source: https://habr.com/ru/post/id424127/


All Articles