Şifreli Disk Bölümü Oluşturmak için LUKS Kullanımı

Veri güvenliği söz konusu olduğunda disk şifreleme, savunma katmanlarının en kritiklerinden birini oluşturuyor. Bir dizüstü bilgisayar çalındığında, bir sunucu fiziksel olarak ele geçirildiğinde ya da kullanım ömrünü tamamlamış diskler hurdaya çıkarıldığında, şifrelenmemiş veriler tamamen açık hale gelir. İşte tam bu noktada LUKS (Linux Unified Key Setup) devreye giriyor. Linux ekosisteminin standart disk şifreleme çözümü olan LUKS, hem masaüstü kullanıcıları hem de kurumsal sysadmin’ler için güvenilir, esnek ve iyi belgelenmiş bir araç sunuyor. Bu yazıda LUKS’u sıfırdan öğrenerek gerçek dünya senaryolarında nasıl kullanacağınızı adım adım ele alacağız.

LUKS Nedir ve Neden Önemlidir

LUKS, dm-crypt üzerine inşa edilmiş bir disk şifreleme standardıdır. Cryptsetup aracı ile yönetilir ve AES gibi güçlü şifreleme algoritmalarını kullanır. Temel mantığı şu şekilde çalışır: diskin başına bir header yazar, bu header’da şifreleme anahtarı bilgileri saklanır ve kullanıcı doğru parolayı girdiğinde dm-crypt katmanı üzerinden şeffaf bir şekilde veri okunup yazılır.

LUKS’un rakiplerine göre öne çıkan birkaç özelliği var:

  • Çoklu anahtar desteği: Aynı bölüm için 8 adede kadar farklı parola veya anahtar dosyası tanımlayabilirsiniz
  • Header yönetimi: Header’ı ayrı bir konumda saklayabilirsiniz, bu da plausible deniability (makul inkar edilebilirlik) sağlar
  • Standartlaşmış format: Farklı Linux dağıtımları arasında uyumluluk sağlar
  • Güçlü PBKDF: Parola tabanlı saldırılara karşı Argon2 veya PBKDF2 kullanır

Kurulum ve Ön Hazırlık

Çoğu modern Linux dağıtımında cryptsetup paketi varsayılan olarak gelir, ama emin olmak için kontrol edelim:

# Ubuntu/Debian sistemlerde
sudo apt-get update && sudo apt-get install cryptsetup

# RHEL/CentOS/Fedora sistemlerde
sudo dnf install cryptsetup

# Arch Linux'ta
sudo pacman -S cryptsetup

# Kurulu sürümü kontrol etmek için
cryptsetup --version

Şimdi hangi disklerin mevcut olduğuna bakalım. Burada dikkatli olmak gerekiyor, yanlış diski seçmek veri kaybına yol açar:

# Mevcut diskleri ve bölümleri listele
lsblk -f

# Daha detaylı bilgi için
sudo fdisk -l

# Sadece disk isimlerini görmek için
ls /dev/sd* /dev/nvme* 2>/dev/null

Bu yazıdaki örneklerde /dev/sdb adlı bir diski kullanacağız. Siz kendi ortamınıza göre uyarlamalısınız.

Temel LUKS Bölümü Oluşturma

Adım 1: Diski Hazırlamak

Yeni bir şifreli bölüm oluşturmadan önce, diski rastgele veri ile doldurmak iyi bir güvenlik pratiğidir. Bu sayede şifreli ve şifrelenmemiş bölgeler arasındaki fark analiz saldırılarıyla tespit edilemez:

# Diski rastgele veri ile doldur (bu işlem büyük diskler için saatler sürebilir)
sudo dd if=/dev/urandom of=/dev/sdb bs=4096 status=progress

# Daha hızlı bir alternatif için shred kullanabilirsiniz
sudo shred -v -n 1 /dev/sdb

# Ya da cryptsetup ile hızlı ama etkili yöntem
sudo cryptsetup open --type plain /dev/sdb temp_wipe --key-file /dev/urandom
sudo dd if=/dev/zero of=/dev/mapper/temp_wipe bs=4096 status=progress
sudo cryptsetup close temp_wipe

