
VPS diskini LUKS ile şifrele
Bir diski şifrelemek kolay olan kısımdır. Bunu fiziksel olarak dokunamayacağınız bir makinede yapmak — yani sunucunun, siz konsol başında olmadan saat 04:00'te yine de yeniden başlayabilmesini sağlamak — çoğu rehberin atladığı kısımdır. Kiralık donanımda şifrelemenin size gerçekte ne kazandırdığını açıkça ortaya koymaksa neredeyse hepsinin atladığı kısımdır. Bu rehber üçünü birden yapıyor: kurtarma modundan kurulan, SSH üzerinden uzaktan kilidi açılan bir LUKS2 kök birimi ve durdurduğu ile durduramadığı tehditlerin açık bir dökümü.
“Verilerim şifreli mi?” en sık aldığımız soru ve dürüst cevap şu: siz şifrelemediğiniz sürece değil. Disklerinizi sizin yerinize şifrelemiyoruz ve bu bilinçli bir tercih — elimizde tuttuğumuz bir anahtar, üretmeye zorlanabileceğimiz bir anahtardır. Dokümantasyonumuz bunu tek cümleyle söylüyor; bu rehber ise komutlarıyla birlikte uzun versiyonu.
Aşağıda anlatılan, bizim de fiilen kullandığımız yöntem: şifrelenmemiş küçük bir /boot, geri kalan her şey bir LUKS2 konteynerinin içinde ve initramfs içinde yaşayan, parolanın önyükleme sırasında dünyanın herhangi bir yerinden yazılabilmesini sağlayan küçük bir SSH sunucusu. Bu, dört bölgemizin hepsinde birebir aynı şekilde çalışır — Paris, Reykjavík, Zürich ve Bucharest — çünkü donanım birebir aynı. Size kurtarma modu sağlayan başka herhangi bir sağlayıcıda da çalışır. Son bölüm sınırları açıkça ortaya koyuyor, çünkü size yalnızca şifrelemenin neyi düzelttiğini anlatan bir rehber aslında bir şey satıyordur.
VPS'te disk şifrelemesi gerçekte neyi korur
Şifreleme genel amaçlı bir gizlilik ayarı değildir. Tek bir soruyu yanıtlar: anahtar olmadan biri bu blokları okuyabilir mi? Geri kalan her şey — sunucuyu kiraladığınızı kimin bildiği, trafiğin size atfedilip edilemeyeceği, bir mahkemenin herhangi bir şeyi zorlayıp zorlayamayacağı — başka bir yerde çözülür.
Bir VPS'te LUKS, gerçek anlamda şunlara karşı korur:
- Kullanımdan kaldırılmış ve arızalanmış donanım. NVMe sürücüler değiştirilir. Arızalı bir cihazda güvenli silme her zaman mümkün olmaz — bazen cihaz artık denetleyicinin komut bile kabul etmeyeceği kadar ölüdür ve yine de raftan çıkar.
- Çevrimdışı bir imaj. Sunucu kapalıyken kopyalanan bir birim — bir el koyma, bir taşıma, bir hata sırasında — şifreli metindir ve şifreli metin olarak kalır.
- Dışarı çıkan yedekler ve anlık görüntüler. Makineden çıkan her şey, sizin kontrolünüzün altındaki blok katmanından alınıyorsa şifreli çıkar; üstünden alınıyorsa istemci tarafında şifrelenmelidir.
- Artık bloklar. Bir sunucuyu yok ettiğinizde, altındaki alanlar er ya da geç yeniden kullanılır. Şifreleme, geride kalanları veri değil gürültü haline getirir.
Çalışan bir makineye karşı ise korumaz. Sunucunuz açıkken ana anahtar çekirdek belleğinde durur ve bu belleği dökebilen herkes parolaya bakmaksızın diskinizi okuyabilir. Kiralık altyapıda bu, hipervizör operatörü demektir. Bunu gizlilik bildirimimizde söylüyoruz, burada da söyleyelim: hiçbir sağlayıcının disk şifreleme özelliği bunu değiştirmez — bizimki dahil — ve aksini iddia eden herhangi bir sağlayıcı kriptografiyi değil pazarlamayı anlatıyordur.
Üç model ve gerçekte hangisine ihtiyacınız var
Bir terminale dokunmadan önce modeli seçin. Modeller gereken çaba açısından büyük farklar gösterir ve çoğu kişinin ihtiyacı olan birincisidir.
1. Şifreli bir veri birimi. Sistem normal ve şifresiz şekilde önyüklenir; bir dizin ağacı — bir maildir, bir veritabanı, bir arşiv — her önyüklemeden sonra elle açtığınız bir LUKS konteynerinin içinde yaşar. On dakikalık iş, kurtarma modu yok, kendinizi dışarıda bırakma riski yok. Önemsediğiniz şey tüm makine değil de tek bir veri kümesiyse burada durun; kırılganlığın neredeyse hiçbirini üstlenmeden faydanın çoğunu elde edersiniz. Bu, anonim mail sunucusu sayfasında önerdiğimiz yöntemdir.
2. Uzaktan kilit açmalı, şifreli bir kök birim. /boot dışındaki her şey şifrelenir ve her önyükleme, siz SSH ile bağlanıp parolayı girene kadar initramfs içinde duraklar. Bu rehberin geri kalanının inşa ettiği model budur. İlk seferinde bir saat, sonrasında her yeniden başlatmada bir SSH komutu tutar ve günlüklerin, paket önbelleklerinin, kabuk geçmişinin ve takas alanının da kapsandığı tek modeldir — kimsenin öyle olmasına karar vermediği halde verinin sızdığı yerler.
3. Kontrolünüzdeki bir anahtar sunucusuna karşı kendi kilidini açan şifreli bir kök birim. 2. modelle aynıdır, ancak Clevis, kilit açma materyalini başka bir yargı bölgesindeki bir makine üzerindeki Tang sunucusundan alır; böylece yeniden başlatmalar gözetimsiz olur. Buradaki ödünleşim nettir ve anlaşılmaya değer: sunucu artık anahtar sunucunuz onay verdiği sürece kendi kendini çözebilir — yani sırrı ortadan kaldırmak yerine yerini değiştirmiş olursunuz — ama karşılığında uzaktan bir kill switch de kazanırsınız. Bu konuya ileride daha ayrıntılı değinilecek.
Diskinizi neden sizin yerinize şifrelemiyoruz
Pek çok barındırma sağlayıcısı “bekleyen veri şifrelemesini” bir onay kutusu gibi reklam eder. Bu ifadenin genelde ne anlama geldiği konusunda net olmakta fayda var, çünkü arkasında birbirinden çok farklı iki şey saklanır.
Anahtarı sağlayıcıda tutulan şifreleme yalnızca çalınan bir sürücüye karşı korur, başka hiçbir şeye karşı korumaz. Sağlayıcı size hiçbir şey sormadan sunucunuzu açabiliyorsa, size hiçbir şey sormadan sunucunuzun şifresini de çözebilir demektir — sağlayıcıyı zorlayabilecek herkes de aynısını yapabilir. Hırsızlığa karşı gerçek bir önlemdir, hukuki sürece karşı ise yalnızca göstermeliktir.
Anahtarı sizin tuttuğunuz şifreleme gerçek anlamı olan versiyondur ve gözetimsiz yeniden başlatmayı doğası gereği imkânsız kılar. Bu, mühendislikle giderilecek bir kusur değildir; işi yapan özellik tam olarak budur.
Biz yalnızca ikinci seçeneği sunuyoruz, yapılandırılmamış halde, ve kararı size bırakıyoruz. Bizim elimizde tuttuğumuz şey daha dar kapsamlı ve belgelenmiştir: sunucu root parolaları satır düzeyinde AES-256-CBC ile şifrelenmiş olarak saklanır, akış günlüğü veya paket yakalama kaydı tutmayız ve imzalı bir warrant canary belirli bir takvimde yayımlanır. Bunların hiçbiri kendi anahtarınızın yerini tutmaz — bunlar sadece bu süre zarfında bizden hesap sorabileceğiniz kısımdır.
Şifreleme algoritması, anahtar boyutu ve Argon2 bellek tuzağı
Varsayılanlar iyidir. Bunlardan ikisini geçersiz kılmakta fayda var.
Şifreleme algoritması. 512 bit anahtarlı aes-xts-plain64 hem varsayılan hem de doğru cevaptır — 512 bit, aslında iki adet 256 bit'lik anahtardır, yani bu XTS modunda AES-256 demektir ve çalıştırdığımız her CPU'da AES-NI bulunur. AES hızlandırması olmayan bir makinede xchacha20,aes-adiantum-plain64 tercih edilir, ama bu bizim donanımımız değildir, muhtemelen sizinki de değildir.
Anahtar türetme. LUKS2 varsayılan olarak, bilerek bellek açısından ağır tasarlanmış Argon2id kullanır. cryptsetup, biçimlendirme sırasında makinenizi kıyaslar ve görebildiği RAM'e göre bir bellek maliyeti seçer — ve “şifreli sunucum açılmıyor” raporlarının çoğunu üreten tuzak da tam burada: initramfs, çalışan sistemden daha az kullanılabilir belleğe sahiptir ve birimi, hedef plandan daha fazla RAM'i olan bir kurtarma ortamında biçimlendirdiyseniz, kilit açma önyükleme sırasında başarısız olabilir veya sonlandırılabilir. Bunu açıkça sabitleyin. 1 GiB'lik bir Argon2 bellek maliyeti bir saldırgan için ciddi bir yüktür ve 4 GB'lık bir S1 için rahatlıkla erişilebilir durumdadır:
cryptsetup luksFormat --type luks2 \
--cipher aes-xts-plain64 --key-size 512 --hash sha256 \
--pbkdf argon2id --pbkdf-memory 1048576 --pbkdf-parallel 4 \
/dev/vda2--pbkdf-memory KiB cinsindendir, yani 1048576 1 GiB'a denk gelir. Sonradan başlıkta gerçekte neyin yer aldığını cryptsetup luksDump /dev/vda2 ile kontrol edin — keyslot bölümü kullanacağı bellek ve iterasyon sayılarını yazdırır; bunu bir kez okumak başarısız bir önyüklemeden çok daha ucuzdur.
Parola. Argon2, zayıf bir parolaya karşı zaman kazandırır; onu kurtarmaz. En az altı diceware kelimesinden oluşan bir parola kullanın. Sistemdeki tek sır budur ve hiçbir anahtar türetme fonksiyonu kötü bir parolayı telafi etmez.
Uzaktan kilit açma gerçekte nasıl çalışır
Şifreli bir kök birime sahip bir Linux önyüklemesinde tavuk-yumurta sorunu vardır: herhangi bir şey parola isteyebilmeden önce çekirdeğin ve initramfs'in yüklenmesi gerekir, ama bunlar tam da açmaya çalıştığınız diskte bulunur. Standart çözüm, çekirdeği, initramfs'i ve önyükleyiciyi barındıran küçük, şifrelenmemiş bir /boot bölümüdür. Geri kalan her şey LUKS'un içine girer.
Ardından initramfs duraklar ve parolayı sorar. Bir dizüstü bilgisayarda onu yazarsınız. Üç bin kilometre uzaktaki bir sunucuda ise şu ikisinden birine ihtiyacınız vardır:
- Konsol. Kontrol panelinizdeki her sunucuda bir noVNC konsolu vardır ve işe yarar — ama tuş vuruşları bizim altyapımızdan geçer, ki bu tam olarak anahtarınızın dışlaması gereken taraftır. Tek seferlik bir kurtarma için uygundur, rutin olarak yanlıştır.
- initramfs içinde bir SSH sunucusu.
dropbear-initramfsyaklaşık 200 KB'tır, ağı ayağa kaldırır, seçtiğiniz bir portu dinler, herkese açık anahtarlarınızdan birini kabul eder ve sizi doğrudan kilit açma istemine bırakır. Parola, dizüstü bilgisayarınızdan initramfs'e uçtan uca şifrelenir. Doğru cevap budur.
İki ayrıntı insanları şaşırtır. initramfs içindeki Dropbear'ın kendi host anahtarı vardır, bu yüzden parmak izi normal SSH sunucunuzunkinden farklıdır — bu beklenen bir durumdur, bir ortadaki adam saldırısı değildir, ve kendine ait bir known_hosts dosyasını hak eder, her seferinde yes yazıp geçmek yerine. Arayüz adının da doğru olması gerekir: Debian 13'te virtio ağ kartları genellikle ens3 veya enp1s0 olarak gelir, eth0 olarak değil. Yapılandırmayı yazmadan önce ip -br link ile kontrol edin, çünkü bunu yanlış yapmak ağsız bir initramfs ve konsola bir yolculuk anlamına gelir.
Clevis ve Tang ile gözetimsiz yeniden başlatmalar
Makinenin kendi başına geri gelmesi gerekiyorsa — bir çekirdek güncellemesinden, bir host yeniden başlatmasından, bir elektrik kesintisinden sonra — parola yazmak uygulanabilir değildir. Clevis, bir LUKS anahtar yuvasını harici bir politikaya bağlar; Tang ise bunların en basit ve kullanışlı olanını uygulayan küçük bir anahtar değişim sunucusudur.
# on a small server you control, elsewhere
apt install -y tang
systemctl enable --now tangd.socket
# on the encrypted VPS
apt install -y clevis clevis-luks clevis-initramfs
clevis luks bind -d /dev/vda2 tang '{"url":"http://tang.internal:7500"}'
update-initramfs -u -k allÖnyükleme sırasında initramfs, Tang ile bir McCallum-Relyea değişimi gerçekleştirir ve anahtarı, Tang sunucusu onu hiçbir zaman öğrenmeden ya da parolayı görmeden geri kazanır. Bu özelliklerin net şekilde ifade edilmesinde fayda var:
- VPS, kendi kilidini yalnızca Tang'a ulaşabildiği sürece açar. Tang'ı kapatın veya anahtarlarını değiştirin, bir sonraki önyükleme tamamen durur. Bu, gerçek bir uzaktan kill switch'tir — alışılmadık ve kullanışlıdır.
- Tang, herkese açık internette olmamalıdır. Ona WireGuard üzerinden ya da bir Tor onion servisi olarak ulaşın; tünel tarafını WireGuard rehberinde ele alıyoruz.
- Tang'ı verinin bulunduğundan farklı bir yargı bölgesine koyun. Yargı bölgesi sayfalarımız tam olarak bu tür bir ayrım için var.
- Başka bir anahtar yuvasında bir parola bulundurun. Clevis bir kolaylık katmanıdır, tek giriş yolunuz değildir.
Ne inşa ettiğinizi anlayın: gözetimsiz bir makine kendi anahtarını vekâleten tutar, bu yüzden VPS'i çalışırken ele geçiren ya da Tang sunucunuza ulaşabilen bir saldırgan veriyi de ele geçirir. Bu, kafanızdaki bir parolaya kıyasla gerçek bir zayıflamadır. Bunu, erişilebilirlik gizliliğin son biriminden daha önemli olduğunda seçin, varsayılan olarak değil.
Swap, geçici dosyalar ve açık metnin sızdığı yerler
Şifreli bir kök birim yüzeyin çoğunu kapsar, ama birkaç yol bunun dışına yazar ya da onu atlatır.
- Swap. RAM'deki her şey diske sayfalanabilir — anahtarlar, mesaj gövdeleri, çözülmüş arabellekler. Swap, şifreli birimin içinde bir swap dosyası olarak yaşıyorsa kapsam dahilindedir. Ayrı bir swap bölümü ise, her önyüklemede değişen rastgele bir anahtarla
/etc/crypttab'a eklemediğiniz sürece kapsam dışıdır:cryptswap /dev/vda3 /dev/urandom swap,cipher=aes-xts-plain64,size=256. Bir VPS'te swap dosyası daha basittir ve bölümü tercih etmek için bir neden yoktur. - /tmp. Diske hiç dokunmaması için onu tmpfs olarak bağlayın (
tmpfs /tmp tmpfs defaults,nosuid,nodev,size=512M 0 0). Ayrıca daha hızlıdır. - Hazırda bekletme (hibernation). Ana anahtarınız dahil RAM'in tamamını swap cihazına yazar. Bunu etkinleştirmeyin. İmajlarımızda varsayılan olarak kapalıdır.
- Şifrelenmemiş /boot. Çekirdekler, initramfs imajları ve GRUB yapılandırması, diske çevrimdışı erişimi olan herkes tarafından okunabilir ve daha da önemlisi yazılabilir. LUKS size gizlilik sağlar, önyükleme bütünlüğü değil. Tehdit modeliniz önyükleyiciyle oynanmasını içeriyorsa, şifreleme tek başına bunu yakalamaz — her çekirdek güncellemesinden sonra
/boot'un hash'lerini kaydedin ve dışarıdan kontrol edin, ya da bu boşluğu bilinçli olarak kabul edin. - Mevcut anlık görüntüler ve eski birimler. Bugün şifrelemek dün alınmış bir imaj için hiçbir şey ifade etmez. Sunucu önemsediğiniz verilerle bir kez bile şifresiz çalıştıysa, o veriyi açığa çıkmış sayın ve ondan türetilen her şeyi değiştirin.
Performans: maliyeti ve ayarlanması gerekenler
Ek yük, kararı belirlememesi gerekecek kadar küçüktür, ama sıfır da değildir. Tahmin etmeden önce ölçün:
cryptsetup benchmarkEPYC sunucularımızda, 512 bit anahtarlı aes-xts, çekirdek başına saniyede birkaç gigabayt mertebesinde ölçüm verir — tek bir NVMe biriminin talep edeceğinden rahatlıkla daha yüksektir. Gerçekte ortaya çıkan maliyet, küçük rastgele yazmalarda gecikme ve CPU kullanımıdır, verim değil.
Çekirdeğin dm-crypt iş kuyruklarının gecikmeyi azaltmak yerine artırdığı NVMe'de iki LUKS2 bayrağı önemlidir. Bunları ayarlayın ve başlıkta kalıcı hale getirin:
cryptsetup refresh cryptroot \
--perf-no_read_workqueue --perf-no_write_workqueue --persistentÜçüncü bayrak olan --allow-discards, TRIM'i altta yatan cihaza geçirir. Bu, hangi blokların kullanılmadığını ortaya çıkarma pahasına, birimin ömrü boyunca yazma amplifikasyonunu düşük tutar — bu da verinizin yaklaşık boyutunu ve şeklini, ham cihazı okuyan herkese sızdırır. Genel amaçlı bir sunucu için etkinleştirin; bir birimin yüzde 3 dolu olması bilgisinin kendisi hassassa kapalı bırakın. Evrensel olarak doğru bir cevap yoktur, yalnızca bilerek vermeniz gereken bir karar vardır.
Başlık, anahtar yuvaları ve bir şeylerin ters gittiği gün
LUKS başlığı, bölümün başında yaklaşık 16 MB yer kaplar ve ana anahtarın şifreli kopyalarını tutar. Ona zarar verin — yanlış yazılmış bir dd, cihazın başını iyi niyetle yeniden yazan bir bölümleme aracı — ve arkasındaki her bayt gider. Bir kurtarma hizmeti yoktur. Bizde de bir kopyası yoktur.
# back it up, off the server, before you put data on the volume
cryptsetup luksHeaderBackup /dev/vda2 \
--header-backup-file luks-header-$(date +%F).img
# add a second passphrase while you still have the first
cryptsetup luksAddKey /dev/vda2
# see what is in the header
cryptsetup luksDump /dev/vda2Bu yedek hakkında iki şey var. Disk kadar hassastır: içinde anahtar yuvaları bulunur, bu yüzden parolanızı değiştirdikten sonra geri yüklenen eski bir başlık eski parolayı sorunsuzca kabul eder. Onu parolayı sakladığınız gibi saklayın ve rotasyon yaptığınızda eski kopyaları imha edin. İkincisi, LUKS2 size 32 anahtar yuvası verir — en az ikisini kullanın; yedek olanı, günlük parolanızın bulunmadığı bir yerde tutulan uzun, rastgele bir parola olsun. Bunun önlediği arıza sıkıcı ve yaygındır: parolayı değiştirirsiniz, iki kez aynı şekilde yanlış yazarsınız ve bunu bir sonraki girişte değil, bir sonraki yeniden başlatmada fark edersiniz.
Geri dönecek bir yolunuz da olsun. Kurtarma modu, sunucuyu SSH anahtarlarınız eklenmiş ve şifreli birim dokunulmamış halde ISO'muzdan önyükler; bu da cryptsetup open /dev/vda2 rescue && mount /dev/mapper/rescue /mnt komutunu çalıştırıp veriyi kaybetmeden bozuk bir crypttab'ı veya kötü bir initramfs'i onarabileceğiniz anlamına gelir. Bunu, hiçbir şey ters gitmemişken, bir kez bilerek deneyin.
Şifrelemenin yapamadıkları, açıkça
Böyle bir rehberin yapabileceği en yararlı şey kendi sınırını çizmektir.
- Çalışan bir sunucuyu korumaz. Ana anahtar, kilit açmadan kapanmaya kadar çekirdek belleğindedir. Hipervizör düzeyinde bellek erişimi bunu etkisiz kılar. Bellek şifreleme — AMD SEV-SNP ve benzerleri — bunu esaslı biçimde değiştiren tek teknolojidir ve bunu bugün sunmuyoruz; SEV olmadan çalışan sanal makinenizin buna karşı opak olduğunu iddia eden bir sağlayıcı ya yanılıyordur ya da yalan söylüyordur.
- Sizi anonim yapmaz. Zürich'teki şifreli bir diskin yine de bir IP'si, bir faturalandırma izi ve bir yerden başlamış bir SSH oturumu vardır. Bu farklı bir sorundur ve bunun nasıl ters gidebileceğini sizi deşifre eden hatalar yazımızda ele aldık.
- Bir mahkemenin ne emredebileceğini değiştirmez. Yargı bölgesi zorlamayı belirler; şifreleme okunabilirliği belirler. Bazı yargı bölgelerinde bir parolayı şahsen ifşa etmeniz emredilebilir. Hukuki süreç rehberimiz, neye karşı işlem yapıp neye yapmadığımızı ele alır.
- Kaybettiğiniz bir parolaya karşı işe yaramaz. Tasarım gereği, ve tekrar etmeye değer, çünkü bize yardım istemek için gelen destek talebi ayda bir kez geliyor ve cevap her zaman aynı.
- Önyükleme zincirini doğrulamaz. Gizlilik, bütünlük değildir.
/bootçevrimdışı okunabilir ve değiştirilebilir durumdadır.
Yaptığı şey, maruziyetin bütün bir sınıfını ortadan kaldırmaktır — bir diskin çalışmadığı zaman başına gelen her şey, ki disklerin başına gelenlerin çoğu da budur. Bu, bir saate değer. Bunu bir no-KYC kaydıyla, Monero ödemesiyle ve bilerek seçilmiş bir yargı bölgesiyle birleştirin; her katman farklı bir zafiyeti kapatır. Hiçbiri hepsini kapatmaz.
- Sunucuyu devreye alın ve kurtarma moduna önyükleyin
Herhangi bir plan ve bölgeyi standart bir Debian 13 imajıyla devreye alın — kurulu sistem zaten değiştirilecek, bu yüzden imaj seçimi neredeyse hiç önemli değil. Ardından Server → Recovery → Boot into rescue yolunu izleyin. Kurtarma ortamı, hesabınızda zaten kayıtlı olan SSH anahtarlarını ekler ve diske dokunmaz, böylece
/dev/vdabağlanmamış ve boş haldeyken bir root kabuğu elde edersiniz. Kurtarma host anahtarının parmak izinin kurulu sistemin ki'nden farklı olduğunu unutmayın; bu beklenen bir durumdur. - Diski bölümlendirin: küçük bir düz metin /boot, tek büyük bir LUKS konteyneri
İki bölüm.
/bootiçin bir gigabayt — birkaç çekirdek için yeterli — ve geri kalan her şey şifreli birim için.sgdisk --zap-all /dev/vda sgdisk -n1:0:+1G -t1:8300 -c1:boot /dev/vda sgdisk -n2:0:0 -t2:8309 -c2:crypt /dev/vda partprobe /dev/vda && lsblk /dev/vda8309tipi, ikinci bölümü bir Linux LUKS birimi olarak işaretler. Sunucunuz UEFI modunda önyükleniyorsa, 1. bölümü bir ESP yapın (-t1:ef00, FAT32 ile biçimlendirilmiş ve/boot/efi'ye bağlanmış) ve ayrı bir 1 GB'lık/bootekleyin; yukarıdaki BIOS düzeni imajlarımızın varsayılan olarak kullandığı düzendir. - LUKS2 birimini oluşturun ve açın
Argon2 bellek maliyetini açıkça sabitleyin, böylece initramfs daha sonra bunu karşılayabilir.
cryptsetup luksFormat --type luks2 \ --cipher aes-xts-plain64 --key-size 512 --hash sha256 \ --pbkdf argon2id --pbkdf-memory 1048576 --pbkdf-parallel 4 \ /dev/vda2 cryptsetup open /dev/vda2 cryptroot mkfs.ext4 -L root /dev/mapper/cryptroot mkfs.ext2 -L boot /dev/vda1En az altı diceware kelimesinden oluşan bir parola kullanın ve devam etmeden önce onu fiziksel bir yere yazın. Kimse onu sizin için geri getiremez — ödediğiniz özellik tam olarak budur.
- Debian'ı şifreli birime kurun
Yeni kökü bağlayın, içine debootstrap ile bir temel sistem kurun ve chroot'un düzgün çalışması için çekirdek dosya sistemlerini bağlayın (bind mount).
mount /dev/mapper/cryptroot /mnt mkdir -p /mnt/boot && mount /dev/vda1 /mnt/boot debootstrap --arch=amd64 trixie /mnt http://deb.debian.org/debian for d in dev dev/pts proc sys run; do mount --bind /$d /mnt/$d; done chroot /mnt /bin/bashchroot içindeyken, şifreli bir kökü önyüklenebilir ve erişilebilir kılan parçaları kurun:
apt update && apt install -y linux-image-amd64 grub-pc \ cryptsetup cryptsetup-initramfs dropbear-initramfs \ openssh-server ifupdown ca-certificates locales - crypttab, fstab ve initramfs ağ yapılandırmasını yazın
crypttab, initramfs'e hangi cihazın kilidinin açılacağını söyler;initramfs.confise önce ağa nasıl bağlanacağını söyler./dev/vda2değil, LUKS UUID'sini kullanın — cihaz adları değişebilir.echo "cryptroot UUID=$(blkid -s UUID -o value /dev/vda2) none luks,discard" \ > /etc/crypttab cat > /etc/fstab <<'EOF' /dev/mapper/cryptroot / ext4 defaults,noatime 0 1 LABEL=boot /boot ext2 defaults 0 2 tmpfs /tmp tmpfs defaults,nosuid,nodev,size=512M 0 0 EOF # DHCP on the virtio NIC. Confirm the name with `ip -br link` first. echo 'IP=:::::ens3:dhcp' >> /etc/initramfs-tools/initramfs.conf echo 'DEVICE=ens3' >> /etc/initramfs-tools/initramfs.confHangi blokların kullanılmadığını ortaya çıkarmak istemiyorsanız crypttab satırından
,discard'ı çıkarın. DHCP yerine statik bir adres için alan sırasıIP=<ip>::<gateway>:<netmask>::<iface>:offşeklindedir. - Kilit açma anahtarınızı initramfs'e koyun ve Dropbear'ı kilitleyin
Yalnızca buraya koyduğunuz anahtar, makinenin önyüklemede kilidini açabilir. Onu günlük kullandığınız SSH anahtarınızdan ayrı tutun ki birini kaybetmek ikisini birden kaybettirmesin.
install -d -m 0755 /etc/dropbear/initramfs cat > /etc/dropbear/initramfs/authorized_keys <<'EOF' ssh-ed25519 AAAAC3Nza... unlock@laptop EOF chmod 0600 /etc/dropbear/initramfs/authorized_keys cat > /etc/dropbear/initramfs/dropbear.conf <<'EOF' DROPBEAR_OPTIONS="-p 2222 -s -j -k -I 180 -c cryptroot-unlock" EOF update-initramfs -u -k all dropbearkey -y -f /etc/dropbear/initramfs/dropbear_ed25519_host_key | grep -i fingerprint-p 2222, kilit açma servisini port 22'nin dışında tutar; böylece çalışan sistemin sshd'siyle asla çakışmaz.-sparola ile girişleri yasaklar,-jve-kport yönlendirmeyi devre dışı bırakır,-I 180boşta bekleyen oturumları düşürür ve-c cryptroot-unlockher başarılı girişi doğrudan parola istemine yönlendirir. Bu parmak izini şimdi kaydedin — kendi initramfs'inizle konuştuğunuzu bu şekilde bileceksiniz. Debian 11 ve öncesinde bu dosyalar bunun yerine/etc/dropbear-initramfs/içinde bulunur. - Önyükleyiciyi kurun, bir root parolası belirleyin, yeniden başlatın
GRUB, bölüme değil diskin kendisine kurulur.
/bootşifrelenmemiş olduğu içinGRUB_ENABLE_CRYPTODISK'e gerek yoktur.grub-install /dev/vda update-grub passwd root echo 'cryptovps' > /etc/hostname exit # leave the chroot umount -R /mnt cryptsetup close cryptroot rebootArdından, diskten önyüklenmesi için sunucuyu kontrol panelinden kurtarma modundan çıkarın. Bu ilk önyükleme için noVNC konsolunu açık tutun — initramfs ağsız gelirse bunu orada görürsünüz ve arayüz adını tahmin etmek yerine düzeltebilirsiniz.
- Uzaktan kilidi açın ve birimin gerçekten şifreli olduğunu doğrulayın
Otuz saniye bekleyin, ardından port 2222 üzerinden initramfs'e bağlanın. Normal known_hosts dosyanızla hiç karışmaması için host anahtarını kendine ait bir dosyada sabitleyin.
ssh -p 2222 -o UserKnownHostsFile=~/.ssh/known_hosts.initramfs \ -i ~/.ssh/id_ed25519_unlock root@<server-ip> # the passphrase prompt appears immediately; type it, the session closes, # and the machine finishes booting into the decrypted root. # once you are in the running system: lsblk -o NAME,FSTYPE,MOUNTPOINT cryptsetup status cryptroot cryptsetup luksDump /dev/vda2 | head -20cryptsetup status,type: LUKS2,cipher: aes-xts-plain64vekeysize: 512 bitsbilgilerini raporlamalıdır. Şimdi herkesin ertelediği iki şeyi yapın: LUKS başlığını sunucu dışında yedekleyin ve ikinci bir anahtar yuvası ekleyin. Sonra, başarısız olmasını beklemediğiniz anda kilit açma yolunun çalıştığını kanıtlamak için bilerek bir kez daha yeniden başlatın.
Şifrelemenin üç yolu ve her birinin size maliyeti
| Model | Şifrelenen kısım | Sonraki yeniden başlatmada | Kurulum çabası | En uygun olduğu durum |
|---|---|---|---|---|
| Şifreli veri birimi | Bir LUKS konteynerinin içinde tek bir dizin ağacı | Sunucu normal şekilde önyüklenir; konteyneri elle açarsınız | ~10 dakika, kurtarma modu gerekmez | Tek bir hassas veri kümesi — maildir, veritabanı, arşiv |
| Şifreli kök birim + SSH üzerinden uzaktan kilit açma | /boot dışındaki her şey — günlükler, swap, önbellekler, geçmiş | SSH ile bağlanıp parolayı girene kadar önyükleme initramfs içinde duraklar | ~1 saat, kurtarma modundan kurulum | Bütün durumu hassas olan ve yeniden başlatmalarını takip edebileceğiniz bir makine |
| Şifreli kök birim + Clevis/Tang | /boot dışındaki her şey | Tang sunucunuza ulaşabildiği sürece kendi kilidini açar; ulaşamazsa tamamen durur | ~1 saat, artı kontrolünüzdeki ikinci bir sunucu | Erişilebilirliğin gizliliğin son biriminden daha önemli olduğu gözetimsiz makineler |
Yanıtlanmaya değer sorular
CryptoVpsHost sunucumdaki verileri okuyabilir mi?
Çalışan bir sunucuda, prensipte evet — ve aksini söyleyenler dahil, sanallaştırılmış altyapı sunan herhangi bir sağlayıcı da okuyabilir. Kilidi açılmış bir LUKS biriminin ana anahtarı çekirdek belleğinde durur ve o belleğin sahibi hipervizördür. LUKS'un ortadan kaldırdığı şey geri kalan her şeydir: kapatılmış bir birim, kullanımdan kaldırılmış bir disk, kopyalanmış bir imaj, bir yedek. Diskleri sizin yerinize şifrelememizin nedeni tam olarak şu: elimizde tuttuğumuz bir anahtar, üretmeye zorlanabileceğimiz bir anahtardır ve biz bunu bir onay kutusu satmak yerine açıkça söylemeyi tercih ederiz. Tehdit modeliniz çalışan bir makinenin operatörünü de kapsıyorsa, hiç kimsenin disk şifreleme özelliği bunu çözmez.
Tam disk şifreleme VPS'i yavaşlatır mı?
AES-NI'li donanımda — ki bizim tüm donanımımız böyledir — neredeyse hiç. cryptsetup benchmark komutunu çalıştırdığınızda aes-xts'in çekirdek başına saniyede birkaç gigabayt mertebesinde olduğunu görürsünüz; bu, tek bir NVMe biriminin talep edeceğinden çok daha yüksektir. Ölçülebilir maliyet, küçük rastgele yazmalarda biraz ekstra gecikme ve CPU kullanımıdır, verim (throughput) değil. NVMe'de --perf-no_read_workqueue ve --perf-no_write_workqueue ayarlarını --persistent ile birlikte yapmak geride kalanın çoğunu ortadan kaldırır.
Parolayı kaybedersem ne olur?
Veri gitmiştir. Kurtarma yoktur, emanette tutulan bir ana anahtar yoktur ve bunu değiştirecek hiçbir destek talebi yoktur — bir kopyası hiçbir zaman bizde olmadı. Ödediğiniz özellik tam olarak budur ve bu rehberin, birime gerçek veri koymadan önce LUKS başlığını sunucu dışında yedeklemenizi ve farklı, uzun bir parolayla ikinci bir anahtar yuvası eklemenizi iki kez söylemesinin nedeni de budur. Yalnızca tek bir yerde — hatta yalnızca kafanızda — tutulan bir parola, tek bir arıza noktasıdır.
/boot da şifreleniyor mu?
Hayır, ve bu normaldir. Herhangi bir şey parola isteyebilmeden önce çekirdeğin ve initramfs'in okunabilir olması gerekir, bu yüzden bunlar küçük, düz metin bir bölümde bulunur. GRUB, GRUB_ENABLE_CRYPTODISK ile şifreli bir /boot'u okuyabilir, ama bu sadece sorunu öteler — ondan önceki önyükleyici aşaması yine de açık metindir. Dürüst çerçeve şudur: LUKS size bekleyen verinin gizliliğini sağlar, önyükleme zincirinin bütünlüğünü değil. Tehdit modelinizde /boot ile çevrimdışı oynanması varsa, her çekirdek güncellemesinden sonra onu hash'leyin ve makinenin dışından doğrulayın.
Sunucu ben hiçbir şey yazmadan yeniden başlayabilir mi?
Yalnızca ona anahtarı elde etmesinin bir yolunu verirseniz — ki bu kaçınılmaz olarak güvenceyi zayıflatır. Temiz yöntem, başka bir yargı bölgesinde kontrolünüzdeki bir makine üzerindeki Tang sunucusuna bağlanan Clevis'tir: VPS, Tang'a ulaşabildiği sürece kendi kilidini açar, ulaşamazsa tamamen durur — bu da aynı zamanda uzaktan bir kill switch işlevi görür. Tang'a herkese açık internet yerine WireGuard üzerinden ya da bir Tor onion servisi olarak ulaşın ve Clevis'in tek giriş yolunuz olmaması için ikinci bir anahtar yuvasında bir parola bulundurun.
Bunu herhangi bir işletim sistemi imajında mı yapabilirim, yoksa yalnızca Debian'da mı?
Kurtarma modu olan herhangi bir Linux imajı işe yarar; buradaki komutlar Debian 13 içindir ve doğrudan Ubuntu 24.04'e uyarlanır. Rocky, Alma ve Fedora'da araç seti dracut'tur, initramfs-tools değildir, bu yüzden uzaktan kilit açma dropbear-initramfs yerine dracut-crypt-ssh modülünü veya ağ özellikli bir dracut initramfs'i kullanır — LUKS tarafı aynıdır. Bir kurtarma kabuğundan hiç kurulum yapmak istemiyorsanız, 4 GiB'a kadar özel bir ISO yükleyip dağıtımınızın kurulum programını kullanabilirsiniz; bu, standart bir seçenek olarak şifreli LVM sunar — uzaktan kilit açmayı daha sonra siz eklersiniz.
Şifreleme mi kullanmalıyım, yoksa farklı bir yargı bölgesi mi seçmeliyim?
Bu ikisi farklı sorunları çözer ve soru aslında yanlış bir ikilemdir. Şifreleme blokların okunabilir olup olmadığını belirler; yargı bölgesi ise kimin neyi ne kadar hızlı zorlayabileceğini belirler. Paris'teki bir LUKS birimi ile Zürich'teki düz metin bir birim tamamen farklı şekillerde başarısız olur. Bunu soranların çoğu ikisini de ister, bir de baştan itibaren açıklanacak hiçbir şey olmaması için bir no-KYC kaydı — her katman diğerlerinin açık bıraktığı bir boşluğu kapatır. Yargı bölgesi sayfalarımız, dört bölgemizin her birinin gerçekte ne sunduğunu ortaya koyar.
Keep exploring
Sizi deşifre eden anonimlik hataları
SSH oturumu ev IP'nizden geliyorsa şifreli bir disk işe yaramaz. Diğer her şeyi boşa çıkaran hatalar.
Anonim mail sunucusu VPS
Maildir posta kutusunun etrafına kurulan bir LUKS konteynerinin pratik seçenek olduğu yer — şifrelemenin tüm makine yerine tek bir veri kümesine uygulandığı durum.
VPS planları ve fiyatlandırma
S1/S2/S3 KVM Linux VPS — AMD EPYC, /64 IPv6, 10 Gbps sınırsız, sadece kripto ile aylık 5 dolardan başlayan fiyatlarla.
Deploy your offshore server.
Bir bölge seçin. Bir plan seçin. Anahtar yapıştırın. Ödeyin. Sonraki 47 saniye bizden.