28 Haziran 2012 Perşembe

NTP (Network Time Protocol)



NTP (Network Time Protocol) en eski Internet protokollerinden biridir. David Mills tarafından Delaware Üniversitesi'nde geliştirilmiştir. Benzer protokollerde olduğu gibi NTP de milisaniye bazında bilgisayarların saatlerini senkronize etmek için UTC (Coordinated Universal Time) kullanır ve UDP 123.porttan çalışır.
    
NTP Neden Bu Kadar Önemli ??

Cisco cihazların dahili bir saat kaynakları olmadığı için ve cihaz açılıp kapandığında üzerindeki saat varsayılan zaman değerine döndüğü için cihaz üzerindeki zaman bazlı yazılımlar çalışamaz hale gelir. Bu yüzden de sadece Cisco cihazlar değil hemen hemen bütün network cihazları zaman kaynağı olarak harici bir kaynağı NTP protokolü üzerinden kullanırlar.
Cisco routerlar için, zaman ayarının doğru olması çok önemlidir çünkü, üzerinde çok çeşitli servisler çalışır. Örneğin, log servisi her logun tarih ve saatini gösterir ki bu da troubleshoot için oldukça kritik bir önem sağlar.
Bir diğer örnek, koordineli çalışan  dağıtık prosedürler için geçerlidir. Bu prosedürlerin doğru sırada çalışması gerekir. Yine ağ üzerinde koordineli çalışan güvenlik mekanizmaları için söyleyebiliriz ya da birçok bilgisayar tarafından senkronize yapılan dosya sistem güncellemelerini.
Hava trafik sistemleri için de oldukça önem arz eden zaman senkronizasyonu NTP ile sağlanır.

 

İşletim Sistemlerine Göre NTP 

Unix

Modern Unix Sistemlerde NTP istemcisi kernel alanında sürekli olarak çalışan bir daemon'dır. NTP ayarları dağıtıma bağlı olarak ya  "/etc/ntp.conf"  ya da "/etc/xntp.conf" dosyasından yapılır.
Çoğu ntp.conf dosyasında iki sunucu ismi mevcuttur. Birisi, saat ayarının yapılması istenen sunucunun adı ve diğeri de sahte bir IP adresidir. Sahte IP adresi ağ problemleri olması durumunda veya NTP sunucusunun kapalı olması/çökmesi durumunda kullanılır. Sistemdeki NTP uygulaması, uzak NTP sunucusu ayağa kalkınca, sistem saatini tekrar ona göre ayarlayacaktır. Bu iki sunucudan birincisi asıl sunucu olarak işlem yapar, ikincisi ise yedek amaçlıdır. Ayrıca bu hedef dosyanın yeri de belirtilmelidir. NTP zamanla, sistem saatindeki hata oranını "öğrenecek" ve kendini buna göre ayarlayacaktır.

NTP konfigürasyon dosyası /etc/ntp.conf, xntpd “daemon” ının başlangıçta kullandığı şu bilgileri içerir:
  • Olası senkronizasyon sunucularının listesi
  • Hangi kriterlere göre senkronizasyon sunucunun seçileceği 
  • Sunucunun ana makineye bağlanırken içerdiği kısıtlamalar
  • NTP paketlerinin ağda yayınlanıp yayınlanmayacağı
  • Broadcast (tüme gönderim) NTP paketlerinin dinlenip dinlenmeyeceği
  • Multicast (çoğa gönderim) NTP paketlerinin dinlenip dinlenmeyeceği
  • Driftfile dosyasının yeri
  • NTP bağlantılarının görüntülenip görüntülenmeyeceği
  • Ana makineye konfigürasyon yenileme izninin verilip verilmeyeceği
Konfigürasyon dosyası istenilen formatta yazılabilir. # ile başlayan satırlar yorum satırlarıdır. İstemci modunda sunucu diğer sunuculara o anki zamanı almak için kontrol eder. Tüm sunucular kontrol edildikten sonra ana makine hangi sunucuya senkronize edileceğini seçer. Sunucuyu istemci modda yapılandırmak için NTP konfigürasyonunda kontrol edilecek sunucuların adının ve ip adresinin bulunduğu bir sunucu cümlesi olmalıdır.  

