17 Eylül 2016

Kali Linux - Bölüm-8: Ağ Yönetimi

Ağ Konfigürasyonu ve Ağ Teşhis Araçları

Linux’da ağ arayüzleri ile ilgili bilgileri görmek için “ifconfig” komutunu kullanabiliriz. “-a” opsiyonu arayüzler “down” olsa da listelenmesini sağlar.


Ağ arayüzleri ile ilgili konfigürasyon dosyası “/etc/network/interfaces” dosyasıdır.


Bu dosyada loopback interface’i (yani bilgisayarın kendisini ifade eden sanal bir interface’i) tanımlıdır, ancak eth0 arayüzü ile ilgili bir tanım bulunmamaktadır. Debian dağıtımında ayrıca NetworkManager uygulaması ağ arayüzleri ile ilgili yönetim fonksiyonunu yerine getirmektedir.

NetworkManager uygulaması da “init” prosesi tarafından başlatılan servislerden birisidir. Yukarıda NetworkManager uygulamasının process id’sinin hemen sonrasında “dhclient” uygulamasını çalıştırdığı da görülmektedir. Bunu yaparken kullandığı parametrelerden birisi de “/var/lib/NetworkManager/dhclient-eth0.conf” dosyasıdır. Bu dosya “NetworkManager” uygulaması tarafından otomatik olarak oluşturulmaktadır.


NetworkManager uygulamasının konfigürasyon dosyası “/etc/NetworkManager/NetworkManager.conf” dosyasıdır. Bu dosyanın köşeli parantezler içinde geçen modülleri içinde “ifupdown” modülünün “managed” parametresinin “false” olması NetworkManager’ın “/etc/network/interfaces” dosyasında tanımlı arayüzlere müdahale etmemesi anlamına gelir.

Buna göre eğer “eth0” arayüzü ile ilgili bir tanımı “/etc/network/interfaces” dosyasında yapmış olsaydık “NetworkManager” uygulaması bu arayüzle ilgili bir işlem yapmayacaktı.


DNS sunucu bilgisinin tutulduğu dosya “/etc/resolv.conf” dosyasıdır. Ancak bu dosya sistem her reboot ettiğinde pek çok servis ve uygulama tarafından ezilebilir (elbette bu dosya içinde yapacağımız değişiklikler bir sonraki reboot’a kadar geçerli olacaktır). Bu nedenle DNS ayarları için yapılması gereken en doğru işlem ağ yönetimini yapan uygulamaların konfigürasyon dosyalarıdır. Bu uygulamalara örnek olarak aşağıdakiler verilebilir:
  • “network-manager” servisi
  • “resolvconf” uygulaması
  • dhcp client uygulamaları
Debian için bu ayarı “nm-connection-editor” uygulaması ile düzenleyebiliriz.


Bu uygulama ile oluşturulan profil dosyası “/etc/NetworkManager/system-connections/” dizini altında oluşturulacaktır.


Şimdi “NetworkManager” daemon’ını tekrar başlatarak belirlediğimiz statik DNS adreslerinin geçerli olup olmayacağına bakalım.


Yine “nm-connection-editor” uygulaması yardımıyla “eth0” arayüzümüze statik bir IP adresi de atayabilirdik.




Aynı durumun (yani NetworkManager’ın müdahale etmeyeceği bir konfigürasyonun) eğer biz “/etc/network/interfaces” dosyasında “eth0” arayüzü için bir tanım yaparsak da geçerli olması gerekir.


“auto” tanımı “eth0” arayüzünün sistem başlatıldığında “up” yani ayakta duruma getirilmesini sağlamaktadır. Diğer tanımlar ise ağ ayarlarından oluşmaktadır.


DNS ayarlarını ise manuel olarak yapabiliriz, çünkü NetworkManager artık devreye girmeyecek ve bu değerleri ezmeyecektir.
Sistemi reboot edelim ve ağ ayarlarını kontrol edelim.


Bu defa NetworkManager tanımladığımız ayarlara müdahale etmedi ve “/etc/network/interfaces” dosyasındaki ayarlarımız geçerli oldu.

Eğer “eth0” arayüzümüzü statik IP adresli olarak tanımlamasaydık gelen yanıtlar içinde bulunan DNS kayıtları yine “/etc/resolv.conf” dosyamızı ezecekti.



Eğer arayüzümüzün IP adresini dinamik almasını istiyor ancak DNS adresini kendimiz belirlemek istiyorsak “/etc/dhcp/dhclient.conf” dosyası içindeki prepend domain-name-servers satırının comment’ini kaldırıp buraya istediğimiz DNS sunuc adresini tanımlamamız gerekir.



Ancak bu ayarın etkisi gördüğünüz gibi DNS adreslerini tamamen değiştirmek değil DHCP yanıtı ile gelen DNS adreslerinin önüne bizim tanımladığımız adresi eklemek (prepend etmek) şeklinde olacaktır.

Routing, NAT ve Forwarding


Linux sisteminizi kullanırken eğer statik IP tanımlarınızı manuel olarak yapıyorsanız (herhangi bir araç kullanmıyorsanız) route tanımlarını da yapmanız gerekebilir. Hangi durumda nasıl bir ihtiyacınız olacağı duruma bağlı olacağından burada temel konular ve komutlardan söz edeceğiz.


