Дэд бүтцийг сайжруулах замаар явж байхдаа би эртний бөгөөд зовлонтой асуултыг дуусгахаар шийдсэн - шаардлагагүй дохио зангаагүйгээр хамт ажиллагсад (хөгжүүлэгчид, тестер, администраторууд гэх мэт) виртуал машинуудаа бие даан удирдах боломжийг олгох. Ovirt нь миний асуудлыг шийдэхийн тулд тохируулах шаардлагатай хэд хэдэн бүрэлдэхүүн хэсэгтэй: вэб интерфэйс өөрөө, noVNC консол болон дискний зургийг байршуулах.
Би "Муу болгох" товчийг олсонгүй, тиймээс би энэ асуудлыг шийдэхийн тулд аль товчлуурыг эргүүлж байгааг харуулж байна. Зүсэлтийн доорх бүрэн заавар:

Анхааруулга:
Эхлэхээсээ өмнө би таны анхаарлыг татахыг хүсч байна, яагаад гэвэл надад үл мэдэгдэх шалтгаанаар дэд бүтцийн домэйнууд lan, орон нутгийн гэх мэт хувийн бүсэд бий болдог.
Олон нийтийн бүсэд байгууллагын домэйныг ашиглахад юу саад болж байгааг би мэдэхгүй. Жишээлбэл, Alex-GLuck-Awesome-Company.local домэйны оронд та Alex-GLuck-Awesome-Company.com компанийн вэбсайтын домайныг аюулгүйгээр ашиглаж болно.
Хэрэв та байгууллагынхаа домэйныг хянах боломжгүй, энэ нь ямар нэг зүйл эвдэх вий гэж айж байгаа бол жилд 100 рубль төлж, aglac.com дэд бүтцэд зориулж тусдаа домэйн худалдаж авах боломжтой.
Олон нийтийн бүсэд домэйн ашиглах нь яагаад илүү ашигтай байдаг вэ?
1. Танай байгууллага олон нийтэд хүртээмжтэй үйлчилгээтэй: VPN, файл хуваалцах (seafile, nextcloud) болон бусад. Ийм үйлчилгээнд урсгалын шифрлэлтийг тохируулах нь ихэвчлэн бага зэрэг төвөгтэй ажил бөгөөд бид MitM халдлагаас хамгаалахгүй, учир нь энэ нь хэцүү (үнэндээ тийм биш).
Эсвэл та оффис дотор нэг үйлчилгээний хаягтай, интернетээс өөр хаягтай бөгөөд эдгээр холболтыг хадгалах шаардлагатай бөгөөд энэ нь бидний хязгаарлагдмал мэргэжилтний нөөцийг дэмий үрдэг. За, ажилчид өөр өөр хаягийг санаж байх ёстой бөгөөд энэ нь эвгүй юм.
2. Та дотоод үйлчилгээгээ шифрлэхийн тулд үнэ төлбөргүй гэрчилгээг ашиглаж болно.
Таны PKI бол бусад ажилд зарцуулж болох ажилчдын цагийг төлж байгаагаас илүү үнэ төлбөргүй баталгаажуулалтын байгууллагаас PKI ашиглах боломжийг олгохын тулд жилд 100 рублийн дэмжлэг авах шаардлагатай үйлчилгээ юм.
3. Та өөрийн гэрчилгээний эрх мэдлийг ашиглахдаа BYOD-тэй ажиллах хүсэлтэй (өөрийн зөөврийн компьютер, утас, таблетаа авчрах) алсын удирдлагатай ажилтан, хамт ажиллагсдынхаа дугуйнд хит зүүх бөгөөд тэдгээрийн төхөөрөмжийг удирдах боломжгүй болно. Тэд Mac, Linux, Android, iOS, Windows зэргийг авчирдаг - ийм амьтны хүрээлэнг дэмжих нь утгагүй юм.
Мэдээжийн хэрэг бүх зүйлд үл хамаарах зүйлүүд байдаг бөгөөд аюулгүй байдлын бодлогыг тогтоосон бусад хатуу ширүүн байгууллагуудтай банкууд ажилчдынхаа үйлчилгээг хэзээ ч сайжруулж чадахгүй.
Тэдний хувьд CA гэрчилгээгээ тодорхой хэмжээгээр гарын үсэг зурж болох төлбөртэй баталгаажуулалтын байгууллагууд байдаг (Google-ийн "үндэс гарын үсэг зурах үйлчилгээ").
Олон нийтийн домэйныг ашиглах нь илүү ашигтай байдаг бусад шалтгаанууд байдаг (хамгийн гол нь энэ нь танд харьяалагддаг), гэхдээ энэ нийтлэл нь энэ тухай биш юм.
Гол нь...
АНХААР! Хэрэв та ovirt-ийн итгэмжлэгдсэн жагсаалтад Let's Encrypt CA сертификат нэмбэл энэ нь таны системийн аюулгүй байдалд нөлөөлж болзошгүй!
Таны анхаарах ёстой хамгийн эхний зүйл бол Ovirt интерфэйсийг Интернэтэд үзүүлэх нь муу туршлага юм, учир нь Энэ нь ямар ч практик утгагүй бөгөөд аюулгүй байдлын нэмэлт аюулыг бий болгодог.
Иймд та манай аль нэг bastion host дээр гэрчилгээ авч, гэрчилгээ, түлхүүрээ ovirt-engine ашиглан манай хост руу шилжүүлэх хэрэгтэй.
Бид bastion хостын гадаад хаягийг dns-д өөрийн ovirt нэрээр нэмдэг ovirtengine.example.com, Би certbot болон nginx суулгацыг хөшигний ард үлдээх болно (үүнийг хэрхэн хийх талаар аль хэдийн Habré дээр тайлбарласан).
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
Архивыг bastion host-оос татаж аваад манай 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
Бид Ovirt-д суулгасан pki-г тохируулж, 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
Бид CA-г шифрлэлтээс 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
Бид apache-д зориулсан SSL тохиргоог засварлаж, тэмдэгт холбоосыг дэмжих параметрийг нэмж, гэрчилгээг шалгах CA-ийн параметрийг устгадаг (анхдагчаар баталгаажуулалтад итгэмжлэгдсэн 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-ийн автомат PKI-ээр үүсгэсэн анхны файлуудыг нөөцөлж, 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 — вэб сервер apache
ovirt-engine - ovirt вэб интерфэйс
ovirt-imageio-proxy - дискний дүрсийг татаж авах демон
ovirt-websocket-proxy - noVNC консолыг ажиллуулах үйлчилгээ
Дээрх бүгдийг Ovirt 4.2 хувилбар дээр туршиж үзсэн.
ovirt дээрх гэрчилгээг автоматаар сунгах
Аюулгүй байдлын сайн туршлагын дагуу бастион хост болон ovirt хооронд ямар ч холбоо байхгүй байх ёстой бөгөөд гэрчилгээг зөвхөн 3 сарын хугацаанд олгодог. Эндээс л би гэрчилгээний сунгалтыг хэрхэн хэрэгжүүлсэн тухай маргаантай асуудал гарч ирдэг.
Надад хуваарийн дагуу өдөр бүр өглөөний 5 цагт мастер дээр ажилладаг ухаалаг тоглоомын дэвтэр бий. Энэхүү тоглоомын дэвтэр нь ovirt дээр очиж, гэрчилгээний хүчинтэй байх хугацааг шалгаж, хэрэв дуусахад 5 хоногоос бага хугацаа үлдсэн бол энэ нь bastion host дээр очиж гэрчилгээг шинэчилж эхэлдэг.
Сертификатыг шинэчилсний дараа файл бүхий хавтсыг архивлаж, Forman хост руу татаж аваад Ovirt хост руу задлана. Үүний дараа SElinux файл дээрх контекстийг сэргээж, манай үйлчилгээг дахин эхлүүлнэ.
Эх сурвалж: www.habr.com
