15%

Tüm Hosting Hizmetlerinde %15 indirim

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın:

Skills
Başlayın
07.10.2024

Linux’ta Hosts Dosyası Nasıl Düzenlenir: Eksiksiz Teknik Kılavuz

Linux’taki `/etc/hosts` dosyası, ana bilgisayar adlarını IP adreslerine eşleyen ve herhangi bir DNS sorgusu gönderilmeden *önce* işletim sistemi tarafından işlenen statik bir arama tablosudur. Bu dosyaya giriş ekleyerek veya mevcut girişleri değiştirerek, DNS sunucunuza, yönlendiricinize veya kayıt kuruluşu ayarlarınıza dokunmadan belirli etki alanları için DNS çözümlemesini makine bazında geçersiz kılabilirsiniz.

Bu mekanizma, `/etc/nsswitch.conf` içinde yapılandırılan Name Service Switch (NSS) tarafından kontrol edilir. Varsayılan `hosts:` satırı genellikle `files dns` şeklinde okunur; bu, sistemin önce `/etc/hosts` dosyasına başvurduğu, ardından `/etc/resolv.conf` içinde tanımlanan DNS çözümleyicilerine geri döndüğü anlamına gelir. Bu sırayı anlamak kritik öneme sahiptir: bir ana bilgisayar adı `/etc/hosts` içinde mevcutsa, DNS sorgusu hiçbir zaman makineden çıkmaz.

Hosts Dosyası Nedir ve Nasıl Çalışır?

`/etc/hosts` dosyası, modern DNS sisteminden çok daha önce ortaya çıkmıştır. ARPANET’in ilk dönemlerinde, Stanford Araştırma Enstitüsü tarafından yönetilen tek bir `HOSTS.TXT` dosyası ağa bağlı her makineye dağıtılıyordu. Günümüzdeki `/etc/hosts` dosyası, bu kavramın doğrudan bir devamıdır — her POSIX uyumlu işletim sisteminin hâlâ desteklediği yerel, yetkili bir geçersiz kılma katmanıdır.

Dosyadaki yorum olmayan her satır şu sözdizimini izler:

“`

IP_address canonical_hostname [alias1] [alias2] …

“`

  • `#` ile başlayan satırlar yorum satırlarıdır ve yok sayılır.
  • Boşluk karakterleri (boşluk veya sekme) alanları birbirinden ayırır.
  • Tek bir IP adresi, aynı satırda birden fazla ana bilgisayar adıyla eşleştirilebilir.
  • IPv4 ve IPv6 girişleri aynı dosyada bir arada bulunabilir.

Yeni bir Linux kurulumunda minimal varsayılan `/etc/hosts` dosyası şu şekilde görünür:

“`

127.0.0.1 localhost

127.0.1.1 myhostname.local myhostname

::1 localhost ip6-localhost ip6-loopback

ff02::1 ip6-allnodes

ff02::2 ip6-allrouters

“`

`127.0.1.1` girişi Debian/Ubuntu’ya özgüdür ve statik bir IP atanmadığında makinenin FQDN‘ini bir geri döngü adresine eşler. Bu girişin kaldırılması, ana bilgisayar adı çözümlemesine dayanan `sudo` gibi araçları bozabilir.

Hosts Dosyasını Neden Düzenlersiniz?

Kullanım senaryoları, basit geliştirici kolaylığından güvenlik açısından kritik altyapı görevlerine kadar uzanır:

Yerel geliştirme ve hazırlık ortamları

Canlı DNS kayıtlarını değiştirmeden, bir üretim etki alanını (örn. `myapp.com`) oluştururken veya test ederken `127.0.0.1` veya bir LAN IP’sine yönlendirin. Bu, yerel olarak veya uzak bir sunucuda VPS Hosting ortamı çalıştıran geliştiriciler için en yaygın kullanım senaryosudur.

Çok sunuculu uygulama testi

Bir siteyi yeni bir sunucuya taşırken, etki alanını yalnızca yerel makinenizde yeni sunucunun IP’sine yönlendirin. Genel DNS kaydını güncellemeden önce yeni ortamın tamamen işlevsel olduğunu doğrulayabilirsiniz; bu sayede kesinti riskini ortadan kaldırırsınız.

