SNMP Temelleri ve Pratik İzleme
Ağ cihazlarının izlenmesi ve yönetilmesi için kullanılan SNMP protokolünün temel bileşenlerini ve pratik kullanımını öğrenin.
SNMP Temelleri ve Pratik İzleme
SNMP (Simple Network Management Protocol), ağ cihazlarının izlenmesi ve yönetilmesi için kullanılan en yaygın protokollerden biridir. Yönlendiricilerden (router), anahtarlara (switch), sunuculardan sensörlere kadar birçok cihaz SNMP desteği sağlar. Bu yazıda, SNMP'nin temel bileşenlerini, nasıl çalıştığını ve pratik izleme senaryolarını ele alacağız.
🔍 SNMP Nedir?
SNMP, ağ cihazlarının durumunu sorgulamak, ölçüm yapmak ve gerektiğinde konfigürasyon değişiklikleri uygulamak için kullanılan bir iletişim protokolüdür.
Basitçe söylemek gerekirse, SNMP sayesinde ağ yöneticileri cihazlardan bilgi alabilir veya belirli parametreleri uzaktan yönetebilir.
SNMP'nin Temel Bileşenleri
SNMP sistemi dört ana bileşenden oluşur:
Manager (Yönetici): SNMP sorgularını gönderen ve yanıtları toplayan sistemdir. Bu, Zabbix, PRTG, Nagios gibi izleme yazılımları veya sizin geliştirdiğiniz Go tabanlı uygulamalar olabilir.
Agent (Ajan): Cihaz üzerinde çalışan ve belirli bilgileri SNMP üzerinden paylaşan yazılımdır. Örneğin bir switch üzerinde çalışan snmpd servisi.
MIB (Management Information Base): SNMP tarafından erişilebilen tüm veri noktalarının tanımlarını içeren bir veri sözlüğüdür. Bu sayede hangi bilgilerin nasıl alınacağı tanımlanır.
OID (Object Identifier): Her bir veri noktasını benzersiz olarak tanımlayan kimliktir. Örneğin .1.3.6.1.2.1.2.2.1.10 portun RX trafiğini temsil eder.
⚙️ SNMP Versiyonları
SNMP'nin üç temel versiyonu bulunur:
SNMP v1: İlk sürüm olan v1, temel sorgulama ve yanıt mekanizması sağlar. Ancak güvenlik açısından en zayıf versiyondur çünkü şifreleme desteği bulunmaz.
SNMP v2c: En yaygın kullanılan versiyondur. v1'e göre daha fazla veri tipi desteği ve toplu sorgular (bulk operations) sunar. Community string ile basit erişim kontrolü sağlar.
SNMP v3: En güvenli versiyondur. Kimlik doğrulama (authentication) ve şifreleme (encryption) desteği sunar. Güvenlik kritik ortamlarda tercih edilir.
Günümüzde SNMP v2c genellikle dahili ağlarda kullanılırken, v3 daha güvenli ortamlarda tercih edilir.
🧩 OID ve MIB Kavramı
Bir cihazdaki her bilgi bir OID (Object Identifier) ile temsil edilir.
Örneğin:
.1.3.6.1.2.1.1.3.0   →   Cihazın uptime değeri
.1.3.6.1.2.1.2.2.1.10 →   Bir arayüzün gelen trafiği (RX)
.1.3.6.1.2.1.2.2.1.16 →   Bir arayüzün giden trafiği (TX)
Bu OID'ler, MIB dosyalarında anlamlı isimlerle tanımlanır: IF-MIB::ifInOctets IF-MIB::ifOutOctets
Bu sayede karmaşık sayılardan ziyade anlamlı isimlerle çalışabilirsiniz.
🧠 Pratik İzleme Senaryosu
Bir ağ yöneticisi olarak, örneğin bir switch üzerindeki port trafiğini izlemek isteyebilirsiniz.
Bunu SNMP ile yapmak oldukça basittir:
Örnek: Switch Port Trafiğini İzleme
1️⃣ RX Trafiğini Sorgulama
snmpget -v2c -c public 192.168.1.10 IF-MIB::ifInOctets.2
• -v2c: SNMP versiyonu • -c public: community string • 192.168.1.10: cihaz IP adresi • IF-MIB::ifInOctets.2: 2. portun gelen trafiği
2️⃣ TX Trafiğini Sorgulama
snmpget -v2c -c public 192.168.1.10 IF-MIB::ifOutOctets.2
Bu komutlardan elde edilen değerler byte cinsindendir ve zaman farkına bölünerek bitrate (örneğin kbit/s) hesaplanabilir.
📈 Gerçek Zamanlı İzleme Örneği SNMP verileri genellikle her polling interval (örneğin 60 saniye) aralığında sorgulanır. Bu veriler zaman serisi veritabanlarına (örneğin InfluxDB) kaydedilerek grafiğe dönüştürülebilir.
RX: 245823424 bytes (önceki ölçüm)
RX: 245933424 bytes (60 saniye sonra)
Fark: 110000 bytes / 60s = 1833 bytes/s ≈ 14.66 kbit/s
Bu şekilde her portun anlık trafiği hesaplanabilir.
🧪 SNMP ile Go Dilinde Basit Sorgu
package main
import (
    "fmt"
    "github.com/gosnmp/gosnmp"
    "time"
)
func main() {
    g := &gosnmp.GoSNMP{
        Target:    "192.168.1.10",
        Port:      161,
        Community: "public",
        Version:   gosnmp.Version2c,
        Timeout:   time.Duration(2) * time.Second,
    }
    err := g.Connect()
    if err != nil {
        panic(err)
    }
    defer g.Conn.Close()
    oid := "1.3.6.1.2.1.1.3.0"
    result, err := g.Get([]string{oid})
    if err != nil {
        panic(err)
    }
    for _, variable := range result.Variables {
        fmt.Printf("Cihaz Uptime: %v\n", variable.Value)
    }
}
🔒 Güvenlik ve En İyi Uygulamalar
• SNMP portu (UDP 161) sadece güvenilir ağlarda erişilebilir olmalıdır. • community string bilgisi gizli tutulmalıdır (örnek: public yerine NetMon2025!). • SNMPv3 tercih edilerek şifreleme kullanılmalıdır. • Gereksiz OID erişimlerine izin verilmemelidir.
🚀 Sonuç
SNMP, doğru yapılandırıldığında ağ yönetiminin vazgeçilmez bir parçasıdır. Basit sorgularla cihaz sağlığı, port trafiği, CPU/disk kullanımı gibi metrikler kolayca izlenebilir. Günümüzde Go, Python veya Grafana/InfluxDB entegrasyonları ile SNMP verileri görselleştirilebilir ve proaktif ağ yönetimi sağlanabilir.
📱 Bu Yazıyı Paylaş
Bu yazıyı beğendiyseniz, arkadaşlarınızla paylaşabilirsiniz:
