NixOS KVM Üzerinde Whonix: Gerçekten Çalışana Kadar Karşılaştıklarım

Bir önceki yazıda NixOS üzerinde KVM altyapısını sıfırdan nasıl kurduğumu ve ağ köprüsünün neden patlayabileceğini anlatmıştım. O altyapı artık çalışır hale gelince aklıma doğal olarak bir sonraki adım geldi: Bu KVM ortamını gizlilik açısından anlamlı bir şeyle kullanmak.

Whonix, tam olarak bu iş için var. Gateway ve Workstation olmak üzere iki ayrı sanal makine üzerinde çalışıyor; Gateway tüm trafiği Tor üzerinden yönlendiriyor, Workstation ise dış dünyayla doğrudan hiçbir bağlantısı olmayan izole bir ortamda çalışıyor. Teoride basit görünüyor. Pratikte NixOS’un değişmez yapısı ile Whonix’in standart Debian varsayımları birkaç noktada çakışıyor.


Mimari: İki VM, İki Köprü

Whonix’in ağ mimarisini kavramak işin en kritik kısmı. Yanlış anlaşılırsa kurulum çalışır gibi görünüp aslında hiçbir şeyi Tor üzerinden geçirmiyor olabilirsiniz.

Ağ akışı şu şekilde:

İnternet ←→ NixOS Güvenlik Duvarı ←→ Whonix-External Köprüsü (virbr1)

                                    Whonix-Gateway VM
                                    (Tor Daemon çalışır)

                                    Whonix-Internal Köprüsü (virbr2)

                                    Whonix-Workstation VM
                                    (Kullanıcı uygulamaları)

Gateway iki ağ arayüzüne sahip: biri host üzerinden internete çıkıyor (virbr1), diğeri sadece Workstation ile konuşuyor (virbr2). Workstation’ın internete doğrudan hiçbir yolu yok; her şey Gateway’in Tor daemon’ından geçmek zorunda.


Kuruluma Başlamak: GPG ve İmaj

Whonix KVM sürümü .libvirt.xz olarak paketleniyor. İndirmeden önce Patrick Schleizer’ın GPG anahtarını almak şart:

gpg --keyserver hkps://keys.openpgp.org --recv-keys 916B8D99C38EAF5E8ADC7A2A8D66066A2EEACCDA

İndirdikten sonra imzayı doğrulamadan geçmeyin. Whonix bu konuda çok açık: imza doğrulamasız kurulum güvenlik garantisi sunmuyor.

gpg --verify Whonix-XFCE-*.libvirt.xz.asc Whonix-XFCE-*.libvirt.xz

Çıktıda Good signature görmüyorsanız durmalı ve ne indirdiğinizi sorgulamalısınız. Devam etmeyin.

Doğrulama tamam olduktan sonra arşivi açıyoruz:

tar -xvf Whonix-XFCE-*.libvirt.xz

İçinden çıkan dosyalar: iki .qcow2 disk imajı, iki VM tanımı (.xml) ve iki ağ tanımı (.xml). Buradaki ağ tanımları ilk sürprizi barındırıyor.


İlk Engel: IPv6 Köprü Hatası

Ağ tanımlarını içe aktarmaya çalıştığımda şöyle bir hata çıktı:

error: Failed to start network Whonix-External
error: internal error: Failed to add IP address ... to virbr1

Bunun sebebi, Whonix’in gelen .xml ağ tanımının IPv6 desteğini varsayılan olarak açık bırakmasıydı. NixOS tarafında çekirdek seviyesinde IPv6 kapatılmışsa libvirt bu IPv6 adresini köprüye atamayı deniyor ama atayamıyor, ağ başlamıyor.

Çözüm: Whonix_external_network.xml dosyasını doğrudan düzenleyip içindeki IPv6 satırlarını temizlemek. Temizlenmiş hali şu şekilde görünüyor:

<network>
  <name>Whonix-External</name>
  <forward mode='nat'/>
  <bridge name='virbr1' stp='on' delay='0'/>
  <dns enable="no"/>
  <ip address='10.0.2.2' netmask='255.255.255.0'/>
