Altyapıyı iyileştirme yolunda yürürken, eski ve acı verici bir soruyu bitirmeye karar verdim - gereksiz hareketler olmadan, meslektaşlarıma (geliştiriciler, test uzmanları, yöneticiler vb.) sanal makinelerini ovirt'te bağımsız olarak yönetme fırsatı sağlayın. Ovirt'in sorunumu çözmek için yapılandırılması gereken çeşitli bileşenleri var: web arayüzünün kendisi, noVNC konsolu ve disk görüntülerinin yüklenmesi.
"Kötü Yap" düğmesini bulamadım, bu yüzden size bu sorunu çözmek için hangi düğmeleri çevirdiğimi gösteriyorum. Kesimin altındaki tüm talimatlar:

YASAL UYARI:
Başlamadan önce, bilmediğim bir nedenden dolayı altyapı etki alanlarının özel bölgelerde, yerel vb. yerlerde oluşturulduğuna dikkatinizi çekmek isterim.
Bir kuruluşun etki alanını herkese açık bir alanda kullanmamı neyin engellediğini bilmiyorum. Örneğin, Alex-GLuck-Awesome-Company.local alan adı yerine, şirketin Alex-GLuck-Awesome-Company.com web sitesine ait alan adını güvenle kullanabilirsiniz.
Kuruluşunuzdaki alan adlarını takip edemeyeceğinizden ve bunun bir şeyleri bozacağından korkuyorsanız, yılda mütevazı bir 100 ruble karşılığında aglac.com altyapısı için ayrı bir alan adı satın alabilirsiniz.
Alan adlarını halka açık alanlarda kullanmak neden daha karlı:
1. Kuruluşunuzun herkese açık hizmetleri bulunmaktadır: vpnDosya paylaşımı (Seafile, Nextcloud) ve diğerleri gibi hizmetlerde trafik şifrelemesi kurmak genellikle biraz özensiz bir girişimdir ve MitM saldırılarına karşı savunma yapmanın zor olduğunu (aslında zor değil) düşünmeyeceğiz.
Veya ofis içinde bir hizmet adresiniz ve internette bir başka hizmet adresiniz vardır ve bu bağlantıların sürdürülmesi gerekir, bu da sınırlı uzman kaynaklarımızın israfına neden olur. Çalışanların farklı adresleri hatırlaması gerekiyor ve bu da sakıncalı.
2. Dahili hizmetlerinizi şifrelemek için ücretsiz sertifika yetkililerini kullanabilirsiniz.
Kendi PKI'nız desteklenmesi gereken bir hizmettir; PKI'yı ücretsiz sertifika yetkililerinden kullanma fırsatı için yılda 100 ruble, bunu diğer görevlere harcayabilecek çalışanların zamanından daha fazla öder.
3. Kendi sertifika yetkinizi kullanırken, BYOD ile çalışmak isteyen (kendi dizüstü bilgisayarlarını, telefonlarını, tabletlerini getirin) uzaktaki çalışanlarınızın ve iş arkadaşlarınızın tekerleklerine bir jant vuracaksınız ve cihazlarını yönetemeyeceksiniz. Mac'leri, Linux'ları, Android'leri, iOS'ları, Windows'ları getiriyorlar - böyle bir hayvanat bahçesini desteklemenin bir anlamı yok.
Elbette her şeyde istisnalar vardır ve güvenlik politikaları oluşturmuş diğer katı kuruluşlara sahip bankalar, çalışanlarına yönelik hizmetleri asla iyileştiremeyecek.
Onlar için CA sertifikalarını belirli bir miktar karşılığında imzalayabilen ücretli sertifika yetkilileri bulunmaktadır (Google “kök imzalama hizmeti”).
Kamusal alan kullanmanın daha karlı olmasının başka nedenleri de var (en önemlisi size ait olması), ancak bu makale bununla ilgili değil.
Önemli olan...
DİKKAT! Ovirt'in güvenilir listesine bir Let's Encrypt CA sertifikası eklerseniz, bu durum sistemlerinizin güvenliğini etkileyebilir!
Dikkat etmeniz gereken ilk şey, Ovirt arayüzlerini internete maruz bırakmanın kötü bir uygulama olduğudur, çünkü Bunun pratik bir anlamı yoktur ve ek güvenlik tehditleri oluşturur.
Bu nedenle, kale ana bilgisayarlarımızdan birinden sertifika almanız ve ardından sertifikayı ve anahtarı ovirt-engine ile ana makinemize aktarmanız gerekir.
Bastion hostumuzun harici adresini ovirt ismimizle dns'e ekliyoruz ovirtengine.example.comcertbot ve nginx kurulumunu perde arkasında bırakacağım (bunun nasıl yapılacağı zaten Habré'de anlatılmıştır).
Njinx sürümünün kurulumu >=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;
}
}
Daha sonra sertifikamızı ve anahtarımızı alıyoruz:
certbot certonly --nginx -d ovirtengine.example.com
Sertifikamızı ve anahtarımızı arşivleyin:
tar Phczf /tmp/ovirtengine.example.com.tgz /etc/letsencrypt/live/ovirtengine.example.com
Arşivi kale ana bilgisayarından indirin ve ovirt motorumuza yükleyin:
scp bastion-host:/tmp/ovirtengine.example.com.tgz /tmp/
scp /tmp/ovirtengine.example.com.tgz ovirtengine.example.com:/
Hedefe doğru ilerleyelim
Daha sonra arşivimizi açıyoruz ve dosya konum sisteminin anlaşılmasını kolaylaştırmak için sembolik bağlantılar oluşturuyoruz:
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
Ovirt'te yerleşik pki'yi, sertifikaları doğrulamak için Java sertifika deposunun (openjdk) kullanılacağı şekilde yapılandırıyoruz:
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
CA'yı let's encrypt'ten der formatına dönüştürüyoruz ve ovirt Java güven deposu sertifika deposuna ekliyoruz (bu, sertifikaların bir listesini içeren bir kaptır, böyle bir sistem Java'da kullanılır):
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
Apache için SSL ayarlarını düzenliyoruz, sembolik bağlantıları desteklemek için bir parametre ekliyoruz ve sertifikaların kontrol edileceği CA parametresini kaldırıyoruz (varsayılan olarak, doğrulama için güvenilir CA'ların sistem seti kullanılacaktır):
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
Ardından, her ihtimale karşı, ovirt'in otomatik PKI'sı aracılığıyla oluşturulan orijinal dosyaları yedekliyoruz ve bunları Let's Encrypt'teki dosyaların bulunduğu sembolik bağlantılarla değiştiriyoruz:
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
Dosyalardaki SElinux içeriklerini geri yüklüyoruz ve hizmetlerimizi yeniden başlatıyoruz (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 — web sunucusu apache
ovirt motoru - ovirt web arayüzü
ovirt-imageio-proxy - disk görüntülerini indirmek için arka plan programı
ovirt-websocket-proxy - noVNC konsolunu çalıştırma hizmeti
Yukarıdakilerin tümü Ovirt 4.2 sürümünde test edilmiştir.
Ovirt'te sertifikaların otomatik olarak yenilenmesi
İyi güvenlik uygulamalarına göre burç ana bilgisayarı ile ovirt arasında hiçbir bağlantı olmamalıdır ve sertifika yalnızca 3 ay süreyle verilir. Sertifikaların yenilenmesini nasıl uyguladığım konusunda tartışmalı bir konu da burada ortaya çıkıyor.
Bir programa göre her gün sabah saat 5'te ustabaşı üzerinde çalışan yanıtlayıcı bir taktik kitabım var. Bu playbook ovirt'e gider, sertifikanın geçerlilik süresini kontrol eder ve sürenin dolmasına 5 günden az süre kaldıysa kale ana bilgisayarına giderek sertifikayı güncellemeye başlar.
Sertifikayı güncelledikten sonra, dosyaları içeren klasörü arşivler, Forman ana bilgisayarına indirir ve sıkıştırılmış dosyayı Ovirt ana bilgisayarına açar. Bundan sonra SElinux dosyalardaki içerikleri geri yükler ve hizmetlerimizi yeniden başlatır.
Kaynak: habr.com