Microsoft Windows

Microsoft Windows NT 4.0, NTP ile birlikte gelmemişti. Fakat Windows 2000 ve Windows XP 'den itibaren bütün Windows versiyonları, bilgisayar saatini NTP sunucu ile senkronize eden  Windows Time Service'i içermektedir.

W32Time Servisi uygulamaların ihtiyacını karşılayan tam donanımlı bir NTP çözümü değildir.
Esas olarak şunları üstlenir:

  • Kerberos versiyon 5 kimlik kanıtlama protokolünün çalışmasını sağlamak.
  • İstemci bilgisayarlar için gevşek senkronizasyon süresi sağlamak.

NTP Clock Strata

NTP, saat kaynaklarının hiyerarşik, yarı katmanlı sistem katmanlarını kullanır. Bu hiyerarşinin her katmanı "stratum" olarak adlandırılır ve 0 'dan başlayarak katman numarası atanır.
Stratum seviyesi refereans saate olan uzaklığı tanımlar. Stratum bir kalite veya güvenilirlik göstergesi değildir.  Stratum ifadesinin  burda kullandığımız şekli telekomünikasyon sistemlerinde kullanılan clock strata kavramından farklıdır.

Stratum 0
Bu cihazlar atomik saatler (caesium gibi), GPS saatler yada diğer radio saatlerdir ve genelde networke bağlı değildirler, local olarak bir bilgisayara bağlıdırlar.
Stratum 1
Bunlar Stratum 0 cihazlara bağlı bilgisayarlardır. Normalde NTP üzerinden Stratum 2 sunuculardan zamanlama talebinde bulunan sunucular gibi hareket ederler.

Stratum 2

Bunlar Stratum 1 sunuculara NTP isteği gönderen bilgisayarlardır. Stratum 2 bilgisayar, birkaç tane Stratum 1 sunucuya referens eder ve en iyi data örneklerini toplamak için NTP algoritmasını kullanır ve bu esnada da yanlış ise herhangi bir Stratum 1 sunucuyu drop eder. Stratum 2 bilgisayarlar eşdüzey gruptaki bütün bilgisayarlar için daha kararlı bir saat ayarı sağlamak için diğer Stratum 2 bilgisarlarla eşleşir.

Stratum 3

Bu bilgisayarlar tam olarak Stratum 2 gibi data örneklemesi ve eşleşmesindeki NTP fonksiyonlarının aynısını kullanır.
Hangi NTP versiyonunun kullanıldığına bağlı olarak, NTP 256 strataya kadar destekler fakat bunlardan sadece ilk 16 tanesi kullanılır ve Stratum 16 daki herhangi bir cihaz senkronize olarak kabul edilmez.

Cisco Router'da NTP Konfigürasyonu

Buradaki örneklerde bir Cisco router'ın yazılım saatini NTP gibi harici bir kaynaktan senkronize etmesini ve bu router'ınızın dahili newtork cihazlarınız için bir NTP sunucu gibi nasıl davranacağını ele alacağız.


Başlangıç olarak NTP güncellemelerini ve senkronizasyonu harici bir public NTP sunucudan sağlayan bir router konfigüre edelim. Bu router'ın saati devamlı olarak senkronize olacak fakat bu router dahili hostlar için bir NTP sunucu görevi üstlenmeyecektir.

Router'ı ISP isim sunucusu sayesinde FQDN (fully qualified domanin name) adını çözmesi için konfigüre etmeliyiz:

R1(config)# ip nameserver 195.170.0.1  

Şimdi de Cisco router'ın güncellemeleri, public bir NTP sunucudan alması için ayarlamalıyız:  

R1(config)# ntp server 1.gr.pool.ntp.org 

