SNMP

Değerli arkadaşlar, merhaba! Bu yazımızda sizlere, SNMP protokolünden bahsedeceğiz.

Açılımı 'Simple Network Manager Protocol' yani 'Basit Ağ Yönetim Protokolü' şeklindedir. SNMP, bir ağdaki farklı cihazların birbirleriyle bilgi paylaşmasının bir yoludur. Ağdaki cihazlar farklı bile olsa ve farklı yazılımlar çalıştırsalar bile iletişim kurabilirler; bunu, SNMP sağlar. İsminden de anlayacağınız üzere SNMP olmadan ağ yönetim araçlarının cihazları tanımlaması, ağ performansını izlemesi, ağdaki değişiklikleri takip etmesi veya ağ cihazlarının durumunu gerçek zamanlı olarak belirlemesi mümkün olmazdı.

SNMP, TCP/IP protokolünün bir parçasıdır. SNMP ile ağ yöneticilerinin ağ performansını artırması, ağdaki problemleri bulup çözmesi ve ağlardaki genişleme için planlama yapabilmesine olanak sağlar; bir nevi kılavuzdur.

Kendisi mükemmel değildir; diğer tüm teknolojiler gibi dezavantajları vardır ve bu dezavantajlar, bazı SNMP sürümlerinde diğerlerinden daha belirgindir. Bunlara rağmen yukarıda da belirttiğimiz gibi SNMP, ağ yönetimi adına hayati bir öneme sahiptir ve ağdaki cihazları izlemek ve yönetmek için en iyi çözümlerden biridir. Ayrıca SNMP, UDP 161/162 portlarını kullanır.

Sürümlerden bahsettik ama bunu biraz daha açmamız gerekiyor. Çünkü farklı sürümlerde bulunan özellikler, özellikle güvenlik söz konusu olduğunda büyük ölçüde değişiklik gösterir.

  1. SNMPv1
    • SNMP'nin ilk sürümüdür ve bu sürümdeki güvenlik özellikleri/ önlemleri oldukça zayıftır; bir şifreleme algoritması yoktur. Mesela bu sürümde yöneticiler bilgi isterken şifreleme olmadan aracıların kimliğini doğrulayabilir. Bu, ağa erişimi olan herkesin ağ hakkındaki bilgileri ele geçirmek için 'sniffing - koklama' ve 'spoofing - yanıltma' (anlatacağız) yapabileceği anlamına gelir. Ayrıca bu, yetkisiz bir cihazın ağı kontrol ederken kolayca bir yönetici gibi davranabileceği yani yönetici özelliklerine erişebileceği anlamına gelir.
    • SNMPv1, yöneticilerin her zaman güncellemediği belirli varsayılan kimlik bilgilerin kullanır (örneğin modemdeki 'admin - admin' gibi). Bu da tahmin edebileceğiniz üzere yetkisiz tarafların ağ hakkındaki hassas bilgilere erişmesini kolaylaştırır.
  2. SNMPv2
    • SNMPv2, bazı güvenlik geliştirmeleri ile geldi fakat geldikten yaklaşık 5 sene sonra SNMP'nin en yeni ve en güvenli sürümü olan SNMPv3 geldi.
    • SNMPv2, hâlâ bazı kritik bilgileri düz metin olarak gönderdiği için güvenlik açısından pek de bir fark yaratamamıştır.
  3. SNMPv2c
    • En sondaki 'c' harfi İngilizce'deki 'community' kelimesinden gelir; anlamı da 'topluluk'tur. Bu sürüm, SNMPv1'in yönetim kısmının topluluk odaklı olması olarak özetlenebilir.
    • Aşağıda, komutları göreceksiniz. Oradaki 'Inform' komutu SNMPv2c ile birlikte gelmiştir. Bununla beraber geliştirilmiş 'SET' komutlarına ve hata işleme kabiliyetine sahiptir.
    • SNMPv2c, oldukça nadir görülen bir sürümdür; birçok yer hâlâ SNMPv1 kullanır.
    • SNMPv2c sürümünün, LAN'larda yani dahili ağlarda kullanılması daha uygun olacaktır çünkü basit kimlik doğrulama sistemi ve şifreleme eksikliği vardır.
  4. SNMPv3
    • SNMPv3, veri şifrelemeyi (encryption) mümkün kılar. Yöneticilerin, yöneticiler ve aracılar için ayrıntılı olarak farklı kimlik doğrulama (authentication) gereksinimleri belirlemesine olanak tanır. Bu, yetkisiz kimlik doğrulamasını önler ve isteğe bağlı olarak veri aktarımları için şifrelemeyi zorunlu kılmak için kullanılabilir. Burada, kimlik doğrulama için kullanılan şifreleme algoritmaları MD5 ve SHA'dır. Bunlar elbette gerekli ve güzel şeyler fakat SNMPv3'ün, bu özellikler yüzünden yapılandırılması zordur ve daha çok veri işlem kapasitesine ihtiyaç duyar. Bu konuda karşılaşabileceğiniz üç kavram vardır:
    • NoAuthNoPriv: Kimlik doğrulama ve gizlilik olmadan iletişim kurmayı ifade eder.
    • AuthNoPriv: Kimlik doğrulama vardır ama iletişim, gizlilik olmadan gerçekleşir.
    • AuthPriv: Burada hem kimlik doğrulama hem de gizlilik söz konusudur. Gizlilik için daha önce anlattığımız DES ve AES protokolleri kullanılabilir.