Adım 2: LUKS Formatlamak

# Temel LUKS2 formatı oluştur (LUKS2 modern ve önerilen sürümdür)
sudo cryptsetup luksFormat --type luks2 /dev/sdb

# Daha fazla kontrol için parametrelerle kullanım
sudo cryptsetup luksFormat 
  --type luks2 
  --cipher aes-xts-plain64 
  --key-size 512 
  --hash sha256 
  --iter-time 5000 
  /dev/sdb

Buradaki parametrelerin anlamları:

  • –type luks2: LUKS2 formatını kullan, daha modern ve güvenli
  • –cipher aes-xts-plain64: XTS modunda AES şifreleme, diskler için standart
  • –key-size 512: 512-bit anahtar (AES-256 için XTS modunda bu değer gerekir)
  • –hash sha256: PBKDF için kullanılacak hash algoritması
  • –iter-time 5000: Parola türetme süresi (ms), yüksek değer brute-force’u zorlaştırır

Komutu çalıştırdığınızda sistem sizi uyaracak ve parola isteyecektir. Büyük harflerle yazılan uyarıyı dikkatlice okuyun, bu işlem geri alınamaz.

Adım 3: Bölümü Açmak ve Kullanmak

# Şifreli bölümü aç ve /dev/mapper/guvenli_disk olarak eşle
sudo cryptsetup open /dev/sdb guvenli_disk

# Bölümü açık mı kontrol et
ls -la /dev/mapper/guvenli_disk

# Dosya sistemi oluştur (bölüm ilk kez kullanılıyorsa)
sudo mkfs.ext4 /dev/mapper/guvenli_disk

# XFS tercih ediyorsanız
sudo mkfs.xfs /dev/mapper/guvenli_disk

# Mount noktası oluştur ve bağla
sudo mkdir -p /mnt/guvenli
sudo mount /dev/mapper/guvenli_disk /mnt/guvenli

# Artık normal bir disk gibi kullanabilirsiniz
df -h /mnt/guvenli

Adım 4: Kullanım Sonrası Kapatmak

Şifreli bölümü güvenli şekilde kapatmak çok önemlidir:

# Önce unmount et
sudo umount /mnt/guvenli

# Sonra LUKS bölümünü kapat
sudo cryptsetup close guvenli_disk

# Ya da luksClose ile (aynı işlev)
sudo cryptsetup luksClose guvenli_disk

Anahtar Yönetimi

LUKS’un en güçlü özelliklerinden biri çoklu anahtar (key slot) desteğidir. Toplamda 8 slot mevcuttur.

Yeni Parola Eklemek

# Mevcut bir bölüme yeni parola ekle
sudo cryptsetup luksAddKey /dev/sdb

# Belirli bir slot'a eklemek için
sudo cryptsetup luksAddKey --key-slot 1 /dev/sdb

# Mevcut key slot durumunu görüntüle
sudo cryptsetup luksDump /dev/sdb | grep -A2 "Key Slot"

Anahtar Dosyası Kullanımı

Parola yerine ya da ek olarak bir anahtar dosyası kullanmak, özellikle otomasyon senaryolarında işe yarar:

# Güvenli bir anahtar dosyası oluştur
sudo dd if=/dev/urandom of=/root/luks_keyfile bs=4096 count=1
sudo chmod 400 /root/luks_keyfile

# Bu anahtar dosyasını LUKS bölümüne ekle
sudo cryptsetup luksAddKey /dev/sdb /root/luks_keyfile

# Anahtar dosyasıyla bölümü aç
sudo cryptsetup open --key-file /root/luks_keyfile /dev/sdb guvenli_disk

# Bir key slot'u kaldırmak (örneğin eski parolayı silmek)
sudo cryptsetup luksKillSlot /dev/sdb 0

Parola Değiştirmek

# Mevcut parolayı değiştirmek için (önce eski, sonra yeni parola istenir)
sudo cryptsetup luksChangeKey /dev/sdb

# Belirli bir slot'taki parolayı değiştir
sudo cryptsetup luksChangeKey --key-slot 0 /dev/sdb

Sistem Başlangıcında Otomatik Bağlama