Kötü amaçlı veya istenmeyen etki alanlarını engelleme

Bir etki alanını `0.0.0.0` adresine yönlendirmek (engelleme için `127.0.0.1` yerine tercih edilir), localhost üzerinde reddedilen bir bağlantı için beklemeden bağlantının hemen başarısız olmasına neden olur. `StevenBlack/hosts` gibi projeler, milyonlarca reklam, izleyici ve kötü amaçlı yazılım etki alanını tek bir hosts formatındaki engelleme listesinde bir araya getirir.

Konteyner ve mikro hizmet ağı

Özel bir DNS çözümleyicisi olmayan Docker veya LXC ortamlarında, konteynerler içindeki (veya ana bilgisayardaki) `/etc/hosts` girişleri hafif hizmet keşfi sağlar. Docker’ın `–add-host` bayrağı, çalışma zamanında girişleri doğrudan bir konteynerin `/etc/hosts` dosyasına enjekte eder.

Bölünmüş ufuk DNS’ini geçersiz kılma

İç ve dış DNS’nin aynı ana bilgisayar adı için farklı kayıtlar döndürdüğü kurumsal ağlarda, bir hosts dosyası girişi belirli bir makinede deterministik kontrol sağlar.

SSL sertifikası doğrulama testi

Bir hazırlık sunucusunda yeni bir SSL Sertifikaları dağıtımını test ederken, `/etc/hosts` içinde etki alanını hazırlık IP’sine yönlendirmek, yayına geçmeden önce tam TLS el sıkışmasını, sertifika zincirini ve HTTPS yönlendirme davranışını doğrulamanıza olanak tanır.

Adım Adım: Linux’ta Hosts Dosyası Nasıl Düzenlenir

Adım 1: Terminal Açın

Bir terminal öykünücüsüne erişin. Masaüstü dağıtımlarında `Ctrl + Alt + T` kısayolu GNOME, KDE ve XFCE’de çalışır. Başsız bir sunucuda, SSH aracılığıyla zaten bir kabuk oturumundasınızdır.

Mevcut kullanıcınızı ve ayrıcalık düzeyinizi doğrulayın:

“`bash

whoami

id

“`

Adım 2: Mevcut Hosts Dosyasını Yedekleyin

Herhangi bir sistem dosyasını değiştirmeden önce her zaman zaman damgalı bir yedek oluşturun. Genel bir `hosts.backup` yanlışlıkla üzerine yazılabilir; zaman damgası ise belirsizliğe yer bırakmaz:

“`bash

sudo cp /etc/hosts /etc/hosts.bak.$(date +%Y%m%d_%H%M%S)

“`

Yedeğin oluşturulduğunu doğrulayın:

“`bash

ls -lh /etc/hosts*

“`

Adım 3: Dosya İzinlerini ve Sahipliğini Kontrol Edin

Düzenlemeden önce dosyanın mevcut sahipliğini ve izinlerini doğrulayın:

“`bash

ls -la /etc/hosts

“`

Beklenen çıktı:

“`

-rw-r–r– 1 root root 221 Jan 10 09:00 /etc/hosts

“`

Dosya, `644` izinleriyle `root:root` tarafından sahiplenilmelidir. İzinler farklıysa, devam etmeden önce araştırın — dünyaya yazılabilir bir `/etc/hosts` dosyası bir güvenlik açığıdır.

Adım 4: Hosts Dosyasını Bir Metin Düzenleyiciyle Açın

nano kullanarak (çoğu kullanıcı için önerilir):

“`bash

sudo nano /etc/hosts

“`

vim kullanarak:

“`bash

sudo vim /etc/hosts

“`

gedit kullanarak (GUI, GNOME masaüstü):

“`bash

sudo gedit /etc/hosts

“`

Etkileşimsiz/betiklenmiş eklemeler için tee kullanarak (düzenleyici gerekmez):

“`bash

echo "192.168.1.50 staging.myapp.com" | sudo tee -a /etc/hosts

“`

`-a` bayrağı, dosyanın üzerine yazmak yerine dosyaya ekler. Bu, otomasyon betikleri ve Ansible playbook’ları için en güvenli yöntemdir.

