# SNMP
Basit Ağ Yönetim Protokolü, (İngilizce: Simple Network Management Protocol) bilgisayar ağları büyüdükçe bu ağlar üzerindeki birimleri denetlemek amacıyla tasarlanmıştır. Cihaz üzerindeki sıcaklıktan, cihaza bağlı kullanıcılara, internet bağlantı hızından sistem çalışma süresine kadar çeşitli bilgiler SNMP'de tanımlanmış ağaç yapısı içinde tutulurlar.
SNMP, ağ cihazlarında yönetimsel bilgi alışverişinin sağlanması için oluşturulmuş bir uygulama katmanı protokolüdür. TCP/IP protokolünün bir parçası olan SNMP; ağ yöneticilerinin ağ performansını arttırması, ağ problemlerini bulup çözmesi ve ağlardaki genişleme için planlama yapabilmesine olanak sağlar. Günümüzde kullanımda olan 3 tane SNMP sürümü mevcuttur. 3. sürüm SNMP'ye pek çok güvenlik özelliği getirmiştir.


## SNMP’yi oluşturan bileşenler.
SNMP'nin tipik kullanımlarında, ağdaki bir grup ana bilgisayar veya cihazı izleme veya yönetme görevi olan bir veya daha fazla yönetici adı verilen yönetici bilgisayarları bulunur. Her yönetilen sistem, yöneticiye SNMP aracılığıyla bilgi raporlayan bir yazılım bileşeni olan bir ajanı yürütür.
SNMP tarafından yönetilen bir ağ, üç temel bileşenden oluşur:
  - Yönetilen cihazlar
  - Ajan - yönetilen cihazlarda çalışan yazılım
  - Ağ yönetim istasyonu (NMS) - yöneticide çalışan yazılım
Yönetilen cihaz, düğüm özgü bilgilere tek yönlü (yalnızca okuma) veya iki yönlü (okuma ve yazma) erişim sağlayan bir SNMP arabirimini uygulayan bir ağ düğümüdür. Yönetilen cihazlar, NMS'lerle düğüm özgü bilgileri takas ederler. Ağ elemanları olarak da adlandırılan yönetilen cihazlar, yönlendiriciler, erişim sunucuları, anahtarlar, kablo modemleri, köprüler, hub'lar, IP telefonları, IP video kameraları, bilgisayar ana bilgisayarları ve yazıcılardan herhangi bir cihaz olabilir.
Bir ajan, yönetilen bir cihazda yer alan bir ağ yönetimi yazılım modülüdür. Bir ajan, yönetim bilgilerinin yerel bilgisine sahiptir ve bu bilgileri SNMP'ye özgü bir forma çevirir.
Bir ağ yönetim istasyonu, yönetilen cihazları izleyen ve kontrol eden uygulamaları yürütür. NMS'ler, ağ yönetimi için gereken işlem ve bellek kaynaklarının çoğunu sağlar. Yönetilen bir ağda bir veya daha fazla NMS olabilir.


## SNMP yönetim bilgi birimleri (MIB).
MIB'ler hiyerarşik bir yapıda kayıtlı tutulan bilgi koleksiyonudur. SNMP'de belirli bir değişkenin değerine ulaşmak için evrensel olarak belirlenmiş bu koleksiyonun ilgili birimi kullanılır. Örneğin bir cihazın üreticisi tarafından atanan cihaz açıklaması için 1.3.6.1.2.1.2 birimindeki bilgiye ulaşmak gerekir. Ağaç yapısında bu rakamların karşılığı "iso.identified-organization.dod.internet.mgmt.mib-2.description" değerine karşılık gelmektedir.


## SNMP'nin kullanımı.
SNMP istek gönderme ve cevap bekleme ile çalışan bir protokoldür. Ağ yönetim sistemi uygulaması ajan uygulama çalıştıran cihaza ihtiyaç duyduğu bilginin isteğini gönderir ve isteği alan cihaz yönetim uygulamasına ilgili değeri döndürür. Burada UDP ve IP gibi geçmişten günümüze sıklıkla kullanılan iletişim protokollerinden birisi kullanılabilir. SNMP'de yönetim ve izleme SNMPv1 adı verilen ilk sürümünde sadece 4 çeşit işlemle gerçekleştirilir:
  - GET: Yönetim sistemi tarafından yönetilen birimdeki bir veya daha fazla bilgi birimindeki değeri elde etmek için gönderilen istek komutudur.
  - GETNEXT: Yönetim sisteminden bir bilgi tablosundaki sonraki değeri okumak için gönderilen istek komutudur.
  - SET: Yönetim sisteminin yönettiği cihaz üzerinde bir değeri değiştirmek için kullandığı komuttur.
  - TRAP: Üzerinde ajan uygulama çalışan cihazda belirli özel durumlar oluştuğunda bu durumu yönetim sistemine bildiren işlemdir. Diğer işlemlerden farklı olarak bu işlem için yönetim sisteminden herhangi bir istek gönderilmesi gerekmez.
SNMPv2 adı verilen ikinci sürüm ise ilk sürümün geliştirilmesi ile ortaya çıkarılmıştır. Örneğin iki yeni işlem ilave edilmiştir:
  - GETBULK: Büyük boyutlu bilgilerin verimli şekilde elde edilmesi için yönetim sistemi tarafından gönderilen istek. Bu sayede tablolardan aynı anda birkaç sütun almak mümkün olmuştur.
  - INFORM: Bir yönetim sisteminin diğer bir yönetim sistemini bilgilendirmek amacıyla kullandığı işlem.
Bunun yanı sıra MIB'ler için kullanılan bilgi saklama değişkenlerinin kapasitesi arttırılmıştır. Örneğin 32 bitlik sayaçların yanı sıra 64 bitlik sayaçlar kullanılmaya başlanmıştır. Her ne kadar bir geliştirilme ile ortaya çıkarılsa da bu iki sürüm birbiriyle uyumlu değildir. Ancak her iki sürümü destekleyen sistemler de mevcuttur.
RESPONSE: Get komutu ile istenen verileri içeren bir yanıt gönderir.


## Protokol sürümleri.
Uygulamada, SNMP uygulamaları genellikle birden fazla sürümü desteklerler: tipik olarak SNMPv1, SNMPv2c ve SNMPv3 olmak üzere 3 tanedir.


### SNMPv1.
SNMP'nin ilk uygulaması olan SNMP sürüm 1 (SNMPv1), SNMP protokolünün tasarımı 1980'lerde bir grup işbirlikçi tarafından yapılmıştır. Resmi olarak desteklenen OSI/IETF/NSF (Ulusal Bilim Vakfı) çabası (HEMS/CMIS/CMIP) o dönemin bilgi işlem platformlarında uygulanamaz olduğu kadar potansiyel olarak işlevsiz olarak da görülmüştü. SNMP, internetin büyük ölçekli dağıtımı ve ticarileştirilmesine yönelik atılan adımlar için geçici bir protokol olarak kabul edildi.
SNMP'nin ilk İstek için Yorumlar (RFC'ler), şimdi SNMPv1 olarak bilinen, 1988'de ortaya çıktı:
   - YÖNLENDİRME - TCP/IP tabanlı internetlerin yönetim bilgisi yapısı ve tanımlaması
   - YÖNLENDİRME - TCP/IP-tabanlı internetlerin ağ yönetimi için yönetim bilgi tabanı
   - YÖNLENDİRME - Basit bir ağ yönetimi protokolü
1990 yılında, bu belgelerin yerini şunlar aldı:
   - YÖNLENDİRME - TCP/IP tabanlı internetler için yönetim bilgilerinin yapısı ve tanımlanması
   - YÖNLENDİRME - TCP/IP-tabanlı internetlerin ağ yönetimi için yönetim bilgi tabanı ()
   - YÖNLENDİRME - Basit bir ağ yönetimi protokolü
1991 yılında, #YÖNLENDİRME (MIB-1) daha sık kullanılan ile değiştirilmiştir:
   - YÖNLENDİRME - TCP/IP-tabanlı internetlerin ağ yönetimi için yönetim bilgi tabanının (MIB-2) 2. sürümü
SNMPv1, User Datagram Protocol (UDP), OSI Connectionless-mode Network Service (CLNS), AppleTalk Datagram Delivery Protocol (DDP) ve Novell Internetwork Packet Exchange (IPX) gibi taşıma katmanı protokolleri tarafından taşınabilir.
Sürüm 1, zayıf güvenliği nedeniyle eleştirildi. Spesifikasyon, aslında, özel kimlik doğrulamanın kullanılmasına izin verir, ancak yaygın olarak kullanılan uygulamalar, "yalnızca tüm SNMP mesajlarını gerçek SNMP mesajları olarak tanımlayan önemsiz bir kimlik doğrulama hizmetini destekler." Bu nedenle, mesajların güvenliği, mesajların gönderildiği kanalların güvenliğine bağlıdır. Örneğin, bir kuruluş, kendi iç ağının, SNMP mesajları için hiçbir şifreleme gerekmeyecek kadar güvenli olduğunu düşünebilir. Bu gibi durumlarda, açık metin olarak iletilen "topluluk adı", orijinal spesifikasyona rağmen fiili bir şifre olarak görülme eğilimindedir.


