Kurulum betiği "Installation Complete!" yazısını verdi, tarayıcıdan http://sunucu-ip/admin adresine girdiniz, telefonunuzun Wi-Fi ayarlarından DNS'i sunucunuzun adresine çevirdiniz ve reklamların kaybolduğunu gördünüz. On beş dakikada bitmiş, harika görünen bir kurulum. Sorun şu ki bu noktada sunucunuz dünyaya açık bir DNS çözücüsüne dönüşmüş durumda ve muhtemelen bunu ancak sağlayıcınızdan gelen kötüye kullanım bildirimiyle ya da faturaya yansıyan trafik kalemiyle fark edeceksiniz.
Pi-hole rehberlerinin neredeyse tamamı Raspberry Pi senaryosunu anlatır. O senaryoda cihaz ev ağınızda, NAT arkasındadır ve dışarıdan kimse 53 portuna ulaşamaz. Bir VDS'te durum tam tersidir: makinenizin herkese açık bir IP adresi vardır ve 53 portunu dinleyen bir çözücü, internetteki tarayıcı botları tarafından dakikalar içinde bulunur.
Bu rehberde Pi-hole'u bir Ubuntu ya da Debian VDS'ine kuracak, kurulumdan hemen sonra erişimi güvenlik duvarı veya WireGuard ile kilitleyecek, Unbound ekleyerek yukarı akış sağlayıcısına olan bağımlılığı kaldıracak, blocklist yönetimini ve en çok zaman kaybettiren konuyu — yanlış engelleme teşhisini — ele alacağız.
Pi-hole Ne Yapar, Tarayıcı Eklentisinden Farkı Nedir?#
Pi-hole bir DNS filtresidir. Cihazlarınız bir alan adını çözmek istediğinde önce Pi-hole'a sorar. İstenen alan adı engel listelerinden birindeyse Pi-hole gerçek adresi döndürmez; sorgu orada biter ve reklam sunucusuna hiç bağlantı kurulmaz. Listede yoksa sorgu normal şekilde yukarı akış çözücüsüne iletilir. DNS'in çözümleme zincirini hatırlamak isterseniz DNS nedir yazısı temeli veriyor.
Tarayıcı eklentisinden üç somut farkı var:
| Tarayıcı eklentisi | Pi-hole | |
|---|---|---|
| Kapsam | Sadece o tarayıcı | DNS'i ona bakan tüm cihazlar |
| Akıllı TV, konsol, IoT | Korumaz | Korur |
| Uygulama içi reklamlar | Genelde engelleyemez | DNS düzeyinde engeller |
| Sayfa içi öğe gizleme | Yapar | Yapmaz |
Son satır önemlidir ve beklenti yönetimi gerektirir: Pi-hole bir alan adını engeller, sayfadaki bir kutuyu gizlemez. Reklam aynı alan adından sunuluyorsa (YouTube'un video içi reklamları gibi) Pi-hole onu göremez. Buna karşılık telemetri, izleyici ve uygulama içi reklam ağlarının büyük kısmı ayrı alan adları kullandığı için oralarda oldukça etkilidir.
VDS Kurulumu Raspberry Pi'dan Neden Farklı?#
Fark tek kelimeyle erişilebilirliktir. Ev ağındaki bir Raspberry Pi'ye internetten kimse doğrudan ulaşamaz; modem NAT arkasındadır. VDS'iniz ise herkese açık bir adreste durur ve 53 portunda dinleyen bir servis, internet çapında port taraması yapan botlar tarafından kısa sürede kayıt altına alınır.
Bu farkın doğurduğu iki pratik sonuç var. Birincisi, cihazlarınızın Pi-hole'a ulaşabilmesi için bir yol açmanız gerekir — ama bu yol herkese açık olamaz. İkincisi, kurulumdan sonra "çalışıyor" demek yeterli değildir; erişimi kimin kullanabildiğini de belirlemiş olmanız gerekir. Rehberin ilerleyen bölümlerinde bunun iki temiz yolunu göreceğiz.
Kaynak ihtiyacı ise mütevazıdır. Pi-hole tek başına 1 vCPU ve 1 GB RAM ile birkaç düzine cihazı rahatça karşılar. Unbound eklerseniz 2 GB'a çıkmak konforlu olur. Disk tarafında sorgu veritabanı zamanla büyür; 10 GB fazlasıyla yeter.
Kurulum Öncesi: Port 53'ü systemd-resolved'dan Geri Almak#
Ubuntu'da kuruluma başlamadan önce halledilmesi gereken bir çakışma vardır. systemd-resolved, 127.0.0.53 adresinde 53 portunu dinler ve Pi-hole'un DNS motoru olan FTL bu porta bağlanamaz. Belirti nettir: kurulum tamamlanır ama pihole status servisin çalışmadığını söyler.
Önce durumu görün:
sudo ss -tulpn | grep ':53'
Çıktıda systemd-resolved görüyorsanız stub dinleyicisini kapatın:
sudo nano /etc/systemd/resolved.conf
Dosyada şu iki satırı ayarlayın (varsa başındaki # işaretini kaldırın):
DNS=1.1.1.1 9.9.9.9
DNSStubListener=no
Ardından sunucunun kendi ad çözümlemesinin kopmaması için resolv.conf bağlantısını gerçek dosyaya çevirin ve servisi yeniden başlatın:
sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
sudo systemctl restart systemd-resolved
# 53 portu artık boş olmalı
sudo ss -tulpn | grep ':53'
Bu adımı atlarsanız kurulumun ortasında geri dönmek zorunda kalırsınız. Debian'da systemd-resolved genellikle etkin değildir, yine de kontrol etmek zaman kazandırır.
Pi-hole Kurulumu ve İlk Yapılandırma#
Resmî kurulum betiği etkileşimli bir sihirbaz açar:
sudo apt update && sudo apt upgrade -y
curl -sSL https://install.pi-hole.net | bash
Sihirbazda karşılaşacağınız kararlar ve VDS için doğru cevaplar:
- Upstream DNS sağlayıcısı — Unbound kuracaksanız burada ne seçtiğinizin önemi yok, sonra değiştireceğiz. Kurmayacaksanız Cloudflare veya Quad9 makul seçimlerdir.
- Blocklist — varsayılan listeyi kabul edin; ekleme yapmayı sonraya bırakın.
- Statik IP — VDS'te adres zaten sabittir, önerilen değeri onaylayın.
- Web arayüzü ve sorgu günlüğü — ikisini de etkinleştirin; teşhis için gerekli olacaklar.
Kurulum bittiğinde ekranda geçici bir parola gösterilir. Kendi parolanızı belirleyin:
sudo pihole setpassword
Pi-hole v6 ile birlikte ayrı bir web sunucusu (lighttpd) kullanılmıyor; arayüz doğrudan FTL içine gömülü. Yapılandırmanın tamamı artık tek bir dosyada toplanıyor:
# v6 yapılandırma dosyası — v5'teki setupVars.conf yerine geçti
sudo less /etc/pihole/pihole.toml
# Servis durumu ve sürüm bilgisi
pihole status
pihole -v
Arayüze http://SUNUCU_IP/admin adresinden ulaşırsınız. Bir sonraki bölüme geçmeden önce bu adresi ve 53 portunu güvenlik duvarına almanız gerekiyor — sırayı bozmayın.
Açık DNS Çözücü Tuzağı: Sunucunuz Bir DDoS Silahına Dönüşmesin#
İşin en kritik kısmı burası. 53 portunuz internete açıksa ve Pi-hole gelen her sorguya cevap veriyorsa, elinizde bir açık çözücü (open resolver) var demektir.
Kötüye kullanım şöyle işler: saldırgan, kaynak adresini kurbanın adresi olarak taklit ettiği küçük bir DNS sorgusunu sizin sunucunuza gönderir. Sunucunuz cevabı, sorgunun geldiğini sandığı adrese — yani kurbana — yollar. Sorgu 60 bayt, cevap birkaç kilobayt olabildiği için saldırgan trafiğini onlarca kat büyütmüş olur; DNSSEC imzalı bölgelerde ve ANY sorgularında bu oran 50 katı aşabilir. Saldırganın binlerce açık çözücüyü aynı anda kullanması hâlinde kurban ciddi bir sel altında kalır.
Sizin açınızdan sonuçlar da somuttur: giden trafiğiniz patlar ve kotalı bir pakette bunu ödersiniz, sağlayıcınızdan kötüye kullanım bildirimi alırsınız, tekrarı hâlinde sunucu askıya alınabilir ve adresiniz itibar listelerine düşer.
Dışarıdan bir makineden şu komutu çalıştırarak durumu kendiniz test edebilirsiniz:
# Başka bir sunucudan veya evinizdeki bilgisayardan çalıştırın
dig @SUNUCU_IP example.com +short
Bir cevap dönüyorsa sunucunuz açık çözücüdür ve hemen kapatmanız gerekir. Zaman aşımına düşüyorsa doğru yapılandırılmış demektir.
Pi-hole arayüzündeki dinleme modu ayarı da bu konuya bakar. Settings → DNS → Interface settings altındaki "Permit all origins" seçeneği tam olarak açık çözücü davranışını üretir; asla seçmeyin. Yine de asıl güvence uygulama ayarı değil, güvenlik duvarıdır: bir yapılandırma hatası veya güncelleme sonrası varsayılana dönüş, tek savunma katmanı uygulamaysa sizi savunmasız bırakır.
Erişimi Kısıtlamanın İki Yolu#
Cihazlarınız Pi-hole'a ulaşmalı, başka kimse ulaşmamalı. Bunun iki temiz yolu var.
Yol 1: Güvenlik duvarıyla kendi adresinize kısıtlama#
Sabit bir ev veya ofis IP adresiniz varsa en basit çözüm budur:
sudo ufw default deny incoming
sudo ufw allow OpenSSH
# DNS'i yalnızca kendi adresinize açın
sudo ufw allow from 88.99.77.66 to any port 53 proto udp
sudo ufw allow from 88.99.77.66 to any port 53 proto tcp
# Yönetim arayüzünü de aynı adrese kısıtlayın
sudo ufw allow from 88.99.77.66 to any port 80 proto tcp
sudo ufw enable
sudo ufw status numbered
Buradaki 88.99.77.66 yerine kendi genel adresinizi yazın; curl -s ifconfig.me ile öğrenebilirsiniz. TCP kuralını atlamayın: DNS cevapları büyüdüğünde sorgu TCP'ye düşer ve yalnız UDP açıksa bazı alan adları rastgele çözülmez hâle gelir.
Bu yöntemin tek zayıf noktası dinamik IP'dir. Ev bağlantınızın adresi değiştiğinde erişiminiz kesilir ve kuralı yeniden yazmanız gerekir. Kural yönetiminin ayrıntıları için UFW güvenlik duvarı rehberine bakabilirsiniz; iptables tercih edenler için iptables ile güvenlik duvarı yazısı aynı mantığı kuruyor.
Yol 2: WireGuard üzerinden erişim#
Mobil cihazlar, dinamik IP'li bağlantılar ve dışarıdayken de aynı korumayı isteyen kullanıcılar için doğru yöntem budur. Pi-hole yalnızca VPN arayüzünü dinler, 53 portu internete hiç açılmaz.
Sunucuda WireGuard'ı kurup 10.8.0.1/24 gibi bir tünel adresi verdikten sonra:
# DNS'i sadece VPN arayüzüne aç, genel arayüze asla
sudo ufw allow in on wg0 to any port 53 proto udp
sudo ufw allow in on wg0 to any port 53 proto tcp
sudo ufw allow in on wg0 to any port 80 proto tcp
# WireGuard'ın kendi portu dışarı açık kalmalı
sudo ufw allow 51820/udp
İstemci yapılandırmasında DNS satırını sunucunun tünel adresine çevirin:
[Interface]
PrivateKey = ...
Address = 10.8.0.2/32
DNS = 10.8.0.1
[Peer]
PublicKey = ...
Endpoint = sunucu.ornek.com:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
Bu kurulumla telefonunuz mobil veride bile reklamsız gezer ve DNS trafiğiniz şifreli tünel içinde taşınır. Anahtar üretimi ve istemci ekleme adımları için WireGuard kurulumu yazısını izleyin.
Yöntemi seçerken şu tabloyu kullanabilirsiniz:
| Durum | Önerilen yol |
|---|---|
| Sabit IP'li ofis, tek konum | Güvenlik duvarı kısıtlaması |
| Dinamik IP'li ev bağlantısı | WireGuard |
| Mobil cihazlar, seyahat | WireGuard |
| Birden çok şube | İkisi birlikte |
Unbound ile Kendi Özyinelemeli Çözücünüz#
Varsayılan kurulumda Pi-hole, engellemediği sorguları Cloudflare veya Google gibi bir yukarı akış çözücüsüne iletir. Yani reklam alan adlarını engellersiniz ama gezinme geçmişinizin tamamı yine tek bir şirkete akar. Unbound bu halkayı kapatır: sorguları kök sunuculardan başlayarak kendisi çözer. Özyinelemeli ve yetkili sunucu ayrımını authoritative ve recursive DNS yazısında ayrıntılı bulabilirsiniz.
sudo apt install unbound -y
sudo nano /etc/unbound/unbound.conf.d/pi-hole.conf
Dosyaya şu yapılandırmayı yazın:
server:
verbosity: 0
interface: 127.0.0.1
port: 5335
do-ip4: yes
do-udp: yes
do-tcp: yes
do-ip6: no
prefer-ip6: no
harden-glue: yes
harden-dnssec-stripped: yes
use-caps-for-id: no
edns-buffer-size: 1232
prefetch: yes
num-threads: 1
# Yerel ve özel ağ adreslerinin dışarıdan sızmasını engelle
private-address: 192.168.0.0/16
private-address: 172.16.0.0/12
private-address: 10.0.0.0/8
private-address: 169.254.0.0/16
private-address: fd00::/8
private-address: fe80::/10
Servisi başlatın ve doğrudan test edin:
sudo systemctl restart unbound
sudo systemctl enable unbound
# Cevap alıyorsanız Unbound çalışıyor
dig pi-hole.net @127.0.0.1 -p 5335
Son adım Pi-hole'a yeni çözücüyü tanıtmaktır: Settings → DNS ekranında tüm hazır sağlayıcıların işaretini kaldırın ve "Custom DNS servers" alanına 127.0.0.1#5335 yazın.
Bu değişikliğin bir bedeli var: ilk sorgular yavaşlar, çünkü cevap artık hazır bir önbellekten değil kök sunuculardan başlayarak toplanıyor. Ancak Unbound kendi önbelleğini doldurdukça sık kullandığınız alan adları hızlanır; prefetch: yes satırı da süresi dolmak üzere olan kayıtları önceden tazeler. Önbellek davranışının mantığı için DNS önbelleği nasıl çalışır yazısına göz atabilirsiniz.
Blocklist Ekleme: Ne Kadarı Yeterli?#
Varsayılan kurulum yaklaşık 150 bin alan adı içeren dengeli bir listeyle gelir ve çoğu kullanıcı için bu yeterlidir. Liste eklemek istiyorsanız Settings → Lists ekranından adres girip ardından motoru yeniden derlemeniz gerekir:
# Listeleri indir ve gravity veritabanını yeniden oluştur
pihole -g
Burada en sık yapılan hata milyonlarca alan adı biriktirmektir. Liste büyüdükçe engellenen reklam sayısı doğrusal artmaz ama yanlış engelleme olasılığı hızla yükselir. Bir bankanın ödeme doğrulama alan adı ya da bir kargo firmasının takip servisi agresif bir listeye takıldığında sorunu teşhis etmek saatler alır.
Pratik bir yaklaşım şudur: varsayılan listeyle başlayın, iki hafta kullanın, gerçekten rahatsız olduğunuz bir kategori kalırsa (örneğin kripto madencilik veya kimlik avı alan adları) ona özel bir liste ekleyin. Toplamı birkaç yüz binde tutmak, tek başına bir kalite kriteridir.
Alan adı düzeyinde elle müdahale için:
# İzin ver (v6'da whitelist yerine allow)
pihole allow analytics.ornekbanka.com
# Engelle
pihole deny reklam.ornek.net
# Joker karakterli engelleme
pihole --wild izleyici.ornek.net
# Bir alan adının hangi listede olduğunu sorgula
pihole -q analytics.ornekbanka.com
Son komut teşhis için altın değerindedir; bir sonraki bölümün merkezinde o duruyor.
Yanlış Engelleme Teşhisi: "Site Açılmıyor" Dendiğinde#
Pi-hole kurduktan sonra evdeki veya ofisteki herkes, açılmayan her sayfayı size soracak. Sorunun gerçekten Pi-hole'dan kaynaklanıp kaynaklanmadığını dakikalar içinde ayırt etmenin bir yolu var.
Adım 1 — Sorguyu günlükte bulun. Arayüzdeki Query Log ekranında sorunlu alan adını aratın. Durum sütunu Blocked (gravity) ise engelleyen Pi-hole'dur. OK (forwarded) veya OK (cached) ise sorun başka yerdedir; DNS tarafını temize çıkarmış olursunuz.
Adım 2 — Hangi listenin engellediğini öğrenin.
pihole -q sorunlu-alan-adi.com
Çıktı, alan adının hangi engel listesinde geçtiğini gösterir. Beklemediğiniz bir listeyse o listeyi tamamen kaldırmayı değerlendirebilirsiniz.
Adım 3 — Geçici olarak devre dışı bırakıp doğrulayın.
# Engellemeyi 5 dakikalığına kapat
pihole disable 5m
# Elle tekrar aç
pihole enable
Bu sürede site açılıyorsa teşhis kesinleşmiştir. Açılmıyorsa sorun DNS'te değildir; tarayıcı önbelleği, sertifika veya sunucu tarafında aramaya başlayın.
Adım 4 — Kalıcı çözüm. Alan adına izin verin ve mümkünse üst alan adı yerine tam adı hedefleyin:
pihole allow cdn.sorunlu-alan-adi.com
Canlı akışı izlemek isterseniz sorguları anlık takip edebilirsiniz:
pihole -t
Sık karşılaşılan bir başka durum da hiç engelleme olmamasıdır: sayfalar açılır ama reklamlar da durur ve günlükte hiç sorgu görünmez. Bunun en yaygın sebebi cihazın Pi-hole'u atlamasıdır. Tarayıcıların DNS over HTTPS özelliği etkinse sorgular sistem çözücüsüne hiç uğramaz ve doğrudan tarayıcının kendi sağlayıcısına gider. Ayarlardan bu özelliği kapatmanız gerekir; konunun teknik arka planı DNS over HTTPS ve TLS yazısında anlatılıyor.
Bakım, Güncelleme ve İzleme#
Pi-hole düşük bakım isteyen bir servistir ama tamamen kendi hâline bırakılmaz.
# Pi-hole'u güncelle
sudo pihole -up
# Engel listelerini tazele (haftalık otomatik çalışır)
pihole -g
# Servis ve bileşen durumu
pihole status
# Uzun süredir çalışan kurulumlarda sorgu veritabanını küçült
sudo pihole -f
İzlenmesi gereken üç şey var. Birincisi engelleme oranı: normal bir ağda yüzde 10–30 bandındadır. Sıfıra yakınsa cihazlar Pi-hole'u kullanmıyor demektir. Ani bir yükseliş ise ağda bir cihazın telemetri fırtınası ürettiğine işaret edebilir.
İkincisi açık çözücü kontrolü. Güvenlik duvarı kuralları bir güncelleme sonrası veya sunucu taşımada bozulabilir; ayda bir dışarıdan dig @SUNUCU_IP example.com testini tekrarlamak iyi bir alışkanlıktır.
Üçüncüsü tek nokta arıza riski. Pi-hole çöktüğünde ona bakan tüm cihazlar internetsiz kalır, çünkü hiçbir alan adı çözülemez. Bunu iki şekilde yumuşatabilirsiniz: yönlendirici ayarlarına ikincil bir DNS sunucusu tanımlamak ya da düzenli yedek almak. İkincil DNS tanımının bir yan etkisi olduğunu bilin — cihazlar bazen ikinci sunucuyu tercih eder ve o sorgular filtrelenmez. En temiz yaklaşım, Pi-hole yapılandırmasının ve /etc/pihole dizininin düzenli yedeğini alıp gerektiğinde hızla ayağa kaldırmaktır.
Sıkça Sorulan Sorular#
Pi-hole YouTube reklamlarını engeller mi?#
Hayır, güvenilir biçimde engellemez. YouTube video içi reklamlarını videonun kendisiyle aynı alan adları üzerinden sunar; Pi-hole bir alan adını ya tamamen engeller ya da tamamen serbest bırakır, dolayısıyla reklamı engellemeye çalışmak videoyu da bozar. Pi-hole'un asıl etkili olduğu yerler uygulama içi reklam ağları, telemetri servisleri ve akıllı TV gibi eklenti kurulamayan cihazlardır.
VDS'te Pi-hole kurmak yasal veya güvenli mi?#
Kendi kullanımınız için kurmak tamamen normaldir; sağlayıcıların büyük bölümü bunu açıkça destekler. Sorun çıkaran şey Pi-hole değil, açık çözücü olarak yapılandırılmış bir DNS sunucusudur. 53 portunu güvenlik duvarıyla kendi adresinize kısıtladığınız veya yalnızca VPN arayüzünde dinlettiğiniz sürece kötüye kullanım bildirimiyle karşılaşmazsınız.
Unbound kurmak zorunda mıyım?#
Zorunlu değil. Unbound'un sağladığı şey, çözümlemeyi tek bir yukarı akış sağlayıcısına bağımlı olmaktan çıkarmasıdır; gezinme geçmişiniz artık üçüncü bir tarafta toplanmaz. Buna karşılık ilk sorgular biraz yavaşlar ve bakması gereken bir bileşen daha eklenir. Gizlilik önceliğinizse kurun, sadece reklam engelleme istiyorsanız Cloudflare veya Quad9 ile devam etmek de makul bir tercihtir.
Pi-hole çökerse internetim tamamen kesilir mi?#
Ona DNS için bakan cihazlarda evet, çünkü hiçbir alan adı çözülemez ve bağlantı olmasına rağmen hiçbir site açılmaz. Bu yüzden yönlendiricinize ikincil bir DNS sunucusu tanımlamak yaygın bir önlemdir; ancak cihazlar bazen ikinciyi tercih ettiğinden o sorgular filtrelenmez. Kesintiye tahammülünüz yoksa yapılandırma yedeğini hazır tutup hızlı geri dönmeyi planlamak daha sağlıklıdır.
Reklamlar hâlâ görünüyorsa neye bakmalıyım?#
Önce cihazın gerçekten Pi-hole'u kullandığını doğrulayın: sorgu günlüğünde o cihazın adresinden gelen kayıtlar görünmelidir. Görünmüyorsa cihaz başka bir çözücüye gidiyordur. En sık sebep tarayıcıların DNS over HTTPS ayarıdır; ikincisi yönlendiricide ikincil DNS'in tanımlı kalmasıdır. Üçüncü ihtimal, reklamın içerikle aynı alan adından sunulmasıdır ki bu durumda DNS düzeyinde yapılabilecek bir şey yoktur.
Blocklist'i ne kadar büyütmeliyim?#
Büyütmemeye çalışın. Varsayılan liste çoğu ihtiyacı karşılar ve toplamı birkaç yüz bin alan adında tutmak, yanlış engelleme riskini düşük tutar. Milyonlarca kayıtlı toplu listeler bankacılık, kargo takibi ve ödeme doğrulama gibi kritik servisleri de yakalayabilir; kazandığınız ek engelleme, harcayacağınız teşhis süresini nadiren karşılar. Bir kategori sizi gerçekten rahatsız ediyorsa yalnızca o kategoriye özel bir liste ekleyin.