</network>

<nat ipv6='yes'/> satırı ve IPv6 adres bloğu gitti, sorun çözüldü. Ağ tanımını bu düzenlenmiş dosyadan içe aktarıyoruz:

sudo virsh -c qemu:///system net-define Whonix_external_network.xml
sudo virsh -c qemu:///system net-define Whonix_internal_network.xml

sudo virsh -c qemu:///system net-autostart Whonix-External
sudo virsh -c qemu:///system net-autostart Whonix-Internal

sudo virsh -c qemu:///system net-start Whonix-External
sudo virsh -c qemu:///system net-start Whonix-Internal

Durumu doğrulamak için:

sudo virsh net-list --all

Her iki ağın da Active ve Autostart sütunlarında yes görmesi gerekiyor.


İkinci Engel: Disk Yolları ve Impermanence

Whonix’in gelen XML şablonları disk imajlarını /var/lib/libvirt/images/ altında arıyor. NixOS’ta bu dizin impermanence ile yönetiliyor: /var/lib/libvirt kalıcı alana bind-mount ediliyor ama büyük disk dosyaları için bu tercih ettiğimiz yer değil.

Büyük .qcow2 imajlarını sistem yedeklerini şişirmemesi ve impermanence katmanını karmaşıklaştırmaması adına /persist/libvirt-vms/ altında tutuyoruz. Bu durumda XML dosyalarındaki yolları VM’leri içe aktarmadan önce güncellememiz lazım:

sed -i 's|/var/lib/libvirt/images/|/persist/libvirt-vms/|g' Whonix-Gateway-*.xml Whonix-Workstation-*.xml

Ardından disk imajlarını taşıyoruz:

sudo mv Whonix-Gateway-*.qcow2 /persist/libvirt-vms/Whonix-Gateway.qcow2
sudo mv Whonix-Workstation-*.qcow2 /persist/libvirt-vms/Whonix-Workstation.qcow2

sudo chown root:root /persist/libvirt-vms/Whonix-*.qcow2
sudo chmod 0600 /persist/libvirt-vms/Whonix-*.qcow2

Son olarak VM tanımlarını içe aktarıyoruz:

sudo virsh -c qemu:///system define Whonix-Gateway-*.xml
sudo virsh -c qemu:///system define Whonix-Workstation-*.xml

İşte Whonix’in en güzel yanlarından biri bu: Önceki yazıda Windows Server kurarken yaptığımız gibi virt-manager arayüzünü açıp “Yeni Makine Oluştur” diyerek ISO dosyası göstermekle, işlemci modeli seçmekle veya depolama alanı ayarlamakla uğraşmıyorsunuz.

Yukarıdaki virsh define komutlarını girdiğiniz an, her iki makine de tüm donanım ayarları eksiksiz yapılmış halde virt-manager ekranında “tak-çalıştır” olarak beliriveriyor. Her şey zaten XML şablonlarında önceden tanımlanmış durumda.


Üçüncü Engel: Gateway Açıldı Ama Workstation İnternete Çıkamıyor

Bu noktada Gateway çalıştı, Tor bağlandı. Workstation başlattım ama Workstation’da ne curl ne de Tor Browser dış dünyaya ulaşabiliyordu.

Bu aslında tanıdık bir sorun. KVM/libvirt kurulumunda daha önce de yaşadım: NixOS’un varsayılan güvenlik duvarı, virbr arayüzlerinden gelen NAT paketlerini Reverse Path Filtering (rp_filter) mekanizmasıyla sessizce düşürüyor.

virt.nix dosyasında zaten bu çözüm vardı:

networking.firewall.checkReversePath = "loose";

Ama Whonix söz konusu olduğunda iki ayrı köprü (virbr1 ve virbr2) olduğu için bu ayarın her iki yönde de doğru çalıştığından emin olmak gerekiyor. Eğer hâlâ sorun yaşıyorsanız sysctl değerini doğrudan kontrol edebilirsiniz:

nstat -rsz | awk '/ReversePathFilter/'

Değerin 2 (loose) olduğunu görmelisiniz. 1 (strict) olarak dönüyorsa NixOS configuration değişikliği henüz sisteme uygulanmamış demektir; sudo nixos-rebuild switch çalıştırıp tekrar deneyin.


Başlatma Sırası Önemli

Whonix’i açarken sıralama kritik: önce Gateway, sonra Workstation. Workstation açılırken Gateway’in çalışır ve Tor’a bağlı olmasını bekliyor. Sırayı ters yaparsanız Workstation ağ alamaz, üstelik neden almadığını da sizi şaşırtacak hata mesajlarıyla anlatır.

# Önce:
sudo virsh -c qemu:///system start Whonix-Gateway

# Tor bağlantısını Gateway konsolundan doğruladıktan sonra:
sudo virsh -c qemu:///system start Whonix-Workstation

Gateway açıldığında ilk kurulumda karşınıza Whonix Setup Wizard gelecek. Buradaki adımları tamamlayın ve Systemcheck aracının başarıyla geçtiğinden emin olun. Systemcheck yeşil görmeden Workstation’ı açmak anlamsız.


Opsiyonel: Kaynak Optimizasyonu ve Tweak’ler

Makineler zaten çalışmaya hazır gelse de, kendi kullanım senaryonuza göre sonradan virt-manager üzerinden ufak tefek ince ayarlar yapabilirsiniz:

Gateway RAM Ayarı: Gateway’in işi yalnızca Tor trafiğini yönlendirmek. Bunun için grafiksel arayüze ihtiyacı yok. XFCE sürümünü indirmiş olsanız bile Gateway’e yeterince az RAM verirseniz GUI’yi başlatmayıp doğrudan CLI (komut satırı) moduna geçiyor. Ben host makineyi rahatlatmak için virt-manager → Whonix-Gateway → Details → Memory bölümünden RAM’i 512 MB olarak ayarladım. (Not: Büyük apt güncellemelerinde geçici olarak 1024 MB’a çıkarmak gerekebiliyor).

Workstation RAM Ayarı: Workstation tarafında ise varsayılan 2048 MB ile geliyor. Rahat bir Tor Browser deneyimi için ben bunu 4096 MB seviyesine çıkardım.


Pano (Clipboard) Politikası

Whonix varsayılan olarak host ile VM arasındaki panoya erişimi kısıtlıyor veya tek yönlü bırakıyor. Bu kasıtlı bir güvenlik kararı.

virt-manager → VM Details → Options → Shared Clipboard seçeneğinden bunu düzenleyebilirsiniz. Anonimliği korumak istiyorsanız ya tamamen kapalı bırakın ya da sadece “Guest to Host” yönünde açık tutun. Her iki yönde açmak pratik ama özellikle Workstation tarafında dikkatli olmayı gerektiriyor.


CPU: host-passthrough

Whonix’in gelen XML tanımları <cpu mode='host-passthrough'/> kullanıyor. Bu sayede sanal makine, host işlemcinin AES-NI gibi şifreleme hızlandırma özelliklerini doğrudan kullanabiliyor. Tor bağlantı hızına da olumlu yansıyor.

Eğer bu modda hata alıyorsanız BIOS’ta AMD-V/SVM veya Intel VT-x’in aktif olmadığı anlamına gelir; BIOS ayarlarından etkinleştirip tekrar deneyin.


Genel tablo şu: NixOS üzerinde Whonix çalışıyor ve makul şekilde stabil. Standart rehberlerde yer almayan üç engelin (IPv6 köprü hatası, disk yolu güncellemesi ve rp_filter) farkında olursanız kurulumu nispeten sorunsuz tamamlıyorsunuz. Bu engelleri belgelemek istedim çünkü her birini sırayla yaşayarak aşmak zaman aldı.


İlgili: Donanımdan Sanala: NixOS Altında KVM/QEMU, BIOS Ayarları ve Ağ Köprüleri

EOF.