Tek laboratuvar sunucusu, üç güven rolü, tek arıza alanı
Bir VPN girişi, özel hizmetler ve CI işleri tek bir sunucuda bile ayrı yetkilere ihtiyaç duyar. Rolleri ayırın, ağları yalıtın ve konsoldan kurtarmayı koruyun.
Her şey, derleme çalıştırıcısı VPN konuğunun kullandığı aynı ana makine soketine ihtiyaç duyana kadar çalışır ve o zaman kimse bir işin neden ağ geçidinin anahtarlarını okuyabildiğini açıklayamaz. Her şey sığdığı için tek bir makineye kuruldu ve çalışmasını sağlamanın en hızlı yolu bu olduğu için her konuğa geniş erişim verildi. Sonuç, güven sınırı elektrik kablosu olan bir ana makinedir. Rolleri ayırmak kulağa geldiğinden daha az iş gerektirir ve onları adlandırmakla başlar.
Şu anda her şeyi paylaşan üç rol
Bir VPN girişi, bir dizi özel hizmet ve bir derleme çalıştırıcısı farklı şeyler ister. Birincisi genel bir bağlantı noktası ve özel tarafta dar bir ağ ister. İkincisi kalıcı depolama ve uygulama sırları ister. Üçüncüsü başkasının yazdığı kodu çalıştırır.
Üçüne de aynı erişimi vermek, belirtiyi kafa karıştırıcı yapan şeydir, çünkü o zaman herhangi biri diğerlerini etkileyebilir. Hipervizör soketine ulaşabilen bir derleme işi, VPN'i durdurabilen bir iştir. Yönetim ağına rotası olan bir hizmet konuğu, anahtar yapılandırmasını değiştirebilir. Sorun yetkilerdir ve süreç listesi yalnızca bunun göründüğü yerdir. Rolleri önce adlandırmak, her yetkiye yaşayacak bir yer verir.
Aşağıdaki taslak o ayrım için bir başlangıç noktasıdır, yüksek kullanılabilirlik vaadi değildir. Onu doğrulanacak bir varsayım olarak görün, bitmiş tasarım olarak değil.
Üç rolü ayırın, üç süreci değil
Tek bir ana makinedeki üç konuk, üç yetki kümesi ve üç ağ konumu verir. Üç arıza alanı vermezler ve tasarım bunu açıkça söylemelidir.
Ayrım ancak bir konuğun ele geçirilmesi diğerlerine kendiliğinden erişim vermiyorsa işe yarar ve bu bir adlandırma geleneği değil, hipervizör ayarıdır. Bir sanal makineye ağ geçidi demek, başka bir konuğun ana makineye ulaşmasını engellemez. Ana makine adı yerine sanal anahtar yapılandırmasını okuyun, sonra her konuğun düşündüğünüz yerde durduğunu doğrulayın.
host
├─ vpn-gw 10.60.10.2/24 public 51820/udp only
├─ services 10.60.0.10/24 no route to the management network
└─ ci-runner 10.60.20.2/24 outbound only, no host socket
Topolojiyi yazın ve sonra ona sahip olan araçlarla doğrulayın. Yanlış köprüde görünen bir konuk bir bulgudur, ayrıntı değil. Herhangi bir hizmet yapılandırmasını değiştirmeden önce ağı düzeltin.
VPN konuğunun yalnızca sahip olduğu kapıları açmasına izin verin
Tünel bağlantı noktasını yönlendiricide yayınlayın ve başka hiçbir şeyi değil. Konukların yönetim bağlantı noktaları bir yönetim yoluna aittir, internete değil, hipervizörün kendi arayüzü de oraya aittir.
Özel taraftaki ağ, uzak kullanıcıların ihtiyaç duyduğu hizmetlere ulaşmalı ve orada durmalıdır. Uygulama kimlik doğrulaması açık kalır, çünkü tünel bir taşıma yoludur, oturum açma değil. VPN konuğunun yönlendirme tablosunu tek bir cümleyle anlatılabilecek kadar küçük tutun. Bu kadar basit anlatamıyorsanız sınır çoktan bulanıklaşmıştır.
virsh net-list --all
virsh net-dumpxml lab-private
sudo nft list ruleset | grep -n -E '51820|10.60'
Ana makinede dinleyen ve yönetim için gerekmeyen hiçbir şey hiç dinlememelidir. Buna, genel bir arayüzde açık bırakılması kolay olan hipervizör API'si de dahildir.
Derleme işleri farklı türde bir sınıra ihtiyaç duyar
Bir CI işi depo tarafından denetlenen komutları çalıştırır, bu yüzden güveni kodu kimin gönderebildiğine bağlıdır. Kabuk yürütücüsü bu komutları ana makinede çalıştırıcının kullanıcısı olarak çalıştırır, ki bu mevcut en geniş sınırdır.
Konteyner yürütücüleri daha dardır ve ayrıcalıklı bir konteyner o dar olanlardan biri değildir. Çalıştırıcıyı kendi ağ kapsamına sahip kendi konuğunda tutun ve ona yalnızca işlerin ihtiyaç duyduğu eser ve dağıtım erişimini verin. Tek kullanımlık çalışanlar saklanan durumu azaltır; erişilebilirliği veya sırların açığa çıkmasını azaltmazlar. İkisi de hâlâ açık sınırlar gerektirir.
Hizmet konuğu veriye sahiptir, bu yüzden çalışması gereken yedekleme planı onunkidir. Depoları, yüklemeleri ve veritabanını aynı zamanlamada tutun. İşin durumunu okumak yerine bir geri yüklemeyi test edin.
Üçünün paylaştığı arıza için plan yapın
Bir ana makine bir arıza alanıdır. Bir yeniden başlatma tüneli ve her özel hizmeti aynı anda ortadan kaldırır ve içeri giden bir yolun en çok önem taşıdığı an tam da o andır.
VPN konuğuna bağlı olmayan konsol erişimini koruyun; bu fiziksel bir konsol, bant dışı bir yönetim arayüzü veya sağlayıcı konsolu olabilir. Aynı diskte saklanan bir anlık görüntü bağımsız bir kopya değildir ve koruduğu konuğun içinde çalışan bir yedek de değildir. Sonra soğuk başlatmayı bir kontrol listesi olarak değil, bir sıra olarak test edin: ana makine, sanal ağlar, tünel yolu ve sıradan bir hesap altında adlandırılmış tek bir uygulama.
virsh list --all
systemctl is-active libvirtd
curl -sS -m 5 -o /dev/null -w '%{http_code}\n' https://10.60.0.10/
ss -ltnp | grep -E ':51820|:443'
Süreç başlatma sırası rotalar ve DNS hakkında hiçbir şey kanıtlamaz, bu yüzden birim durumları yerine yolu test edin. Uzak bir kullanıcının gerçekten ihtiyaç duyduğu şey yoldur.