### SNMPv2c.
 - YÖNLENDİRME ve  YÖNLENDİRME tarafından tanımlanan SNMPv2, sürüm 1'i gözden geçirir ve performans, güvenlik ve yönetici-yönetici iletişimi alanlarında geliştirmeler içerir. Tek bir istekte büyük miktarda yönetim verisi almak için iteratif GetNextRequests'a alternatif olarak GetBulkRequest tanıtıldı. SNMPv2'de tanıtılan yeni parti tabanlı güvenlik sistemi, birçok kişi tarafından aşırı karmaşık olarak görüldüğü için yaygın olarak benimsenmedi. Bu SNMP sürümü, Önerilen Standart olgunluk seviyesine ulaştı, ancak daha sonraki sürümler tarafından kullanılmayacak şekilde eski olarak kabul edildi.
Topluluk Tabanlı Basit Ağ Yönetim Protokolü sürüm 2 veya SNMPv2c, #YÖNLENDİRME - #YÖNLENDİRME 'de tanımlanmıştır. SNMPv2c, tartışmalı yeni SNMP v2 güvenlik modeli olmadan SNMPv2'yi içerir ve yerine SNMPv1'in basit topluluk tabanlı güvenlik şemasını kullanır. Bu sürüm, IETF'nin Taslak Standart olgunluk seviyesini karşılayan nispeten az sayıda standarttan biridir ve yaygın olarak SNMPv2 standardı olarak kabul edilir. Daha sonra SNMPv3'ün bir parçası olarak yeniden belirtildi.
Kullanıcı Tabanlı Basit Ağ Yönetim Protokolü sürüm 2 veya SNMPv2u, #YÖNLENDİRME - #YÖNLENDİRME 'da tanımlanmıştır. Bu, SNMPv1'den daha büyük bir güvenlik sağlamaya çalışan, ancak SNMPv2'nin yüksek karmaşıklığını ortaya çıkarmadan bir uzlaşmadır. Bu varyant, SNMP v2 * olarak ticarileştirildi ve mekanizma nihayetinde SNMP v3'teki iki güvenlik çerçevesinden biri olarak benimsendi.


### SNMPv3.
SNMPv3, şifreli güvenliğin eklenmesi dışında, protokolde herhangi bir değişiklik yapmaz; ancak yeni metinsel kurallar, kavramlar ve terimler nedeniyle çok farklı görünür. En dikkat çekici değişiklik, SNMP'nin güvenli bir sürümünü tanımlamak için, SNMP'ye güvenlik ve uzaktan yapılandırma geliştirmeleri ekleyerek gerçekleştirildi. Güvenlik yönü, gizlilik için hem güçlü kimlik doğrulama hem de veri şifrelemesi sunarak ele alınmıştır. Yönetim yönü için SNMPv3, bildirim kaynakları ve proxy yönlendiricileri olmak üzere iki bölüme odaklanmaktadır. Değişiklikler ayrıca, SNMP varlıklarının uzaktan yapılandırması ve yönetimi ile ilgili konuların yanı sıra, büyük ölçekli dağıtım, hesaplamalar ve hata yönetimi ile ilgili sorunları ele almayı kolaylaştırmaktadır.
Dahil edilen özellikler ve geliştirmeler:
  - Bilinen SNMP varlıkları arasında sadece iletişimi kolaylaştırmak için SNMP varlıklarının tanımlanması - Her SNMP varlığı SNMPEngineID adı verilen bir tanımlayıcıya sahiptir ve SNMP iletişimi, bir SNMP varlığının eşinin kimliğini bildiği durumlarda mümkündür. Ancak, Trap'ler ve Bildirimler bu kuralın istisnasıdır.
  - Güvenlik modellerini destekleme - Bir güvenlik modeli, bir yönetimsel alan veya bir intranet içindeki güvenlik politikasını tanımlayabilir. SNMPv3, kullanıcı tabanlı bir güvenlik modeli (USM) için özellikleri içerir.
  - Güvenlik hedeflerinin tanımlanması, mesaj doğrulama hizmetinin hedeflerinin aşağıdaki koruma amaçlarını içerdiği şekildedir:
   - Bilginin Değiştirilmesi - Yetkili bir anahtar tarafından oluşturulan iletimdeki mesajların yetkisiz SNMP birimleri tarafından değiştirilmesine karşı koruma.
   - Masquerade, bazı yetkilere sahip olmayan bir ilke tarafından yetkilendirilmemiş yönetim işlemlerine karşı koruma sağlamak için uygun yetkilere sahip başka bir ilkenin kimliğini üstlenme işlemidir.
   - Mesaj akışı değiştirme, yetkisiz yönetim işlemlerini etkilemek için kötü niyetli olarak yeniden sıralanan, geciktirilen veya yeniden oynatılan mesajlara karşı koruma sağlar.
   - Açıklama, SNMP motorları arasındaki değişimleri gizlice dinlemeye karşı koruma sağlar.
  - USM Spesifikasyonu - USM, aşağıdaki mevcut iletişim mekanizmalarının genel tanımından oluşur:
   - Kimlik doğrulama ve gizlilik olmadan iletişim (NoAuthNoPriv).
   - Kimlik doğrulamalı ve özel iletişim olmadan iletişim (AuthNoPriv).
   - Kimlik doğrulama iletişimi ve gizlilik (AuthPriv).
  - Farklı kimlik doğrulama ve gizlilik protokollerinin tanımı - USM'de MD5, SHA ve HMAC-SHA-2 kimlik doğrulama protokolleri ve CBC_DES ve CFB_AES_128 gizlilik protokolleri desteklenmektedir.
  - Keşif prosedürünün tanımı - Belirli bir taşıma adresi ve taşıma uç nokta adresi için bir SNMP varlığının SNMPEngineID'sini bulmak için yapılan işlemlerdir.
  - Zaman senkronizasyon prosedürünün tanımı - SNMP varlıkları arasında kimlik doğrulanmış iletişimi kolaylaştırmak için yapılan işlemlerdir.
  - SNMP çerçeve MIB'inin tanımı - SNMP varlığının uzaktan yapılandırması ve yönetimi için kolaylık sağlamak için yapılan işlemlerdir.
  - USM MIB'lerinin tanımı - Güvenlik modülünün uzaktan yapılandırması ve yönetimi için kolaylık sağlamak için yapılan işlemlerdir.
  - View-Based Access Control Model (VACM) MIB'lerinin tanımı - Erişim kontrol modülünün uzaktan yapılandırması ve yönetimi için kolaylık sağlamak için yapılan işlemlerdir.