Yönetici olarak da bilinen sunucular, ağdaki cihazlar hakkında bilgi toplar ve bunları işler. İstemciler ise ağa bağlı herhangi bir cihaz veya cihaz bileşenidir. İstemci kavramı yalnızca bilgisayarları değil, switch'leri, telefonları, yazıcıları ve diğer cihazları da içerebilir. Bunları ve istemci - sunucu modelini zaten önceki bloglarımızdan biliyorsunuz. İşte, SNMP de istemci - sunucu (istek - yanıt) modeline dayalı basit bir mimariye sahiptir.

En yayın dört istek işlemi 'Get', 'GetNext', 'Set' ve 'Trap' olarak geçer. PDU'lardan OSI Katmanları isimli blogda bahsetmiştik. Burada da SNMP mesajları bir başlık (header) ve bir PDU'dan oluşur. Başlıklar, SNMP sürüm numarasından ve topluluk adından oluşur. Topluluk adı, SNMP'de güvenliği artırmak için bir tür parola olarak kullanılır.

PDU, gönderilen mesajın türüne de bağlıdır. 'Get', 'GetNext' ve 'Set' ile yanıt PDU'su, PDU türü, istek kimliği, hata durumu, hata dizini ve nesne/değişken alanlarından oluşur. 'Trap' ise kuruluş, aracı, aracı adresi, genel trap türü, özel trap kodu, zaman damgası ve nesne/değer alanlarından oluşur. Buradan da anlayacağımız üzere Trap, önemli bir olayı ya da durumu belirtir.

Bunların yanında bir de 'GetBulk', 'GetResponse', 'Inform' mesajları da mevcuttur.

SNMP, üç bileşenden oluşur:

  1. Managed Devices (Yönetilen Cihazlar)
    • Elbette yönetilen cihazlar, yönetilen bir ağda bulunur ve genelde ağın birçok düğümünden biri olarak temsil edilir. Sonuç olarak her cihaz bir düğümü temsil ediyor, öyle değil mi? Bu cihazlar; Router'lar, Bridge'ler, Hub'lar, bilgisayar ve ana bilgisayarlar, yazıcılar ve IoT cihazları da olabilir.
  2. Agents (Aracılar)
    • SNMP tarafından yönetilen bir cihazda yüklü bir SNMP aracısı vardır. Aracı, cihaz bilgilerini SNMP ile izlemek için kulllanılabilir hâle getirmek için cihaz bilgilerini SNMP uyumlu bir biçime çeviren bir yazılım modülüdür.
  3. Network Management System (NMS - Ağ Yönetim Sistemleri)
    • NMS dediğimiz bu sistemler, izleme uygulamalarını çalıştırmamıza olanak tanır. Ağ yönetimi için gereken büyük miktarda işleme gücü ve bellek kaynağı sağlarlar.

SNMP mimarisi basit olsa da eğer aşina değilseniz, veri hiyerarşisi size karmaşık gelebilir fakat bu konuda endişeniz olmasın. SNMP, esneklik ve genişletilebilirlik sağlamak için ağ cihazlarının sabit boyutta ve sabit bir formatta veri alışverişi yapmasını gerektirmez. Bunun yerine, yöneticilerin toplaması için verilerin her zaman mevcut olduğu ağaç benzeri bir format kullanır. Biz de bu formata 'Data Tree' yani 'Veri Ağacı' diyoruz.