Bu komutu uyguladığımız anda router, ip'ye ait FQDN adını çözecek ve senkronizasyona başlayacak.
Dolayısıyla artık router'ın doğru bir şekilde konfigüre edildiğini ve senkronizasyon beklediğini doğrulayabiliriz.

 R1# show ntp associations
   address             ref clock           st     when    poll    reach     delay      offset      disp
~195.97.91.2  131.188.3.221     2      30        64       1        0.000     -1539.9    7937.5
* sys.peer,  # selected, + candidate, - outlyer, x falseticker, ~ configured

R1# show ntp status
Clock is unsynchronised, stratum 16, no reference clock
nominal freq is 250.0000 Hz, actual freq is 250.0006 Hz, precision is 2**24
reference time is 00000000.00000000 (02:00:00.000 Greece Mon Jan 1 1900)
clock offset is 0.0000 msec, root delay is 0.00 msec
root dispersion is 0.00 msec, peer dispersion is 0.00 msec
loopfilter state is 'FSET' (Drift set from file), drift is -0.000002405 s/s
system poll interval is 64, never updated.



'show ntp associations' komutu sistemin, belirttiğimiz NTP sunucu ile senkronize olacak şekilde konfigüre edildiğini ama henüz senkronize olmadığını gösteriyor. Senkronize olduğunda ise, tilda (~) sembolünün önünde yıldız (*)sembolünü göreceğiz.

'ref. clock' sütunu bizim public sunucumuzun (1.gr.pool.ntp.org) senkronize olacağı NTP sunucunun IP adresidir.
'st' sütunu ise Stratum seviyesini göstermektedir. Burada değer 2'dir. Genel kural olarak, her zaman daha düşük Stratum seviyesine sahip sunucu ile senkronizasyon sağlanmalıdır.
Diğer bir deyişle Stratum seviyesi   daha    düşük    olan      bir      cihaz     daha     yüksek     olan     bir    cihaza      göre      clock    durumunu   ayarlar.

  'show ntp status'  komutu henüz NTP sunucuya senkronize olmadığımızı
"clock is unsynchronised" ifadesiyle belirtir ve ayrıca mevcut sistem zamanını bize gösterir : 1st of Jan. 1900.

Birkaç dakika sonra, komut satırında aynı komutu tekrarladığımızda şu sonucu alırız:

R1# show ntp associations  
          address               ref clock               st        when      poll     reach     delay       offset       disp
*~195.97.91.220      131.188.3.221          2           19         64         377      0.000    -59.272      5.317
* sys.peer, # selected, + candidate, - outlyer, x falseticker, ~ configured


R1# show ntp status
Clock is synchronised, stratum 3, reference is 212.251.14.84
nominal freq is 250.0000 Hz, actual freq is 250.0007 Hz, precision is 2**24
reference time is CD94CFEB.901B3679 (01:17:15.562 Athens Sun Apr 19 2009)
clock offset is -0.0592 msec, root delay is 0.09 msec
root dispersion is 0.12 msec, peer dispersion is 0.00 msec
loopfilter state is 'CTRL' (Normal Controlled Loop), drift is -0.000003099 s/s
system poll interval is 64, last update was 476 sec ago.

Yeni çıktıya bakarsak, Cisco router'ın public NTP sunucu ile senkronize olduğunu  (*) görebiliriz. Çıktıda da görüldüğü gibi  (poll sütunu) her 64 saniyede bir public NTP sunucu poll edilecektir.

'show ntp status' komutu senkronizasyonu ayrıca doğrulaycaktır. Burada gördüğümüz gibi router Stratum seviyesini 3'e ayarlamıştır. Burada referansın Stratum 2 olması beklenir.
Şimdi artık saat doğru bir şekilde karşımıza çıkar : (01:17:15.562 Athens Sun Apr 19 2009).

Software ve Hardware Clock Senkronizasyonu 

Bir Cisco routerda software ve hardware saatleri farklı olabilir. 
Hardware clock (calendar) router kapatılsa yada reboot edilse bile sürekli çalışır. Software clock ise böyle durumlarda silinir.