SNMP'nin en büyük zayıflıklarından biri güvenlik, özellikle SNMP Sürümleri 1 ve 2'de kimlik doğrulama, yönetici ve ajan arasında açık metin olarak gönderilen bir paroladan (topluluk dizisi) ibarettir. Her SNMPv3 mesajı, oktet dizesi olarak kodlanan güvenlik parametreleri içerir. Bu güvenlik parametrelerinin anlamı, kullanılan güvenlik modeline bağlıdır. v3'teki güvenlik yaklaşımı aşağıdaki hedefleri hedefler:
  - Gizlilik - Yetkisiz bir kaynak tarafından gözetlemeyi önlemek için paketlerin şifrelenmesi.
  - Bütünlük - Aktarım sırasında bir paketin değiştirilmediğinden emin olmak için mesaj bütünlüğü, isteğe bağlı bir paket tekrar koruma mekanizması içerir.
  - Kimlik doğrulama - Mesajın geçerli bir kaynaktan geldiğini doğrulamak için yapılır.
v3 ayrıca, daha sonra SNMPv3'ün SSH üzerinden ve SNMPv3'ün TLS ve DTLS üzerinden desteklenmesini sağlayan bir taşıma güvenliği modeli (TSM) tarafından takip edilen USM ve VACM'yi tanımlar.
  - Kullanıcı Tabanlı Güvenlik Modeli (USM), kimlik doğrulama ve gizlilik (şifreleme) işlevlerini sağlar ve mesaj düzeyinde çalışır.
  - Görünüm Tabanlı Erişim Kontrol Modeli (VACM), belirli bir MIB nesnesine erişime izin verilip verilmeyeceğini belirler ve belirli işlevleri gerçekleştirmek için PDU seviyesinde çalışır.
  - Taşıma Güvenlik Modeli (TSM), mesajların harici güvenlik kanalları üzerinden kimlik doğrulama ve şifreleme yöntemi sağlar. TSM özelliklerini kullanan SSH ve TLS/DTLS adlı iki taşıma protokolü tanımlanmıştır.
2004 yılı itibarıyla, IETF, #YÖNLENDİRME - #YÖNLENDİRME tarafından tanımlandığı şekliyle (aynı zamanda STD0062 olarak da bilinen) Basit Ağ Yönetim Protokolü sürüm 3'ü, mevcut standart sürüm olarak tanımaktadır. IETF, SNMPv3'ü tam bir İnternet standardı olarak belirlemiştir, RFC için en yüksek olgunluk seviyesidir. Daha önceki sürümleri, çeşitli şekillerde "Tarihi" veya "Eskimiş" olarak belirleyerek, eskimiş olarak kabul etmektedir.