Adım 5: Giriş Ekleme, Değiştirme veya Kaldırma

Dosyanın sonuna gidin ve girişlerinizi ekleyin. Bu biçimlendirme kurallarına kesinlikle uyun:

  • Satır başına bir giriş.
  • Önce IP adresi, ardından boşlukla ayrılmış bir veya daha fazla ana bilgisayar adı.
  • Gelecekteki başvurular için girişlere açıklama eklemek amacıyla satır içi `#` kullanın.

Bir etki alanını yerel bir geliştirme sunucusuna yönlendirme:

“`

127.0.0.1 myproject.local # Local dev – remove before production

“`

Bir etki alanını uzak bir hazırlık sunucusuna yönlendirme:

“`

203.0.113.45 staging.myapp.com # Staging server – pre-DNS cutover

“`

Bir etki alanını engelleme (0.0.0.0 kullanılarak tercih edilen yöntem):

“`

0.0.0.0 ads.example.com

0.0.0.0 tracker.analytics-provider.com

“`

IPv6 girişi ekleme:

“`

::1 ipv6-service.local

“`

Birden fazla takma adı tek bir IP’ye eşleme (sanal ana bilgisayarlar için kullanışlıdır):

“`

127.0.0.1 app.local api.local static.local

“`

Adım 6: Düzenleyiciyi Kaydedin ve Kapatın

nano’da:

  • Kaydet: `Ctrl + O`, ardından dosya adını onaylamak için `Enter`.
  • Çıkış: `Ctrl + X`.

vim’de:

  • Normal moda dön: `Esc`
  • Kaydet ve çık: `:wq` ardından `Enter`
  • Kaydetmeden çık: `:q!` ardından `Enter`

Adım 7: Dosya İçeriğini Doğrulayın

Girişlerinizin doğru şekilde yazıldığını onaylayın:

“`bash

cat /etc/hosts

“`

Büyük hosts dosyaları için belirli girişleri bulmak amacıyla `grep` kullanın:

“`bash

grep "myproject.local" /etc/hosts

“`

Sözdizimi hatalarını kontrol edin — eksik IP’ye veya hatalı biçimlendirilmiş adrese sahip bir giriş, çözümleyici tarafından sessizce yok sayılacaktır:

“`bash

sudo python3 -c "

with open('/etc/hosts') as f:

for i, line in enumerate(f, 1):

line = line.strip()

if line and not line.startswith('#'):

parts = line.split()

if len(parts) < 2:

print(f'Line {i} may be malformed: {line}')

"

“`

Adım 8: DNS Önbelleğini Temizleyin

`/etc/hosts` dosyasındaki değişiklikler, çoğu sistemde yeni bağlantılar için hemen geçerli olur. Ancak sisteminiz yerel bir DNS önbellekleme arka plan programı çalıştırıyorsa, değişiklikleri görmek için önbelleğini temizlemeniz gerekir.

systemd-resolved (Ubuntu 18.04+, çoğu modern dağıtım):

“`bash

sudo systemd-resolve –flush-caches

sudo systemd-resolve –statistics # Verify cache was cleared

“`

nscd (Name Service Cache Daemon):

“`bash

sudo systemctl restart nscd

“`

dnsmasq:

“`bash

sudo systemctl restart dnsmasq

“`

dnsmasq eklentili NetworkManager:

“`bash

sudo systemctl restart NetworkManager

“`

Tarayıcılar kendi DNS önbelleklerini bağımsız olarak yönetir. Chrome ve Firefox, DNS kayıtlarını 60 saniyeye kadar önbelleğe alır. Chrome’un dahili DNS önbelleğini temizlemek için `chrome://net-internals/#dns` adresine gidin ve “Clear host cache” düğmesine tıklayın.

Adım 9: Çözümlemeyi Test Edin

NSS çözümleme zincirinin daha güvenilir bir testi için `ping` yerine `getent` kullanın:

“`bash

getent hosts myproject.local

“`

`getent`, sistemin Name Service Switch’ini doğrudan sorgular, `/etc/nsswitch.conf` dosyasına saygı gösterir ve size işletim sisteminin tam olarak neyi çözümlediğini gösterir — bir DNS sunucusunun ne döndürdüğünü değil. Bu kesin testtir.