Sunucularda ve masaüstü sistemlerde, şifreli bölümün sistem başlangıcında otomatik olarak bağlanması gerekebilir. Bu senaryoda anahtar dosyası kullanımı zorunlu hale gelir.

/etc/crypttab ve /etc/fstab Yapılandırması

# Önce disk UUID'sini öğren
sudo blkid /dev/sdb
# Çıktı: /dev/sdb: UUID="abcd1234-..." TYPE="crypto_LUKS"

# /etc/crypttab dosyasını düzenle
sudo nano /etc/crypttab

crypttab dosyasına eklenecek satır formatı şu şekildedir:

# /etc/crypttab içeriği
# <isim> <UUID veya cihaz> <anahtar dosyası> <seçenekler>
guvenli_disk UUID=abcd1234-5678-90ab-cdef-1234567890ab /root/luks_keyfile luks,discard

# Parola ile açılacaksa (sistem boot'ta parola sorar)
guvenli_disk UUID=abcd1234-5678-90ab-cdef-1234567890ab none luks

Ardından /etc/fstab’a mount noktasını ekleyin:

# /etc/fstab'a eklenecek satır
/dev/mapper/guvenli_disk /mnt/guvenli ext4 defaults,nofail 0 2

nofail seçeneği kritiktir: bölüm açılamazsa sistem yine de boot etmeye devam eder.

Gerçek Dünya Senaryoları

Senaryo 1: Veritabanı Sunucusunda Hassas Veri Koruması

Bir PostgreSQL sunucusunda /var/lib/postgresql dizinini şifreli disk üzerinde tutmak istiyorsunuz:

# Şifreli bölümü hazırla (üretim öncesi)
sudo cryptsetup luksFormat --type luks2 --cipher aes-xts-plain64 --key-size 512 /dev/sdb

# Anahtar dosyası oluştur ve güvenli yere sakla
sudo dd if=/dev/urandom of=/etc/ssl/private/pg_luks.key bs=4096 count=1
sudo chmod 400 /etc/ssl/private/pg_luks.key
sudo chown root:root /etc/ssl/private/pg_luks.key

# Anahtar dosyasını ekle
sudo cryptsetup luksAddKey /dev/sdb /etc/ssl/private/pg_luks.key

# Bölümü aç, formatla, PostgreSQL verilerini taşı
sudo cryptsetup open --key-file /etc/ssl/private/pg_luks.key /dev/sdb pg_data
sudo mkfs.xfs /dev/mapper/pg_data
sudo systemctl stop postgresql
sudo mount /dev/mapper/pg_data /var/lib/postgresql

Senaryo 2: USB Bellek için Taşınabilir Şifreli Depolama

Saha ekipleri hassas sistem yedeklerini USB’de taşımalı:

# USB diski tespit et
lsblk | grep -i removable

# USB'yi tamamen şifrele
sudo cryptsetup luksFormat --type luks2 /dev/sdc

# Aç ve FAT32 yerine ext4 kullan (Linux'ta tam destek)
sudo cryptsetup open /dev/sdc guvenli_usb
sudo mkfs.ext4 -L "GizliYedek" /dev/mapper/guvenli_usb
sudo mount /dev/mapper/guvenli_usb /mnt/usb_backup

# Yedekleri al
sudo rsync -avz /etc/nginx/ /mnt/usb_backup/nginx_config/
sudo rsync -avz /var/backups/ /mnt/usb_backup/system_backups/

# Güvenli kapat
sudo umount /mnt/usb_backup
sudo cryptsetup close guvenli_usb

Senaryo 3: LUKS Header Yedekleme

Bu adım çok kritik ancak çoğu zaman atlanan bir konudur. LUKS header bozulursa tüm verilerinize kalıcı olarak erişimi kaybedersiniz:

# Header'ı yedekle (güvenli bir konuma, tercihen farklı bir medyaya)
sudo cryptsetup luksHeaderBackup /dev/sdb 
  --header-backup-file /root/backups/sdb_luks_header_$(date +%Y%m%d).img

# Header yedeğini doğrula
sudo cryptsetup luksDump --header /root/backups/sdb_luks_header_20241201.img