Şimdi bunları birbiriyle nasıl senkronize edeceğimize bakalım. 
Aşağıdaki komutlar router'da iki saat arasındaki zaman farkını gösteriyor: 

R1# show clock 
01:51:31.532 Athens Sun Apr 19 2009

R1# show calendar
01:51:42 Athens Sun Apr 19 2009

Aradaki fark çok az olmasına, ağdaki senkronizasyonu olabildiğince  sağlamak istediğimiz durumlar olabilir.
Unutmamız gereken nokta 'show clock' komutu routerın software clock değerine referans ederken  'show calendar' komutu hardware clock değerine referans eder.

Bu iki saati senkronize edebilmek için yapmamız gereken;

R1# configure terminal
R1(config)# ntp update-calendar

'ntp update-calendar' komutu hardware saatin  sistemin software saatine senkronize olmasını sağlar.

Sistemimizi Nasıl Yetkili bir NTP Sunucu Yapabiliriz ?

Eğer sistemimizin yetkili bir NTP sunucu olmasını ve diğer dahili router'ların yada makinaların senkronizasyonunu sağlamasını istiyorsak şu komutu kullanmalıyız:
R1(config)# ntp master 

Router bu komutla  NTP sunucu gibi hareket eder ve dahili istemcilerin NTP taleplerine cevap verir.

 "show ntp associations" komutu ile router'ın saat senkronizasyonunu kendi üzerinden yaptığını görebiliriz.

R1# show ntp associations
address                ref clock           st.   when    poll    reach    delay    offset     disp
*~127.127.1.1      LOCL.               7      4        16      377     0.000    0.000     0.253
~195.97.91.220   131.188.3.221   2      64       64       1       0.000  -179.09    7937.5
* sys.peer, # selected, + candidate, - outlyer, x falseticker, ~ configured






18 Haziran 2012 Pazartesi

QoS Nedir?

QoS (Quality of Service)  hizmet kalitesi anlamına gelen bir kavram olmakla birlikte, networkte ses ve görüntü iletiminde önem kazanmıştır. Çünkü ses ve görüntü iletiminin gecikme ve paket kayıplarına tahammülü yoktur. Ses ve görüntü haricinde de  önem arz eden bir veri tipi iletimi yapan yerlerde de aynı konfigürasyon kullanılabilir.
QoS işleminin asıl amacı, mevcut bantgenişliğinin en verimli şekilde kullanılmasına imkan sağlamaktır.
Örnek olarak internet’e bir modem yada ethernet kartı ile bağlanırsınız. Eğer bandgenişliğini bir şekilde tamamen kullanıyorsanız o sırada gönderilmesi önemli olan bir e-postayı hattın dolu olmasından dolayı gönderemezsiniz.
Başka bir örnek olarak da  Voip destekli ağları verebiliriz. Böyle bir ağda IP telefon kullanarak görüşme yapan birisi, oluşan gecikmelerden ve paket kayıplarından dolayı sağlıklı bir görüşme yapamayacaktır.

Paket kayıpları kadar önemli olan bir diğer etken de gecikme (delay) dir. Karşıdan cevap beklersiniz, o anda onun bir şey söylemediğini düşünüp konuşmaya başlarsınız, tam o sırada karşıdakinin sesi gelir vs. Televizyon izlerken delay’in aslında ne kadar önemli olduğunu defalarca görmüşüzdür.
Voip ve e-posta trafiği gibi önceliğe sahip paketleri bir şekilde belirtip bunlarla alakalı bir paket  geldiğinde üstünlük durumuna göre paketlerin gönderilmesi gerekir.
Bunun için de QoS işlemleri kullanılır. 
Biraz da lag kavramından bahsedelim. Bir bilgisayarda baglandiginiz server ile aranizdaki gecikmeye "lag" denir. Farklı internet bağlantısını kullanan programların veya aynı donanımını kullanarak internet üzerinden veri transferi yapan çoklu kullanıcılı ortamların bant genişliği düşer ve bu veri gecikmesi lag oluşmasına sebep olur.
QoS destekli modemlerde, kullanıcıların öncelik tanıdığı port öncelikleriyle html ve voip kullanımı için bilgisayardan modeme 80. porttan gelecek istem talep paketlerinin diğer tüm portlardan öncelikli olması istenmektedir. Bu sayede QoS önceliği verilen portlardan veri hızlıca aktarılırken, verilmeyen portlarda öncelikli port seçimi sayesinde lag olur.