Ek olarak:

“`bash

ping -c 3 myproject.local

“`

“`bash

curl -v http://myproject.local

“`

`getent` doğru IP’yi döndürüyor ancak `ping` döndürmüyorsa, sorun hosts dosyasında değil ağ yığınında veya güvenlik duvarındadır.

Hosts Dosyası ile DNS: Hangisi Ne Zaman Kullanılır

Kriter`/etc/hosts`DNS Sunucusu
KapsamYalnızca tek makineAğ geneli veya küresel
Yayılma gecikmesiAnlıkDakikalar ile 48 saat arası (TTL’ye bağlı)
Ağ gerektirirHayırEvet (harici DNS için)
ÖlçeklenebilirlikZayıf (manuel, makine başına)Mükemmel (merkezi yönetim)
Joker karakter desteğiHayırEvet (örn. `*.example.com`)
Yeniden başlatmadan sonra kalırEvet (dosya kalıcıdır)Evet (sunucu tarafından yönetilir)
Denetim iziYalnızca sürüm kontrolü aracılığıylaDNS sağlayıcısına bağlıdır
En iyi kullanımGeliştirme/test geçersiz kılmaları, engellemeÜretim altyapısı
IPv6 desteğiEvetEvet
Otomasyon dostuOrta (dosya düzenleme)Yüksek (API güdümlü)

Bir Dedicated Servers filosu gibi birden fazla sunucu yöneten ekipler için, merkezi DNS yönetimi her zaman hosts dosyası değişikliklerini manuel olarak dağıtmaktan üstündür. Hosts dosyası, bir altyapı aracı değil, makine başına kullanılan bir araçtır.

Gelişmiş Teknikler ve Uç Durumlar

Apache ve Nginx’te Sanal Ana Bilgisayarlarla Hosts Dosyası Kullanımı

Sanal barındırma kullanarak tek bir sunucuda birden fazla web sitesi çalıştırırken, *istemci makinenizdeki* hosts dosyasının etki alanını sunucunun IP’sine yönlendirmesi gerekir. Web sunucusu daha sonra isteği doğru sanal ana bilgisayara yönlendirmek için `Host:` HTTP başlığını kullanır. Hosts dosyası girişi ve sunucunun sanal ana bilgisayar yapılandırması aynı ana bilgisayar adını kullanmalıdır.

Örneğin, bir VPS with cPanel üzerinde `myapp.local` için yapılandırılmış bir Apache sanal ana bilgisayarınız varsa, sunucunun IP’sini yerel hosts dosyanıza ekleyin:

“`

198.51.100.10 myapp.local

“`

Ardından tarayıcınızda `http://myapp.local` adresine erişin. Apache, `Host: myapp.local` başlığını okur ve doğru siteyi sunar.

Hosts Dosyasını Yetkisiz Değişikliklerden Koruma

Kötü amaçlı yazılımlar, meşru etki alanlarını (örn. bankacılık siteleri) kimlik avı sunucularına yönlendirmek için sıklıkla `/etc/hosts` dosyasını hedef alır. Dosyayı değiştirilemez hale getirmek için `chattr` kullanın:

“`bash

sudo chattr +i /etc/hosts

“`

Bu, değiştirilemez bayrak açıkça kaldırılana kadar root tarafından bile değiştirilmesini engeller:

“`bash

sudo chattr -i /etc/hosts # Remove immutability to edit

“`

Özelliği kontrol edin:

“`bash

lsattr /etc/hosts

“`

Hosts Dosyanızı Sürüm Kontrolüne Alma

Ekipler veya karmaşık geliştirme ortamları için `/etc/hosts` değişikliklerini Git ile takip edin:

“`bash

sudo cp /etc/hosts ~/dotfiles/hosts

cd ~/dotfiles && git add hosts && git commit -m "Add staging.myapp.com entry"

“`

etckeeper gibi araçlar, sistem dosyası değişikliklerinin tam denetim izini sağlayarak Git veya diğer VCS arka uçlarını kullanarak tüm `/etc` dizinini otomatik olarak sürüm kontrolüne alır.

Docker ve Kubernetes’te Hosts Dosyası

Docker’da, ana bilgisayar sistemini değiştirmeden konteyner başlangıcında hosts dosyası girişleri enjekte edebilirsiniz:

“`bash

docker run –add-host=myservice.local:192.168.1.100 myimage

“`

Kubernetes’te, Pod spesifikasyonundaki `hostAliases` aynı sonucu elde eder:

“`yaml

spec:

hostAliases:

  • ip: "192.168.1.100"

hostnames:

  • "myservice.local"

“`

Bu yaklaşımlar, konteynerleştirilmiş ortamlarda çalışırken ana bilgisayarın `/etc/hosts` dosyasını değiştirmeye tercih edilir.

`0.0.0.0` ile `127.0.0.1` Engelleme Tartışması

Her iki adres de etki alanlarını engellemek için kullanılır, ancak farklı davranışlar sergilerler:

  • `127.0.0.1`: Bağlantıyı yerel geri döngü arabirimine yönlendirir. Yerel olarak 80/443 numaralı bağlantı noktasında dinleyen bir şey yoksa bağlantı reddedilir — ancak işletim sistemi yine de bağlantı kurmaya çalışır ve bu kısa bir gecikmeye neden olur.
  • `0.0.0.0`: Çoğu sistemde geçersiz bir hedefi temsil eder. Bağlantı, TCP el sıkışması girişiminde bulunmadan hemen başarısız olur; bu da çok sayıda reklam/izleyici etki alanı engellenirken daha hızlı sayfa yüklemelerine yol açar.

Engelleme listesi kullanım senaryoları için `0.0.0.0` teknik açıdan daha üstün bir seçimdir.

Yaygın Hatalar ve Sorun Giderme

Düzenlemeden sonra değişiklikler geçerli olmuyor:

  • Girişin sözdizimsel olarak doğru olduğunu onaylayın (önce IP, ardından ana bilgisayar adı).
  • Yerel DNS önbelleğini temizleyin (bkz. Adım 8).
  • `/etc/nsswitch.conf` dosyasını kontrol edin — `hosts:` satırında `dns` ifadesi `files` ifadesinden önce görünüyorsa, DNS önce sorgulanır ve önbelleğe alınmış girişler için hosts dosyası atlanır.

Düzenlemeden sonra `sudo: unable to resolve host` hatası:

  • Büyük olasılıkla makinenizin ana bilgisayar adını `127.0.1.1` veya `127.0.0.1` ile eşleştiren satırı kaldırdınız veya bozdunuz. Yedeği hemen geri yükleyin: `sudo cp /etc/hosts.bak.TIMESTAMP /etc/hosts`.

Belirli bir uygulama için giriş yok sayılıyor:

  • Bazı uygulamalar (özellikle özel NSS yapılandırmalarıyla `getaddrinfo` kullananlar veya statik olarak bağlı çözümleyiciye sahip olanlar) `/etc/nsswitch.conf` dosyasını tamamen atlayarak DNS’i doğrudan sorgular. Bu durum, CGO devre dışı bırakılarak derlenen Go ikili dosyalarında yaygındır. `strace -e trace=network yourapp` ile doğrulayın.

Hosts dosyası yerel olarak çalışıyor ancak Docker konteynerinde çalışmıyor:

  • Konteyner ağı izole edilmiştir. Konteynerin kendi `/etc/hosts` dosyası vardır. Yukarıda açıklandığı gibi `–add-host` veya `hostAliases` kullanın.

Temel Teknik Çıkarımlar: Karar Kontrol Listesi

`/etc/hosts` dosyasını düzenlemeden önce bu kontrol listesini gözden geçirin:

  • Kapsam kontrolü: Bu değişiklik yalnızca bir makinede mi gerekli? Birden fazla makinenin buna ihtiyacı varsa, DNS kullanın veya değişikliği dağıtmak için Ansible gibi bir araç kullanın.
  • Önce yedekleyin: Herhangi bir düzenlemeden önce her zaman zaman damgalı bir yedek oluşturun (`hosts.bak.YYYYMMDD_HHMMSS`).
  • Engelleme için `0.0.0.0` kullanın: Daha hızlı başarısızlık, geri döngü yükü yok.
  • Doğru önbelleği temizleyin: Yanlış hizmeti yeniden başlatmadan önce sisteminizin `systemd-resolved`, `nscd` veya `dnsmasq` kullanıp kullanmadığını belirleyin.
  • `getent` ile test edin: NSS çözümlemesini onaylamak için `ping`’dan daha güvenilirdir.
  • Dosyayı koruyun: Üretim veya güvenlik açısından hassas sistemlerde `chattr +i` kullanın.
  • Girişlerinizi belgeleyin: Varsayılan olmayan her girişe satır içi yorum (`# reason – added YYYY-MM-DD`) ekleyin.
  • Geçici girişleri kaldırın: Üretim hosts dosyalarında bırakılan geliştirme/test girişleri, teşhis edilmesi güç yönlendirme hatalarının yaygın bir kaynağıdır.

Birden fazla ortamda geliştirme iş akışı yönetiyorsanız, sanal ana bilgisayar yönetimini merkezileştirmek ve makine başına yapılandırma kaymasını azaltmak için yerel hosts dosyası yönetimini düzgün yapılandırılmış bir VPS Control Panels kurulumunla eşleştirmeyi düşünün.

Domain Registration ve aşamalı yayınları içeren projeler için, hosts dosyası DNS yayılımı tamamlanmadan önce yeni bir sunucu yapılandırmasının tam uçtan uca testini gerçekleştirmenin en güvenilir yolu olmaya devam eder — halk herhangi bir değişikliği görmeden önce size sıfır riskli bir doğrulama penceresi sunar.

SSS

`/etc/hosts` dosyasını düzenlemek sistem yeniden başlatması gerektirir mi?

Hayır. `/etc/hosts` dosyasındaki değişiklikler yeni bağlantılar için hemen geçerli olur. Yerel bir DNS önbellekleme arka plan programınız (`systemd-resolved`, `nscd` veya `dnsmasq`) varsa, önbelleğini temizlemeniz gerekir. Tarayıcılar da manuel olarak temizlenmesi gerekebilecek bağımsız DNS önbellekleri tutar.

Hosts dosyası girişim terminalde çalışıyor ancak tarayıcımda neden çalışmıyor?

Tarayıcılar, DNS kayıtlarını işletim sistemi çözümleyicisinden bağımsız olarak önbelleğe alır. Chrome, kayıtları 60 saniyeye kadar önbelleğe alır. `chrome://net-internals/#dns` adresine gidin ve host önbelleğini temizleyin ya da TTL’nin sona ermesini bekleyin.

`/etc/hosts` dosyasında joker karakter kullanabilir miyim?

Hayır. `/etc/hosts` dosyası joker karakter girişlerini desteklemez. Her ana bilgisayar adının açıkça listelenmesi gerekir. Joker karakter çözümlemesine ihtiyacınız varsa (örn. `*.local`), `dnsmasq` veya `unbound` gibi yerel bir DNS çözümleyici kullanın.

`/etc/hosts` dosyasındaki maksimum giriş sayısı nedir?

Çekirdek veya glibc tarafından zorunlu kılınan sabit kodlu bir sınır yoktur. Ancak dosya her arama için doğrusal olarak ayrıştırıldığından, çok büyük dosyalarda performans düşer. Onlarca binlerce girişe sahip dosyalar (reklam engelleme listeleriyle yaygındır) ana bilgisayar adı çözümlemesine ölçülebilir gecikme ekleyebilir. Büyük engelleme listeleri için Pi-hole gibi özel bir DNS çukuru daha verimlidir.

`/etc/hosts` dosyasındaki varsayılan girişleri silmek güvenli midir?

Hayır. Varsayılan girişler (`127.0.0.1 localhost`, `::1 localhost` ve makinenin kendi ana bilgisayar adı eşlemesi) doğru sistem işlemi için gereklidir. Bunların kaldırılması `sudo`’ı, yerel soket bağlantılarını ve geri döngü çözümlemesine dayanan uygulamaları bozabilir. Yalnızca giriş ekleyin veya değiştirin; varsayılanları asla belirli, iyi anlaşılmış bir neden olmadan kaldırmayın.

15%

Tüm Hosting Hizmetlerinde %15 indirim

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın:

Skills
Başlayın