NixOS ile 4 Katmanlı Ağ Kalkanı: ByeDPI ve Sistem Sertleştirme
Bir akşam Steam’den oyun indiriyorsunuz. İndirme hızı aniden saatte 200 KB’a düşüyor. Discord’da arkadaşlarınızla konuşurken ses kesintiye uğruyor. VPN açıyorsunuz, ping 150 milisaniyeye fırlıyor ve oyun oynanamaz hale geliyor.
Bu tabloya tanıdık gelen varsa Türkiye’de internet kullanıyor demektir.
Sorunun Kaynağı: DPI
Türk operatörleri ağ trafiğini izlemek ve şekillendirmek için Deep Packet Inspection yani Derin Paket İncelemesi kullanıyor. Bu teknoloji TLS el sıkışması sırasında gönderilen ClientHello mesajındaki alan adını okuyarak hedef siteyi tespit edebiliyor. Operatör isterse bu trafiği yavaşlatıyor, isterse tamamen engelliyor.
Katman 1: IPv6 Kesme
Tüm savunma zincirinin temel taşı IPv6’yı çekirdek seviyesinde tamamen kapatmak. DNS şifrelemeniz kusursuz olabilir ama IPv6 üzerinden akan bir DNS sorgusu tüm gizliliğinizi tek hamleyle deşifre eder.
# system.nix
boot.kernelParams = [
"ipv6.disable=1"
];
Bu tek satır, çekirdek yüklenirken IPv6 protokolünü tamamen devre dışı bırakır. Uygulama seviyesinde değil, işletim sistemi çekirdeğinde. Hiçbir program, servis veya tarayıcı IPv6 üzerinden dışarı sızamaz.
Katman 2: DNS Şifreleme
Operatörünüz DNS sorgularınızı şifrelenmemiş olarak okuyabiliyorsa hangi siteye girdiğinizi bilir. DHCP üzerinden gelen DNS sunucularını da doğrudan operatör kontrol eder. İki hamle gerekiyor: Operatörün DNS sunucularını devre dışı bırakmak ve tüm sorguları şifreli bir tünelden geçirmek.
# dns.nix — Stealth Mode
networking.nameservers = [ "127.0.0.1" ];
networking.networkmanager.dns = "none";
services.resolved.enable = false;
services.dnscrypt-proxy = {
enable = true;
settings = {
server_names = [ "cloudflare" ];
listen_addresses = [ "127.0.0.1:53" ];
ipv6_servers = false;
cache = true;
require_dnssec = true;
require_nolog = true;
};
};
networking.networkmanager.dns = "none" satırı NetworkManager’ın DHCP’den gelen DNS adreslerini uygulamasını tamamen engeller. services.resolved.enable = false ile systemd-resolved kapatılarak port 53 çakışması ve olası sızıntılar önlenir. Tüm DNS trafiği DNSCrypt-Proxy üzerinden DNS-over-HTTPS ile Cloudflare’e şifreli olarak gider. DNSSEC zorunlu tutulur ve yalnızca kayıt tutmayan sunucular kabul edilir.
Katman 3: DPI Atlatma
Bu katman tüm kalkanın en kritik parçası. ByeDPI isimli açık kaynak bir araç TLS ClientHello paketini parçalayarak DPI cihazlarını şaşırtıyor. Bu araç NixOS depolarında bulunmadığı için GitHub’dan derleyen özel bir Nix derivation yazdım.
# dpi-cloak.nix — ByeDPI Derivation
byedpi = pkgs.stdenv.mkDerivation rec {
pname = "byedpi";
version = "0.14";
src = pkgs.fetchFromGitHub {
owner = "hufrea";
repo = "byedpi";
rev = "v${version}";
sha256 = "1vrn1pdwvxsnvxzhwpr7nhpl8rvsm13izgz4l3sl3376dk5a3sp4";
};
buildPhase = ''make'';
installPhase = ''
mkdir -p $out/bin
cp ciadpi $out/bin/byedpi
'';
};
ByeDPI bir SOCKS5 proxy olarak 127.0.0.1:1080 portunda çalışıyor. Kullandığım parametrelerin her birinin belirli bir görevi var:
--disorder 1TCP segmentlerini kasıtlı olarak sırasız gönderir. DPI cihazının paket yeniden birleştirme motoru şaşırır ve bağlantıyı geçirir.--auto=torstFarklı atlatma stratejilerini otomatik olarak test ederek ağ ortamına en uygun kombinasyonu seçer.--tlsrec 1+sClientHello mesajını TLS kayıt katmanında parçalar. Her parça geçerli bir TLS kaydı olarak gönderilir ve DPI cihazı alan adını içeren SNI alanını okuyamaz.
Servis nobody kullanıcısı altında, ProtectSystem=strict ve NoNewPrivileges=true ile çalışıyor. Sadece localhost dinliyor, sisteme root erişimi yok.
# dpi-cloak.nix — Systemd Servisi
systemd.services.byedpi = {
description = "ByeDPI - DPI Bypass SOCKS5 Proxy";
after = [ "network-online.target" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
ExecStart = ''
${byedpi}/bin/byedpi \
--ip 127.0.0.1 --port 1080 \
--disorder 1 --auto=torst --tlsrec 1+s
'';
User = "nobody";
NoNewPrivileges = true;
ProtectSystem = "strict";
ProtectHome = true;
};
};
Proxychains-ng ile istediğim uygulamayı zorla bu tünelden geçirebiliyorum. DNS sızıntısını önlemek için proxy_dns aktif:
# dpi-cloak.nix — Proxychains Konfigürasyonu
environment.etc."proxychains.conf".text = ''
strict_chain
proxy_dns
tcp_read_time_out 15000
tcp_connect_time_out 8000
localnet 127.0.0.0/255.0.0.0
localnet 192.168.0.0/255.255.0.0
[ProxyList]
socks5 127.0.0.1 1080
'';
Günlük kullanımı kolaylaştırmak için Fish shell alias’ları ekledim:
# dpi-cloak.nix — Fish Alias'ları
programs.fish.shellAliases = {
"steam-dpi" = "sudo systemctl start byedpi && sleep 1 && proxychains4 steam";
"dpi-on" = "sudo systemctl start byedpi && echo 'ByeDPI aktif (127.0.0.1:1080)'";
"dpi-off" = "sudo systemctl stop byedpi && echo 'ByeDPI kapatıldı'";
};
Tüm bu yapı mySystem.security.dpiBypass = true toggle’ı ile kontrol ediliyor. Tek bir değişkenle tüm katman açılıyor veya kapanıyor.
Katman 4: Ağ Sertleştirme
Son katman ağ yığınını genel saldırılara karşı sertleştirmek. TCP BBR tıkanıklık kontrolü ile düşük gecikmeli bağlantılar, CAKE kuyruk disiplini ile adil bant genişliği paylaşımı sağlanıyor. Reverse path filtering sahte kaynak adresli paketleri düşürür. ICMP yönlendirmeleri kapatılarak yönlendirme tablosu manipülasyonu engellenir.
# safety.nix — Ağ Sertleştirme
boot.kernel.sysctl = {
"net.core.default_qdisc" = "cake";
"net.ipv4.tcp_congestion_control" = "bbr";
"net.ipv4.conf.all.rp_filter" = 1;
"net.ipv4.conf.all.accept_redirects" = 0;
"net.ipv4.conf.all.send_redirects" = 0;
"net.ipv4.conf.all.log_martians" = 1;
"net.ipv4.tcp_syncookies" = 1;
"net.ipv4.tcp_rfc1337" = 1;
};
Tüm Kalkanın Özeti
Dört katmanın birlikte çalıştığı bu yapıda her biri farklı bir tehdidi bertaraf eder:
- IPv6 Kesme sızıntı vektörünü çekirdek seviyesinde yok eder
- DNS Şifreleme operatörün hangi sitelere girdiğinizi görmesini engeller
- DPI Atlatma Steam, Discord ve diğer servislerin throttle edilmesini aşar
- Ağ Sertleştirme genel ağ saldırılarına karşı savunma sağlar
Tüm bu yapılandırma NixOS’un declarative mimarisinde .nix dosyaları olarak yaşıyor. Yeni bir makineye geçtiğinizde veya sistemi sıfırdan kurduğunuzda tek bir nixos-rebuild switch komutu tüm kalkanı saniyeler içinde ayağa kaldırır. Kernel sertleştirme ve Ollama izolasyonu yazılarımda anlattığım diğer güvenlik katmanlarıyla birleştiğinde ortaya kendi cihazının tam kontrolünü elinde tutan bir sistem çıkıyor.
Yasal Durum
Bu yapılandırmalar Türkiye’de yasal mı? Kısa cevap: Türk hukukunda VPN veya DPI bypass aracı kullanmayı açıkça yasaklayan bir ceza hükmü bulunmuyor. 5651 sayılı kanun erişim sağlayıcılarını ve platformları düzenler, bireysel kullanıcının kendi cihazında hangi ağ ayarlarını yapacağını değil.
ByeDPI ve benzeri araçlar GitHub’da açık kaynak olarak yayınlanıyor. NixOS’un resmi paket deposunda bile pkgs.byedpi paketi mevcut. DNSCrypt-Proxy ise dünya çapında milyonlarca kullanıcısı olan standart bir gizlilik aracı.
Ancak gri bir alan var. DPI bypass kullanımı operatörünüzün hizmet sözleşmesini ihlal edebilir. Bu durum cezai bir suç oluşturmaz ama operatör hattınızı kısıtlama hakkını saklı tutabilir.
Bu yazıdaki tüm içerik eğitim ve teknik araştırma amaçlıdır. Ağ yapılandırmalarınızı değiştirmeden önce operatörünüzün hizmet koşullarını incelemeniz önerilir.
İnterneti özgürce kullanabilmek için üçüncü taraf VPN servislerine haraç vermek zorunda değilsiniz. Tek gereken doğru araçlar, doğru mimari ve tüm bunları tek bir dosyada tanımlayabilecek bir işletim sistemi.