Linux Çekirdegi ve Dengeli Guvenlik

İnternetteki NixOS ve Arch hardening rehberlerini okuduğunuzda genelde aynı manzarayla karşılaşırsınız: Biri çıkıp size “Şu 50 satırlık sysctl kuralını yapıştırın ve güvendesiniz” der. O kuralları yapıştırırsınız, sistemi yeniden başlatırsınız ve bir bakmışsınız VSCode debugger çalışmıyor, Docker konteynerleri internete çıkamıyor, ses kartı patlamış.

Güvenlik paranoyası iyidir ama bilgisayarı sadece log okumak için kullanmıyoruz. Kod yazıyoruz, sanal makine ayağa kaldırıyoruz, oyun oynuyoruz. Sisteminizi devasa bir taş bloğuna çevirirseniz evet, kimse hackleyemez ama siz de kullanamazsınız.

Geçtiğimiz günlerde kendi Sovereign yapılandırmamda tam olarak bu dengeyi kurmaya odaklandım. Adına “Soft Hardening” diyorum. İşte makine dairesinde yaptığım kritik ayarlar ve o ezbere kopyalanan kuralları nasıl esnettiğim.

Sysctl: Çekirdeği Deli Etmeyen Kısıtlamalar

İnternetteki “Hardcore” güvenlikçiler size her zaman kernel.yama.ptrace_scope = 2 yapmanızı söyler. Bu kural, bir sürecin başka bir sürecin belleğine müdahale etmesini kesin olarak engeller. Harika bir güvenliktir. Ama bunu 2 yaparsanız, favori IDE’nizde yazdığınız koda bağlanan debugger anında kernel tarafından öldürülür. Geliştirici ortamınız çöpe döner.

Benim safety.nix dosyamdaki yaklaşımım şu:

boot.kernel.sysctl = {
  # Geliştirici dostu kısıtlamalar (Değerler bilerek 1'de tutuldu)
  "kernel.kptr_restrict" = 1;
  "kernel.yama.ptrace_scope" = 1;
  
  # İzinsiz izlemeye karşı BPF blokajı
  "kernel.unprivileged_bpf_disabled" = 1;
  
  # Ağ Kalkanı
  "net.ipv4.conf.all.accept_redirects" = 0;
  "net.ipv4.conf.default.accept_redirects" = 0;
  "net.ipv4.tcp_syncookies" = 1;
};

Ptrace kapsamını 1’de tutarak sadece çocuk süreçlerin belleğe erişimine izin veriyorum. Hem debugger çalışıyor hem de rastgele bir zararlı yazılım başka süreçlerin hafızasını okuyamıyor. unprivileged_bpf_disabled = 1 ise farklı bir tehdide yönelik: yetkisiz kullanıcıların çekirdeğe eBPF programı yükleyerek yetki yükseltmesini veya Spectre tarzı yan kanal saldırılarıyla hassas bellek okuma girişimlerini engelliyor. Root yetkisiyle çalışan meşru güvenlik araçlarını etkilemiyor, sadece sıradan uygulamaların bu güçlü alt sistemi suistimal etmesinin önünü kesiyor.

Systemd: Servislere Özel Deli Gömlekleri

Tüm işletim sistemini kilitlemek yerine, internetle konuşan veya tehlikeli işler yapan servislere özel “Deli Gömlekleri” giydirmek çok daha zekice bir yöntemdir.

Örneğin dnscrypt-proxy veya fail2ban servislerini düşünün. Bunlar ağ trafiğiyle doğrudan muhatap olan riskli noktalar. Systemd’nin ProtectSystem = "strict" kuralı bütün dosya sistemini sadece okunabilir yapar ama bu bazen config dosyalarının veya /home dizininin erişilemez olmasına yol açar. Ben hardening.nix modülümde bunu full olarak esnetiyorum:

systemd.services.dnscrypt-proxy.serviceConfig = {
  ProtectSystem = lib.mkForce "full";
  PrivateTmp = lib.mkForce true;
  ProtectKernelTunables = lib.mkForce true;
  ProtectKernelModules = lib.mkForce true;
  RestrictRealtime = lib.mkForce true;
};

Bu ayar sayesinde servis hacklense bile saldırgan /tmp dizinini sistemden izole görür. Çekirdek parametrelerini değiştiremez, kernel modülü yükleyemez. Servis kör bir kutunun içine hapsedilir ama işini yapmaya devam eder.

Ağ Ağırlaşmasın Diye TCP BBR

Güvenlik kuralları ağ performansını düşürebilir. SYN cookie doğrulamaları ve redirect filtreleri ekstra CPU döngüsü harcar. Bunun önüne geçmek için Google’ın tıkanıklık kontrol algoritması BBR’yi iki ayrı modülde devreye aldım. safety.nix kernel modülünü yükler, system.nix ise sysctl parametrelerini ayarlar:

# safety.nix — Modül yükleme
boot.kernelModules = [ "tcp_bbr" ];

# system.nix — BBR aktivasyonu
boot.kernel.sysctl = {
  "net.core.default_qdisc" = "cake";
  "net.ipv4.tcp_congestion_control" = "bbr";
};

BBR’nin standart eşleştirmesi fq zamanlayıcısıdır ama ben cake kullanıyorum. CAKE hem kuyruk yönetimi hem de bant genişliği şekillendirmeyi tek pakette çözer, mobil hotspot gibi değişken bant genişlikli bağlantılarda daha iyi sonuç verir.

vm.max_map_count = 2097152 ayarı ise BBR ile ilgisi olmayan ayrı bir performans parametresi. Bellek yoğun uygulamaların çökmemesi için sanal bellek harita limitini yükseltiyor.

Sistemimde şu an sıfır telemetri, izole edilmiş servisler ve debugger’ın paşalar gibi çalıştığı bir çekirdek var. Eksiği yok, bloat değil, tam kıvamında. EOF.

EOF.