QoS u açıklayabilmek için öncesinde bazı terimlerden bahsetmemiz gerekiyor. Bunlar delay(gecikme),  jitter(seğirme),  bantgenişliği(bandwidth), packet loss(paket kaybı), throughput(veri hacmi) tur.


  • Delay: Delay çeşitli şekillerde karşımıza çıkabilir. Bir cihazın bir frame/paket’i alıp onu çıkışa yönlendirmesine kadar geçen süreye işlem gecikmesi (processing delay); bir frame/paket’in iki port arası iletimi arasında geçen süreye serileşme gecikmesi (serialization delay); yine bir paket/frame’in kaynağından derlendikten sonra çıkıp hedefte yorumlanmasına kadar geçen süreye noktalar arası gecikme(end-to-end delay) adı verilir.
  • Jitter: Paketlerin gecikme sürelerindeki varyasyondur. Aynı türden paket/frame’ lerin kaynak ile hedef arasındaki iletimi esnasında geçen süreler arası farklılığı ifade eder.
  • Throughput: Bir noktadan diğer bir noktaya ortam üzerinde sorunsuz iletilen verilerin oranıdır. Yani bandwith kullanım oranı da diyebiliriz.
  • Bandwidth: Bir kanal boyunca iletilebilecek maksimum veri miktarıdır ve bits/second, bps:bit-per-second cinsinden ölçülür.
  • Packet Loss: Veri iletim esnasında bazı paketlerin hedefe ulaşamamasıdır. Yanlış yönlendirme, iletim esnasında paketlerin zarar görmesi, girişim v.b. yollarla oluşabilir.

QoS servis hizmeti 3 'e ayrılır:


1.Best-effort delivery
2. Integrated Services model
3.Differentiated Services model
Birinci yöntem bir itfaiye aracının kendi siren ve korna sesiyle kendine öncelik sağlamasına benzer. Ancak ne kadar öncelikli olursa olsun araç trafik ışıklarına takılacak ve de trafiği karıştıracaktır. Aynen bunun gibi, paketler kendilerine has, ağ cihazlarından bağımsız, bir öncelik QoS bilgisi taşırlar.
İkinci yöntem ise itfaiye aracımızın yolunun bir polis tarafından açılması,  bir tıkanıklıkla karşılaşıldığında vinç gibi bir araçla tıkanıklığın giderilmesine benzer. Bu yöntem de çok sağlıklı değildir. Zira trafik ışıkları ve yolun yoğunluğu hala sıkıntı teşkil etmektedir.
Üçüncü yöntemdeyse  itfaiye aracımız yola çıkmadan önce trafiğin denetlenmesi, ona göre ayrı bir yolun veya varsa ayrı bir şeridin tahsis edilmesine benzer. Peki, ağımızda gönderdiğimiz paketlerin bir önceliğinin olduğunu ve yolun ona göre ayarlanması gerektiğini nasıl belirtiriz ya da bu bilgiler paketlere nasıl eklenir?
Bu bilgilerin paketlere eklenmesi OSI katmanının üst seviyelerinde çalışan cihazlar tarafından yapılır. Bizim burada ilgileneceğimiz cihazlar 4. katmanda çalışan üst seviye  yönelticiler yada üst seviye switchlerdir (multilayer switchler).

QoS servis bilgisi IP paketlerinin  başlık (header)  kısmında (4.katman bilgisi) veya vtp trunk portunda taşınan paketlerin ise user id (2.katman bilgisi) kısmında taşınır. IP paketlerinin header kısmında taşınanları IP precedence-tos-DSC olarak isimlendiririz. İkinci katman cihazlar arasında QoS servis bilgisinin user id kısmında taşınanları ise tos (type of service) olarak isimlendirilir.
           






14 Haziran 2012 Perşembe

Switchport Port-Security Nedir, Nasıl Yapılır ?

Elimizde bir Cisco Catalyst switchimiz var ve bunun güvenliğini sağlamak istiyorsak, yani başka birisinin cihazımıza yetkisiz olarak bir başka cihaz takmasını istemiyorsak port güvenliğini sağlamakla işe başlayabiliriz.
Port-security ile ikinci katman seviyesinde bir güvenlik sağlamış olacağız. Birinci katman güvenliğini, kullanmadığımız portları "shutdown" ederek zaten sağladığımızı varsayıyorum :)
Fakat mevcut durumda açık olan ve örneğin bir PC'nin kullanımında olan bir porta, başka bir PC takılmak istenirse oluşacak güvenlik zafiyetini engellemek için yapılacak olan switch konfigürasyonu şu şekildedir;

Switch# config terminal
Switch(config)# int FastEthernet0/22
Switch (config# switchport port-security violation restrict
Switch (config)# switchport port-security maximum 24
Switch (config)# switchport port-security mac-address sticky
Switch (config))# switchport port-security

Burada switchteki  bir porta port-security uyguladık. Ama bütün portlara da bunu uygulayabiliriz;

Switch# config terminal
Switch(config) interface range  FastEthernet 0/1-48
Switch (config-if-range)# switchport port-security violation restrict
Switch (config-if-range)# switchport port-security maximum 24
Switch (config-if-range)# switchport port-security mac-address sticky
Switch (config-if-range)# switchport port-security

Komutları biraz detaylandıracak olursak;

  • switchport port-security maximum: Bu komutu default olarak izin verilen MAC adres sayısındani ki bu bir tanedir, daha fazla sayıda MAC adresi tanımlamak için kullanırız. Örneğin switchimizin bir portuna 12 portlu bir hub taktığımızı düşünürsek burada belirtmemiz gereken sayı 12 olabilir. Port başına bu sayı maksimum 132 dir.
  • switchport port-security violation {shutdown | restrict | protect}: Bu komut, porttaki maksimum MAC adres sayısı aşıldığında swtiche ne yapması gerektiğini söyler. Default olarak "shutdown" dır. Restrict parametresiyle, port "alive" olacak  fakat güvenlik ihlali olduğunda SNMP trap göndererek (NMS sunucuya örneğin) ağ yöneticinizi uyaracaktır. Bir diğer parametre olan Protect parametresi ise, güvenli portlardan trafiğe izin verecek fakat diğer MAC adreslerinden gelen trafiği drop edecektir.
  • switchport port-security mac-address {MAC address}: Bu komutla portlar için manuel olarak MAC adresi tanımlıyoruz.
Switchte port-security ayarlarını yaptığınızda ve bu porttaki Ethernet trafiği başladığında,  switch cihazın MAC adresini kaydetecektir ve  portun güvenliğini sağlayacaktır. Switchteki port-security konfigürasyonunu görmek için show port-security address ve show port-security interface komutlarından yararlanırız.

Switch# show port-security

Secure Port    MaxSecureAddr     CurrentAddr    SecurityViolation  Security Action
(Count)         (Count)                      (Count)
--------------------------------------------------------------------------------------------------------
Fa0/1                       24                   1                       0                       Restrict
Fa0/2                       24                   1                       0                       Restrict
Fa0/3                       24                   3                       0                       Restrict
Fa0/4                       24                   1                       0                       Restrict
Fa0/5                       24                   2                       0                       Restrict
--------------------------------------------------------------------------------------------------------

Daha detaylı bilgiyi Cisco web sitesinden edinebilirsiniz:

http://www.cisco.com/en/US/docs/switches/lan/catalyst3560/software/release/12.2_46_se/command/reference/cli3.html#wp1948361