## Linux işletim sisteminde SNMP sürümlerini etkinleştirme.
Turbonomic, Guest Processes'i bulmak için SNMP'nin etkinleştirmesi ve yapılandırılması gerekir. Bu adımlar işletim sürümleri arasında farklılık gösterebilir. Genel adımlar şu şekildedir;


### SNMPv2'yi etkinleştirmek.
1.Adım: Linux dağıtımınız ve sürümünüz için uygun SNMPv2c sunucu paketini edinin ve kurun. Çoğu paket yöneticisinde net-snmp şeklinde adlandırılır. Eğer paket içerisinde net-snmp-utils varsa bunu da kurun.
2.Adım: SNMP'yi yapılandırmak için /etc/snmp/snmpd.conf ve doğrulamak için snmp-conf -i komutu çalıştırılarak SNMPv2c etkinleştirilir ve ardından salt okunur bir topluluk adı ayarlanır. Bu topluluk adı tarafından sanal makinedeki SNMP aracıyla iletişim kurmak için kullanılır. Not:Seçeceğiniz topluluk adı sistemdeki tüm OID'lere en azından salt okunur erişime sahip olmalıdır.
3.Adım: Arka plan programını genel bir arabirimde dinleyecek şekilde yapılanmalıdır. Varsayılan kurumların çoğu yalnızca şu adresi tanır: 127.0.0.1
4.Adım: SNMP kurulumu doğrulanması gerekir.Topluluk dizesini ve IP adresini değiştirerek uzak bir makineden aşağıdaki komutu kullanarak SNMP kurulumunuzun başarılı olduğunu doğrulayın:
snmpwalk -Os -v 2c -c COMMUNITY_STRING IP_ADDRESS iso.3.6.1.2.1.1.1
Başarılı olursa, komut makinenin çekirdek sürümünü döndürecektir.


### SNMPv3'ü etkinleştirmek.
1.Adım: Linux dağıtımınız ve sürümünüz için uygun SNMPv2c sunucu paketini edinin ve kurun. Aynı şekilde SNMPv2c sürümünde olduğu gibi genel olarak çoğu paket yöneticisinde net-snmp ile adlandırılır. Aşağıdaki 5. adımda yapılandırmanızı doğrulamak için paketi Turbonomicnet-snmp-utils VM'ye de kurmalısınız.
2.Adım: SNMP hizmetini durdurun.
3.Adım: SNMPv3 kullanıcısını şu komutla oluşturun ;net-snmp-config --create-snmpv3-user [-ro] [-A authpass] [-X privpass] [-a MD5|SHA] [-x DES|AES] [username]
Örnek komut:
i. net-snmp-create-v3-user -ro -A snmpv3authPass -a SHA -X snmpv3encPass -x AES snmpv3user
Aşağıdaki koda benzer bir çıktıyla sonuçlanır:
adding the following line to /var/lib/net-snmp/snmpd.conf:
createUser snmpv3user SHA "snmpv3authPass" AES snmpv3encPass adding the following line to /etc/snmp/snmpd.conf:
rouser snmpv3user
4.Adım: Kurulumunuzu doğrulayın; Yapılandırmayı doğrulamak için Turbonomic VM üzerinde aşağıdaki komutu yürütebilirsiniz:
snmpwalk -Os -v 2c -c COMMUNITY_STRING IP_ADDRESS iso.3.6.1.2.1.1.1


### SNMP'nin uygulama alanları.
SNMP büyük ve uzaktan yönetilme zorunluluğu doğan ağ cihazlarının tek bir merkezden gözlenmesi ve ayarlanmasına olanak sağlar. Sunucular, routerlar, modemler ve kişisel bilgisayarlar gibi ağı oluşturan tüm birimlerde birer SNMP ajanı bulunabilir. Bunlar Ağ Yönetim Sisteminin çalıştığı birime istek üzerine çalıştırdıkları hizmetlerle ilgili bilgileri sağlayabilecekleri gibi oluşan herhangi bir acil durumu da bu sisteme bildirip sorundan en hızlı şekilde haberdar edilmesini sağlayabilirler. Güvenlik açıklarından dolayı güvenliği sağlanmamış ağlarda kullanımı hâlâ bir tehdit olduğundan SNMP kişisel ağlarda pek fazla uygulama bulamamıştır. Her ne kadar üçüncü sürümde güvenliği sağlayıcı bazı önlemler alınmış olsa bile kullanımı artmamıştır.