# Gerektiğinde header'ı geri yükle
sudo cryptsetup luksHeaderRestore /dev/sdb 
  --header-backup-file /root/backups/sdb_luks_header_20241201.img

LUKS Durumunu İzleme ve Yönetim

Temel Durum Kontrolleri

# Bölüm hakkında detaylı bilgi
sudo cryptsetup luksDump /dev/sdb

# Bölümün açık mı kapalı mı olduğunu kontrol et
sudo cryptsetup status guvenli_disk

# Tüm aktif dm-crypt bölümlerini listele
sudo dmsetup ls --target crypt

# LUKS olup olmadığını test et (exit code 0 ise LUKS)
sudo cryptsetup isLuks /dev/sdb && echo "LUKS bölümü" || echo "LUKS değil"

# Şifreleme performansını ölç
sudo cryptsetup benchmark

Güvenlik Önerileri ve Dikkat Edilmesi Gerekenler

Sysadmin olarak LUKS kullanırken şu noktalara özellikle dikkat etmelisiniz:

  • Header yedeği zorunlu: Her yeni LUKS bölümü oluşturduktan sonra header yedeğini alın ve bunu farklı bir fiziksel ortama (başka bir disk, NAS, şifreli bulut depolama) kopyalayın. Header olmadan veriye erişim mümkün değildir.
  • Parola gücü kritik: AES-256 kırmak pratikte imkansızdır ama zayıf bir parola tüm güvenliği çöpe atar. En az 20 karakterlik, karmaşık parolalar kullanın.
  • Swap alanını da şifreleyin: Bellek içeriği swap’a yazılabilir. /etc/crypttab ile swap bölümünü de şifreleyin.
  • Suspend-to-disk riski: Hibernate (disk’e uyutma) özelliği şifreleme anahtarını açık bırakabilir. Buna dikkat edin.
  • Cold boot saldırısı: Bilgisayar çalışırken fiziksel erişim olursa RAM’deki anahtarlar kopyalanabilir. Yüksek güvenlik gerektiren ortamlarda TPM ile LUKS kombinasyonu düşünülebilir.
  • Discard/TRIM dikkatli kullanın: SSD’lerde discard seçeneği performans sağlar ama hangi sektörlerin kullanıldığını ifşa edebilir. Güvenlik gerektiren durumlarda kapatın.
  • Test etmeden production’a almayın: Yeni bir LUKS yapılandırmasını test ortamında deneyin, header yedeklerini test edin, açma-kapama prosedürlerini doğrulayın.

Sorun Giderme

Karşılaşılan yaygın sorunlar ve çözümleri:

  • “No key available” hatası: Yanlış parola veya anahtar dosyası. luksDump ile key slot durumunu kontrol edin.
  • “Device busy” hatası: Bölüm hala mount edilmiş. Önce umount, sonra cryptsetup close yapın. lsof /mnt/nokta ile hangi işlemin kullandığını bulun.
  • Header bozulması: Yedekten geri yükleyin. Yedek yoksa veri kurtarma imkansızdır, bu yüzden header yedeği hayat kurtarır.
  • Sistem boot’ta bölümü açamıyor: /etc/crypttab ve /etc/fstab satırlarını kontrol edin. UUID’nin doğru olduğundan emin olun. journalctl -b ile boot loglarına bakın.

Sonuç

LUKS, Linux ortamlarında disk şifreleme için olgun, güvenilir ve standartlaşmış bir çözüm sunuyor. Kurulumu ve temel kullanımı görece basit olsa da anahtar yönetimi, header yedekleme ve otomatik bağlama senaryolarında dikkatli olmak gerekiyor. Özellikle header yedeği almak ve güçlü parola/anahtar dosyası kullanmak konularında asla taviz vermemeli. Veritabanı diskleri, yedekleme medyaları, hassas log depoları ve kullanıcı verilerinin tutulduğu her bölüm için LUKS şifrelemeyi bir standart haline getirmenizi şiddetle öneriyorum. Bir ihlal durumunda fiziksel erişim ele geçirilse bile verilerinizin güvende olduğunu bilmek, geceleri rahat uyumanızı sağlar.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir