Ollama'yı İzole Etmek: Bleeding Llama, DNS Rebinding ve Katmanlı Güvenlik

Daha önce Ollama ile yerel LLM kurulumunu yazmıştım. Orada VRAM sınırlarını ve ROCm ayarlarını işledik. Fakat asıl mesele şu: Bu yapı gerçekten güvenli mi?

Hayır.

Yerel Kurulum Güvenlik Demek Değildir

Ollama’yı makineye kurunca veriler buluta gitmediği için herkes kendini güvende sanıyor. Oysa kendi bilgisayarında, kimlik doğrulaması olmayan, ağa açık bir API çalıştırıyorsun.

Varsayılan Ollama kurulumu şunları yapar:

Ollama geliştirici deneyimine odaklandığı için güvenliği sana bırakır. Çoğu kişi de bu güvenlik katmanını asla kurmaz.

Tehdit Vektörleri: Bleeding Llama ve DNS Rebinding

2026’nın ortasında Ollama için kritik bir açık yayınlandı:

CVE-2026-7482 (Bleeding Llama) — CVSS 9.1. Sisteme /api/create üzerinden özel hazırlanmış bir GGUF dosyası gönderildiğinde, heap sınır dışı okuma (out-of-bounds read) tetikleniyor. Saldırgan okuduğu bu bellek verisini /api/push ile kendi kontrolündeki bir kayıtçıya (registry) exfiltrate ediyor. Bu 3 adımlık zincir sayesinde API anahtarları, sistem ortam değişkenleri ve aktif konuşmalar sızdırılabiliyor. 0.17.1 öncesi sürümler direkt hedef.

İkinci ve daha kalıcı risk: DNS Rebinding. Ollama’yı ağdaki diğer cihazlar erişsin diye 0.0.0.0 IP’sine bağlarsan, zararlı bir web sitesi DNS çözümlemesini zehirleyerek doğrudan senin tarayıcın üzerinden yerel Ollama API’ne istek atabilir. NixOS güvenlik duvarı bunu durduramaz çünkü trafik zaten senin tarayıcından kaynaklanır.

NixOS ile Katmanlı İzolasyon

Bu açıkları kapatmak için Ollama’yı NixOS üzerinde katı kurallarla izole ettim. Tüm yapılandırma modules/desktop/apps.nix içinde tanımlı.

1. Ağ Kilidi

services.ollama = {
  enable = true;
  host = "127.0.0.1";
  openFirewall = false;
};

host = "127.0.0.1" ayarı DNS Rebinding saldırı yüzeyini kökten yok ediyor. Hedef sadece loopback (yerel) süreçlere açık olduğu için, tarayıcı orijinli bir istek DNS manipülasyonuyla 127.0.0.1’e yönlendirilse bile hedefine ulaşamaz. Yani mevcut config bu vektörü tamamen kapatıyor. openFirewall = false ile portu dış ağa da kapatıyoruz.

2. Origin Kısıtlaması

environmentVariables = {
  OLLAMA_ORIGINS = "http://localhost:*,http://127.0.0.1:*,app://*,vscode-webview://*";
};

API’ye sadece localhost, masaüstü uygulamaları ve VSCode eklentileri erişebilir. Rastgele web sitelerinden gelen çağrılar anında reddedilir. Bu sayede Bleeding Llama gibi saldırıların ilk adımı olan /api/create ile zararlı GGUF yükleme işlemi, dışarıdan asla tetiklenemez.

3. Telemetri ve Log Engeli

environmentVariables = {
  SCARF_NO_ANALYTICS = "true";
  OLLAMA_NOHISTORY = "true";
};

Ollama’nın kullanım verisi toplaması engellenir. En önemlisi, sohbet geçmişinin diske düz metin olarak yazılmasının yasaklanması hedeflenir. Ancak burada bir uyarı: Açık kaynaklı upstream projesinde bilinen bir güvenilirlik sorunu var (GitHub Issue #9648). Kullanıcılar OLLAMA_NOHISTORY=true set etse bile ~/.ollama/history dosyasının hâlâ yazılabildiğini raporluyor. Bu yüzden teorik güvenliğe güvenmeyip kendi sürümünüzde pratikte dosyanın yazılıp yazılmadığını test etmelisiniz.

4. GPU Kaynak Yönetimi

systemd.services.ollama = {
  wantedBy = lib.mkForce [];
};

Ollama boot sırasında başlamaz. GPU boşuna meşgul edilmez. Gerektiğinde ai-start komutuyla systemd üzerinden tetikliyor, işim bitince ai-stop ile kapatıyorum.

5. VRAM Optimizasyonu

environmentVariables = {
  OLLAMA_FLASH_ATTENTION = "1";
  OLLAMA_KV_CACHE_TYPE = "q8_0";
  OLLAMA_NUM_CTX = "8192";
  OLLAMA_NUM_PARALLEL = "1";
  OLLAMA_KEEP_ALIVE = "2m";
};

Flash Attention ve 8-bit KV cache kullanımı VRAM tüketimini ciddi oranda düşürüyor. Bu sayede 12 GB VRAM’li RX 7700 XT ile 26B parametrelik modelleri 8K bağlam penceresinde hatasız çalıştırabiliyorum.

B Planımız Ne Kadar Hazır?

Ollama özünde sadece bir sarmalayıcı. Asıl işi yapan motor llama.cpp. Ollama yarın kapanırsa, ücretli olursa veya saçma politikalar dayatırsa sistemimizin çökmemesi gerekiyor.

Şu anki altyapıda B planı yarı-aktif durumda:

  1. Modeller bağımsız. Tüm modellerim /home/xmrah/models altında saf GGUF formatında duruyor. Ollama’ya bağımlı değiller.
  2. Paket hazır. Nixpkgs deposunda pkgsRocm.llama-cpp paketi AMD optimizasyonlarıyla hazır bekliyor.

Eğer Ollama’yı fişten çekmem gerekirse yapacağım tek şey environment.systemPackages içine llama-cpp ekleyip, llama-server komutuyla OpenAI uyumlu bir API ayağa kaldırmak. Systemd servisini yazmak maksimum 5 dakikamı alır. Modeller yerinde olduğu için sıfır veri kaybıyla yola devam edebilirim.

Sistem senin kontrolünde olduğu sürece araçlar sadece birer detaydır. Asıl mesele egemenliği elde tutmaktır.

EOF.