أثناء السير على طريق تحسين البنية التحتية، قررت إنهاء سؤال قديم ومؤلم - بدون إيماءات غير ضرورية، إتاحة الفرصة للزملاء (المطورين، والمختبرين، والمسؤولين، وما إلى ذلك) لإدارة أجهزتهم الافتراضية بشكل مستقل في الخارج. يحتوي Ovirt على العديد من المكونات التي يجب تهيئتها لحل مشكلتي: واجهة الويب نفسها، ووحدة تحكم noVNC، وتحميل صور القرص.
لم أجد زر "Make It Bad"، لذا سأعرض لك المقابض التي قمت بتشغيلها لحل هذه المشكلة. التعليمات الكاملة أسفل القطع:

تنصل:
قبل البدء، أود أن ألفت انتباهكم إلى حقيقة أنه لسبب غير معروف بالنسبة لي، يتم إنشاء مجالات البنية التحتية في المناطق الخاصة LAN، والمحلية، وما إلى ذلك.
لا أعرف ما الذي يمنعني من استخدام مجال المؤسسة في منطقة عامة. على سبيل المثال، بدلاً من نطاق Alex-GLuck-Awesome-Company.local، يمكنك استخدام المجال بأمان لموقع الشركة على الويب Alex-GLuck-Awesome-Company.com.
إذا كنت تخشى أنك لن تكون قادرًا على تتبع المجالات في مؤسستك، وهذا سوف يكسر شيئًا ما، فيمكنك شراء مجال منفصل للبنية التحتية aglac.com مقابل 100 روبل متواضعة سنويًا.
لماذا يعد استخدام النطاقات في المناطق العامة أكثر ربحية:
1. لدى مؤسستكم خدمات متاحة للجمهور: vpnمشاركة الملفات (مثل Seafile وNextcloud) وغيرها. عادةً ما يكون إعداد تشفير حركة البيانات على هذه الخدمات عمليةً غير متقنة، ولن ندافع ضد هجمات الوسيط لأنها صعبة (ليست صعبة حقًا).
أو لديك عنوان خدمة واحد داخل المكتب، وآخر من الإنترنت، ويجب صيانة هذه الاتصالات، مما يهدر مواردنا المتخصصة المحدودة. حسنًا، يجب على الموظفين أن يتذكروا عناوين مختلفة، وهو أمر غير مريح.
2. يمكنك استخدام المراجع المصدقة المجانية لتشفير خدماتك الداخلية.
البنية التحتية للمفاتيح العامة الخاصة بك هي خدمة تحتاج إلى الدعم؛ 100 روبل سنويًا للحصول على فرصة استخدام البنية التحتية للمفاتيح العامة من هيئات التصديق المجانية أكثر مما تدفع مقابل وقت الموظفين الذين يمكنهم إنفاقه على مهام أخرى.
3. عند استخدام مرجع التصديق الخاص بك، ستضع مكبرًا في عجلات موظفيك وزملائك البعيدين الذين يرغبون في العمل مع BYOD (إحضار أجهزة الكمبيوتر المحمولة والهواتف والأجهزة اللوحية الخاصة بهم) ولا يمكنك إدارة أجهزتهم. إنهم يجلبون أجهزة Mac و Linux و Androids و iOS و Windows - فلا فائدة من دعم مثل هذه الحديقة.
في كل شيء، بطبيعة الحال، هناك استثناءات، والبنوك التي لديها مؤسسات قاسية أخرى وضعت سياسات أمنية لن تتمكن أبدا من تحسين الخدمة المقدمة لموظفيها.
بالنسبة لهم، هناك هيئات تصديق مدفوعة الأجر يمكنها، مقابل مبلغ معين، التوقيع على شهادة CA الخاصة بهم ("خدمة التوقيع الجذري" من Google).
هناك أسباب أخرى تجعل استخدام المجال العام أكثر ربحية (الشيء الأكثر أهمية هو أنه ملك لك)، لكن هذه المقالة لا تتحدث عن ذلك.
المقصود هو...
انتباه! إذا قمت بإضافة شهادة Let's Encrypt CA إلى قائمة Ovirt الموثوقة، فقد يؤثر ذلك على أمان أنظمتك!
أول شيء يجب عليك الانتباه إليه هو أن تعريض واجهات Ovirt للإنترنت يعد ممارسة سيئة، لأنه وهذا ليس له أي معنى عملي، ويخلق تهديدات أمنية إضافية.
لذلك، تحتاج إلى الحصول على شهادة على أحد مضيفي المعقل لدينا، ثم نقل الشهادة والمفتاح إلى مضيفنا باستخدام محرك ovirt.
نضيف العنوان الخارجي لمضيف المعقل الخاص بنا إلى نظام أسماء النطاقات (DNS) باسمنا الظاهري ovirtengine.example.com، سأترك تثبيت certbot و nginx خلف الكواليس (كيفية القيام بذلك موصوفة بالفعل في حبري).
إعداد إصدار njinx >=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;
}
}
ثم نحصل على شهادتنا ومفتاحنا:
certbot certonly --nginx -d ovirtengine.example.com
أرشفة شهادتنا ومفتاحنا:
tar Phczf /tmp/ovirtengine.example.com.tgz /etc/letsencrypt/live/ovirtengine.example.com
قم بتنزيل الأرشيف من مضيف المعقل وقم بتحميله على محرك Ovirt الخاص بنا:
scp bastion-host:/tmp/ovirtengine.example.com.tgz /tmp/
scp /tmp/ovirtengine.example.com.tgz ovirtengine.example.com:/
دعنا ننتقل إلى الهدف
بعد ذلك، نقوم بفك ضغط الأرشيف الخاص بنا وإنشاء روابط رمزية لتبسيط فهم نظام موقع الملف:
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
نقوم بتكوين pki المدمج في Ovirt بحيث يتم استخدام مخزن شهادات Java (openjdk) للتحقق من الشهادات:
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
نقوم بتحويل المرجع المصدق من Let's Encrypt إلى تنسيق der وإضافته إلى مخزن شهادات Ovirt Java Trust Store (هذه حاوية تحتوي على قائمة الشهادات، يتم استخدام مثل هذا النظام في 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
نقوم بتحرير إعدادات SSL لـ Apache، ونضيف معلمة لدعم الارتباطات الرمزية ونزيل معلمة المرجع المصدق (CA) التي يمكن من خلالها التحقق من الشهادات (افتراضيًا، سيتم استخدام مجموعة النظام من المراجع المصدقة الموثوقة للتحقق):
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
بعد ذلك، في حالة حدوث ذلك، نقوم بعمل نسخة احتياطية من الملفات الأصلية التي تم إنشاؤها من خلال البنية التحتية للمفاتيح العامة التلقائية الخاصة بـ ovirt ونستبدلها بروابط رمزية بملفات من 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
نقوم باستعادة سياقات SElinux على الملفات وإعادة تشغيل خدماتنا (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 — خادم الويب اباتشي
محرك ovirt - واجهة ويب ovirt
ovirt-imageio-proxy - برنامج خفي لتنزيل صور القرص
ovirt-websocket-proxy - خدمة لتشغيل وحدة التحكم noVNC
تم اختبار كل ما سبق على Ovirt الإصدار 4.2.
التجديد التلقائي للشهادات على ovirt
وفقًا للممارسات الأمنية الجيدة، يجب ألا يكون هناك أي اتصال بين مضيف المعقل والمكتب، ويتم إصدار الشهادة لمدة 3 أشهر فقط. وهنا تبرز مسألة مثيرة للجدل حول كيفية تنفيذ تجديد الشهادات.
لدي قواعد لعب غير معقولة تعمل مع رئيس العمال كل يوم في الساعة الخامسة صباحًا وفقًا لجدول زمني. ينتقل دليل التشغيل هذا إلى Ovirt، ويتحقق من فترة صلاحية الشهادة، وإذا كان هناك أقل من 5 أيام متبقية قبل انتهاء الصلاحية، فإنه ينتقل إلى مضيف المعقل ويبدأ في تحديث الشهادة.
بعد تحديث الشهادة، يقوم بأرشفة المجلد بالملفات، وتنزيله على مضيف Forman وفك ضغطه إلى مضيف Ovirt. وبعد ذلك يقوم SElinux باستعادة السياقات الموجودة على الملفات وإعادة تشغيل خدماتنا.
المصدر: www.habr.com
