Büyük Resim
İstemciden uygulamaya isteğin yolculuğu
Last updated
Was this helpful?
İstemciden uygulamaya isteğin yolculuğu
Last updated
Was this helpful?
Şekil-1'deki bir ev ağında 1 adet PC (PC1), 1 adet laptop (PC2) ve 1 adet de modem olsun. Modemde PC'leri bağlmak için ethernet RJ-45 portları da olsun.
Ağa bağlı cihazlar, birbiriyle haberleşebilmesi için bir şekilde adrese ihtiyaç duyarlar. Bu adresler sayesinde birbirleriyle iletişim kurabilirler. İletişimin nasıl olduğuna başlamadan önce OSI ağ katmanından söz etmekte yarar var. OSI katmanı, aslında Recep İvedik filmindeki Photoshop'lı kıza layer layer çalış kızım denen olaya benziyor. Ağ da öyle, layer layer ya da katman katman çalışır. Katman katman olmasının nedeni; her katmanın birbirinden soyutlanmış ve bağımsız çalışması neden olarak gösterilebilir. OSI katmanı 7 katmandan oluşuyor.
Üstten alta OSI Katmanları:
Uygulama katmanı (Application layer)
Sunum katmanı (Presentation layer)
Oturum katmanı (Sesson layer)
Taşıma katmanı (Transport layer)
Ağ katmanı (Network layer)
Veri bağı katmanı (Data link layer)
Fiziksel katman (Physical layer)
Ağdaki PC1, PC2 veya dışardaki bir sunucu ile haberleşebilmesi için adrese ihtiyaç duyar. Bir ağa dahil olmak için gerekli minimum bilgi IP adresi, Subnet maskesi, ağ geçidi ve DNS adresi. Bu bilgileri ya PC1'de manuel girebiliriz ya da uygulama katmanı seviyesinde çalışan DHCP sunucuda talep edebiliriz. Modemler DHCP IP dağıtma servisini sunar. PC1 DHCP isteği yapar ve DHCP sunucu da PC1'e IP, Subnet maskesi, ağ geçidi ve DNS gibi temel bilgileri içeren paketi yollar. Artık PC1 10.0.0.5 IP'si ile ev ağında ulaşılabilirdir.
IP ile iletişim ağ katmanında yapılır. Daha altındaki veri bağı katmanında ise PC'lerin ev ağında birbirlerini bulmaları sağlanır. IP ile iletişim kuran PC'ler, ARP protokolü ile ağa birbirlerinin MAC adreslerini öğrenmek istediklerini duyururlar. Bu istekler detaylı olarak Wireshark uygulamasında görülebilir. Daha sonra PC'ler buldukları, daha doğrusu iletişim kurdukları uç noktaların (PC, modem,vb...) MAC adreslerini işletişim sistemlerinin ARP tablosuna kaydeder. ARP tabloları aşağıdaki komutla görülebilir:
PC1 IP ve subnet maskesi yanında ağ geçidi bilgisi de alır. Ağ geçidi, Tron Legacy ya da daha eski Tron filmindeki havaya giden veri şelalesine benzetilebilir. Yani dış dünyaya açılan kapı (gate). Ev ağının ağ adresi Şekil-1'deki gibi 10.0.0.0'dır. Subnet maskesi ağda kaç adet host (10.0.0.1-10.0.0.254) bulunanacağını gösteririr. 10.0.0.255 de yayın (broadcast) adresidir. 10.0.0.1 de modemin adresidir. Bu ağın içinde PC1 ve PC2 modeme gitme ihtiyacı duymaksızın birbirleriyle iletişim kurabilir. 10.0.0.0/24 ağı harici bir uçla haberleşme yapılacaksa o zaman ağ geçidi (modem, yönlendirici-router,....) cihazdan paketler geçecektir. Bunun ayrıca bir hesabı da vardır. Gidilecek IP ile kendi subnet mask adresi ikilik formda (binary) ve işlemine (AND) tabii tutulur. Çıkan sonuç bizim ağ adresi (10.0.0.0) ise aynı ağda; değilse ağ dışında sonucu çıkacaktır...
PC1'in DNS adresi 1.1.1.1 olsun. Ev ağındaki IP'ler özel (private) IP; ev ağı dışında Internet'teki IP'ler ise dış (public) IP'dir. PC1'in DNS istekleri ilk önce modeme, modemden de Internet'e taşınır. Kabaca giden paketlerde KAYNAK ADRESİ, KAYNAK PORTU, HEDEF ADRESİ ve HEDEF PORTU bilgisi mutlaka bulunur. Veri bağı katmanında örneğin MAC adresleri işlenirken; ağ katmanın IP adresleri girilir. Yine bunları Wireshark aracıyla görmek mümkündür. Private IP'ler modemden dışarı çıkamaz. NAT (networtk address translation) ile bu IP'ler, dış IP olarak çıkar Internet'e. Örneğin çıkış IP'mizi https://whatismyip.org gibi sitelerden ya da aşağıdaki komutla öğrenebiliriz:
curl çeşitli protolleri destekleyen sunucuya istek yollayan ya da sunucudan bir kaynak talep eden bir araçtır. man curl ile detaylara bakılabilir.
PC1 lkd.org.tr için bir DNS isteği yapmış olsun. Komut satırında örneğin,
komutu çalıştırılsın. Bu istek kabaca Şekil-1'deki mavi çizgideki yolu izleyecektir. Internet'te DNS sunuculara bu istek ulaşacaktır. lkd.org.tr. için DNS talebi ilk önce root yani kök DNS sunucuya gelir. Daha sonra tr alanının DNS sunucusa, daha sonra org.tr ve en sonunda lkd.org.tr'nin DNS sunucusuna kadar sanki ters çevrilmiş bir ağacın köklerinden aşağıya kadar sorgumuz gider. Bu sorgunun nerelerden geçtiğini görmek için aşağıdaki komut denenebilir:
PC1 bu DNS isteğini yaparken Şekil-1'deki gibi kaynak ip (modemin NAT adresi dedik), kaynak port, hedef ip ve hedef port bilgilerini gönderir. Kaynak port rastgele (örn. 32536) üretilir.
IP+Port'a terminolojide soket (SOCKET) adı verilir. Port'lara taşıma (transport) katmanında rastlarız. Her uygulama farklı portlar üzerinden çalışır. 0-1023 arası pek bilindik portlar aralığı (well-known ports) olarak belirtilmiştir. Bu aralıkta port-uygulama eşleşmeleri sabittir; ancak kendi sunucumuzda bu portları uygulama ayarlarından ya da işletim sistemi ayarlarından değiştirmek de mümkündür. Örneğin 53 no'lu portta DNS hizmeti/servisi çalışır. 80 no'lu portta ise HTTP web sunucu çalışır. 22 no'lu portta SSH uzaktan bağlantı servisi çalışır.
PC1'de örneğin hangi IP'nin hangi portuna bağlantı yapılıp yapılmadığı veya sunucuda bir servisin hangi portta çalıştığı bilgisi için aşağıdaki komut kullanılabilir:
netstat artık emekli oldu. Bunun yerine ss komutu da kullanılabilir. man ss
DNS sunucuya ilgili istek geldiğinde DNS sunucu kaynak ip, hedef ip bilgilerini tersine (flip) çevirerek gönderir.
Şimdi bu sefer PC1'deki bir kullanıcı tarayıcısını açıp adres çubuğuna http://lkd.org.tr yazmış olsun. Tarayıcı aslında otomatik tamamlama yapıp arka planda istek yapacaktır. Yukardaki DNS çözümlemeleri de yapılmış olsun. Tarayıcı bu isteği uygulama katmanında istek yapılan adrese gönderir. İsteğin yolu Şekil-1'deki sarı çizgi gibi olacaktır.
İstek FW'a aradaki yönlendiricilerden geçe geçe ulaşır. IP isteklerin hangi yönlendiriclerden geçtiğini görmek için aşağıdaki komut denenebilir:
Ağda TCP portlu servislere erişmeden önce sunucu ile istemci arasında çok özel bir bağ kurulur. Protokol tasarımcıları, iki uç noktanın arasındaki iletişimin güvenliği için 3-lü El Sıkışma (3-way handshake) denilen bir mekanizma geliştirmiş. X ile Y arasında iletişimin X ile Y arasında olup olmadığını ya da bir nevi authentication (kimliklendirme) mekanizması kurulmuş. Yine Wireshark ile 3-lü el sıkışma görülebilir. Bunun için TCP bayraklarından (flag) SYN ve ACK bayraklarının SYNC, SYN+ACK, ACK sırasında oluştuktan sonra 3-lü el sıkışma yapılmıştır denilebilir. Örneğin aşağıdaki komut çalıştırılıp Wireshark'da ip adresine göre filtreleme yapılıp bakıldığında sadece 3-lü el sıkışma yapıldığı Şekil-2'den görülebilir. Burada aşağıdaki komut girildiğinde nc prosesi üçlü el sıkışma yapar ve bekler.
nc komutu netcat olarak bilinen hem TCP hem de UDP bağlantısı yapabilen bir araçtır. Detaylar için man nc
Tabii her bağlantının bir zaman aşımı vardır. 3-lü el sıkışma sağlandıktan belli bir süre sonra karşılıklı olarak bağlantı kapatılır:
DMZ, dışarıya hizmet verilen sunucuların bulunduğu, iç Intranet ağından izole/ayrı sınır güvenlikli(permiter secure) ağ olarak tarif edilebilir. EĞer dışarıya hizmet verecek bir sunucumuz olmasaydı, böyle bir alana ihtiyacımız olmazdı.
DMZ, güvenlik amacıyla yapılır. Farklı yapılarda kurulabilir. Örneğin iki güvenlik duvarı arası veya bir güvenlik duvarının ayrı bir bacağına bağlı ağ olarak gerçekleştirilebilir. Şekil-1'de tek güvenlik duvarlı yapı çizilmiştir.
Şekil-1'deki DMZ alanında ters vekil sunucu ve dinamik önbellekleme sunucu olan Varnish uygulaması görülmekte. Tabii buraya konumlandırılan sunucu uygulamaları bunlarla sınırlı kalmayıp WAF gibi uygulama güvenlik duvarı cihazları da konabilir. Örneğin ModSecurity Apache lisanslı uygulama güvenlik duvarı katmanıdır. Ters vekil sunucu, çoğunlukla güvenlik amaçlı kurulur. Bu sunucuya arka plandaki uygulama sunucular, uygun protokollerle bağlantı ayarı yapılır. Bu sunucuya gelen istekler ayrıca işlenebilir de. Ters vekil sunucu olarak NGINX, Apache HTTPD, HAProxy, vb. kullanılabilir.
Intranet ağı, sadece kurum içi erişilmesi düşünülmüş özel ağdır. Intranet, basit olarak yerel alan ağı (LAN) cihazlarından oluşmaktadır. Örneğin, Şekil-1'deki ev ağı ev kullanıcısı için bir Intranet'tir denilebilir. Şekil-1'de iki adet PC, 1 adet modem ve bir adet de belki de Raspberry PI'ye kurulmuş bir DNS sunucu görülmektedir.