Data Tree, Yönetim Bilgi Tabanları (MIB - Management Information Bases) dediğimiz bir yapıda var olan tablolardan oluşur. Buradaki tabloları, az önce sözüne ettiğimiz ağacın dalları olarak hayal edebilirsiniz. Yani ağacımız MIB'in kendisi, dalları ise tablolar. MIB dediğimiz bu yapılar, bir sözlük gibi düşünülebilir; SNMP sözlüğü. Belirli cihaz türlerini veya cihaz bileşenlerini tatlı bir şekilde gruplandırır ve özelliklerini tanımlar; nesnenin karşılığı da rakamsal olarak ifade edilir. Bazı kaynaklarda MIB, 'tanımlar topluluğu' da olarak anılır. MIB dosyaları bağımsız bir şekilde yazılır ve içerdikleri bilgiler hiyerarşik olarak düzenlenir. Burada, çeşitli bilgi parçacıklarına SNMP ile erişilebilir.

Burada, 'OID - Object IDentifier' veya 'nesne tanımlayıcıları' vardır. MIB üzerinde yönetilen nesneleri benzersiz bir şekilde tanımlar; benzersiz bir tanımlayıcı numarası (Identifier ID) ve bir tanımlayıcı dizesi vardır. Ulaşılmak istenen değeri tutan değişkene (düğüme) OID adı verilir. Sayılar ve dizeler, birbirinin yerine kullanılabilir (Local IP adresleri gibi). Örneğin bir yazıcıda izlenecek tipik nesneler; farklı kartuş durumları ve belki de yazdırılan dosya sayısıdır. Yani her nesnenin kendi nesne kimliği vardır.

MIB, hiyerarşik olarak düzenlenmiştir ve kökten (root) tek yapraklara kadar farklı seviyelerde bir ağaç olarak tasvir edilebilir. Her OID, OID ağacının seviyelerini takip eden bir adrese sahiptir.

Genel olarak bir OID, düğümleri kodlayan ve noktalarla ayrılmış uzun bir sayı dizisidir. Aşağıda, bir OID'in örneği vardır.

Iso(1).org(3).dod(6).internet(1).private(4).transition(868).products(2).chassis(4).card(1).slotCps(2)­.-cpsSlotSummary(1).cpsModuleTable(1).cpsModuleEntry(1).cpsModuleModel(3).3562.3

Yukarıdakinin yanında sadece şu da kullanılabilir:

1.3.6.1.4.868.2.4.1.2.1.1.1.3.3562.3

Yukarıdaki sayılar topluluğunun ilk dört sayı (1.3.6.1), standarttır. Bu noktadan sonra ulaşmak istediğiniz bilgiye göre alt dallara ilerlemeniz gerekir. Aşağıda, çeşitli değerler mevcuttur; sorgulandıklarında tuttukları bilgileri verir, girildiklerinde ise tanımlanırlar.

1.3.6.1.2.1.1.1 = sysDescr: 'System Description'dan gelir yani 'Sistem Açıklaması' anlamını taşır. Bu, cihazı tanımlaması içindir.

1.3.6.1.2.1.1.2 = sysObjectID: Bir sistem objesinin (cihazın) ID'si (tanımlayıcısı) gibi düşünün. 

1.3.6.1.2.1.1.3 = sysUpTime: Cihazın ne zaman güncellendiğini belirtir.

1.3.6.1.2.1.1.4 = sysContact: Cihaz iletişim bilgilerini belirtir.

1.3.6.1.2.1.1.5 = sysName: Cihazın adını belirtir.

1.3.6.1.2.1.1.6 = sysLocation: Cihazın fiziksel olarak nerede olduğunu belirtir.

1.3.6.1.2.1.1.7 = sysServices: Cihazın tipini belirtir.

Bu Data Tree dediğimiz yapının nasıl göründüğünü göstermek istiyoruz. Eğer bir dosya sistemi olarak düşünürsek aşağıdaki gibi bir görünüm verir.

Aşağıdaki şema üzerinden gidecek olursak örneğin internete girmek için OID ağacının dördüncü düğümüne ilerlemek zorundasınızdır. Ağacın yapraklarına doğru ilerlerseniz (daha aşağılara) adlar giderek daha belirgin hâle gelir ve her düğüm belirli bir aygıtta veya aracıda belirli bir özelliği temsil eder.

[*] SNMP Güvenliği ve Tehditler hakkındaki blogumuza bekleriz.


Yayınlanma Tarihi: 2022-08-15 19:11:52

Son Düzenleme Tarihi: 2023-06-10 08:00:56