İlk olarak bir Kali sistemi kurduktan sonra öntanımlı olarak route tablosuna göz atalım. Bu sistem ağdaki sıradan bir sistem, yani kendisi bir router gibi davranmıyor, sadece sistemi kullananlar için 2 kural tanımlı tabloda. “route” komutunu “-n” opsiyonuyla çalıştırdığımızda tüm adresleri numerik (IP adresiyle) görüntülüyor.

Birinci kural tüm hedef IP adresleri için gateway olarak 192.168.163.2 IP adresli cihazın / sunucunun kullanılması gerektiğini ve bu sunucuya “eth0” arayüzünden erişilebileceğini söylüyor. “U” bayrağı kuralın aktif (up) olduğunu, “G” bayrağı da bu route’un bir gateway’e doğru olduğunu belirtiyor.
İkinci kural 192.168.163.0/24 subnet’ine doğru olan trafiğin “eth0” arayüzünden doğrudan hedef IP adresine iletilmesi gerektiğini söylüyor.

Paketler iletilirken paketle ilgili en kısıtlayıcı route dikkate alınır, yani lokal subnete iletilecek bir paket 2. route kullanılarak iletilir.
Network servislerinin konfigürasyon dosyalarında statik IP adres tanımı yapıldığında, kendi subnet’imiz dışındaki hedef sunucular için gateway tanımı da dahil olmak üzere gerekli olan “route” tanımları ilgili network servisi tarafından uygulanıyor. Ancak “ifconfig” komutu ile komut satırından statik IP tanımı yaptığımızda gateway route tanımını bizim yapmamız gerekiyor.


Hali hazırda IP adres ataması ve route tanımları mevcutken “ifconfig” komutu ile statik IP adresi tanımladığımızda, bu komut sayesinde subnet route tanımımız da “ifconfig” komutu tarafından tanımlanmış oluyor.

Ancak subnet dışındaki hedefler için default gateway route tanımını “route” komutu ile manuel olarak eklememiz gerekiyor. Bu tanımı da yaptıktan sonra internetteki bir sunucu ile etkileşime geçebiliyoruz.

/etc/hosts dosyası


DNS sunucu ayarlarının “/etc/resolv.conf” dosyasında bulunduğunu ve bu dosyadaki verilerin hangi uygulamalar tarafından ezildiğini, dolayısıyla DNS ayarlarının aslında nasıl yapılması gerektiğini açıklamıştık. Unix ve türevi sunucular (Windows, MacOS, iOS ve Android gibi) bir sunucu adını çözümlemek için DNS sorgusundan daha önce “hosts” dosyasına göz atarlar. Eğer bu dosyada sunucu adıyla ilgili bir kayıt varsa bu kayıt satırındaki IP adresini kullanarak sunucuya erişmeye çalışırlar ve herhangi bir DNS sorgusu yapmazlar. Aslında tarihsel olarak çok küçük bir ağa bağlı bilgisayarlar için geliştirilen TCP/IP altyapısı için bu tür bir dosya yeterli idi. Ancak ağa bağlı bilgisayarların sayısı arttıkça “hosts” dosyasındaki kayıtlar ve tüm bilgisayarlarda bu dosyanın senkronizasyonu yönetilemez hale geldi. DNS protokolünün ve servisinin geliştirilmesi bu nedenle gerçekleşti. Dolayısıyla uygulamaların DNS sorgusu yapmadan önce “hosts” dosyasını kontrol etmeleri son derece normal.

Unix ve türevi bilgisayarlarda bu dosya “/etc/hosts” dosyasıdır.


“/etc/hosts” dosyasına www.btrisk.com alan adının IP adresi olarak “127.0.0.1” IP adresini girdikten sonra bu alan adlı sunucuya ping attığımızda isteklerimiz localhost’a yönlendirildi. Bu yöntem özellikle henüz internete açılmamış olan web veya mobil uygulamaları test edebilmek için intranetten sunucuya kendi alan adıyla ulaşmak amacıyla kullandığımız basit bir yöntemdir. Böylece alan adı ve ilgili linkler doğru olduğu halde sunucuya gerçek IP adresinden değil private IP adresinden ulaşabiliriz.

Hostname



Unix ve türevi sunucularda “/etc/hostname” adlı bir dosya bulunmaktadır. Bu dosyada sunucunun adı bulunmakta ve terminal prompt’unda görünmek dışında pek de bir işe yaramıyor gibi görülmektedir. Yukarıdaki örnekte bu dosyadaki sunucu adı bilgisini değiştirdikten sonra bash shell’inin içinde yeni bir shell daha başlattık, yeni açtığımız shell’de yeni sunucu adımız geçerli oldu. Açıkçası bu bilginin işe yaradığı ve benim bildiğim tek durum, uzaktaki farklı bir sunucuya syslog loglarını gönderdiğimizde farklı sunuculardan gelen logların ayırt edilebilmesi için farklı sunuculara farklı adlar verilmesi diyebilirim.
<<Önceki Bölüm