Netwerken 3
00
Hoofdstuk 11

SNMP

Netwerkbeheer: manager, agent, MIB/OID, berichten (UDP 161/162), versies v1/v2c/v3 en SNMPv3-gebruikers.

0%
voltooid

1Wat is SNMP? Onderdelen

Eén manager praat via UDP met agents (met MIB) op routers, switches en printers.
Eén manager praat via UDP met agents (met MIB) op routers, switches en printers.

SNMP = Simple Network Management Protocol. Monitoren en beheren van netwerkonderdelen (routers, switches, computers, printers) door een variabele uit te lezen of aan te passen (device-afhankelijk). Het protocol regelt: aanvraag van variabelen en antwoord met variabelen.

OnderdeelWat is het?
SNMP managerBeheersstation/NMS (bv. Cacti, snmpwalk) dat vraagt, instelt en meldingen ontvangt.
SNMP agentSoftware (daemon, bv. snmpd) op elk device dat je wil monitoren; beantwoordt de manager en stuurt traps.
MIBManagement Information Base: databank/boom met alle beheerbare objecten van dat device.
SNMP protocolRegelt de uitwisseling tussen agent en manager (via UDP).
+25 XP

2Protocol: berichten en poorten

SNMP loopt over UDP. Poort 161 = request/response (agent luistert; in snmpd.conf: agentAddress udp:161). Poort 162 = notificaties/traps (manager luistert).

BerichtRichtingBetekenis
GetRequest (GET)manager naar agent (161)Vraag de waarde van een variabele.
GetNextRequest (GETNEXT)manager naar agent (161)Vraag de volgende variabele in de MIB-boom (basis van snmpwalk).
GetBulkRequest (GETBULK)manager naar agent (161)Sinds v2c. Veel waarden in één aanvraag (efficiënter dan veel GETNEXT).
GetResponse / Responseagent naar managerAntwoord met de waarde(n).
SetRequest (SET)manager naar agent (161)Device moet een waarde aanpassen (schrijfrechten nodig).
Trapagent naar manager (162)Spontane melding vanuit het device (bv. interface down, waarde veranderd). Zonder bevestiging.
Informagent naar manager (162)Zoals trap, maar met bevestiging (ack) van de manager. Sinds v2c.
Polling (GET/GETNEXT/GETBULK)
  • Manager initieert, vraagt periodiek.
  • Poort 161 op de agent.
  • Geschikt voor grafieken/trends (Cacti).
  • Kan een event missen tussen twee polls.
Trap / Inform
  • Agent initieert bij een gebeurtenis.
  • Poort 162 op de manager.
  • Direct alarm (interface down, reboot).
  • Trap = geen ack (UDP kan verloren gaan); inform = wel ack.
+25 XP

3MIB, ASN.1 en OID

Het SNMP-protocol zegt niet hoe info in een MIB wordt opgeslagen. De MIB is een boomstructuur: een tekstbestand dat alle objecten beschrijft in ASN.1 (Abstract Syntax Notation One: gestandaardiseerde taal om data en eigenschappen te definiëren). Op Linux: /usr/share/snmp/mibs.

MIBDoel
System MIB (RFC 1907)Basisinfo: naam, locatie, uptime.
MIB-II (RFC 1213)TCP/IP-netwerken (interfaces, ip, icmp, tcp, udp).
Interface MIB (RFC 2233), TCP MIB (RFC 4023), IP MIB (RFC 4293)Specifiek per protocol/onderdeel.
Per fabrikant (private)Cisco, Microsoft, IBM...: onder private/enterprises (1.3.6.1.4.1).

Een OID (Object Identifier) = het unieke adres van een object in de boom: reeks getallen (of woorden) gescheiden door punten.

text
.1 iso
  .3 org
    .6 dod
      .1 internet
        .1 directory
        .2 mgmt
          .1 mib-2
            .1 system      (sysDescr .1, sysObjectID .2, sysUpTime .3, sysContact .4, sysName .5, sysLocation .6)
            .2 interfaces
            .4 ip          (ipForwDatagrams .6)
            .5 icmp
            .6 tcp
        .3 experimental
        .4 private
          .1 enterprises   (Cisco = 9)
Pad door de MIB-boom (cijfer = knooppunt)
OID (getallen)OID (woorden)Betekenis
1.3.6.1.2.1.1.5.0iso.org.dod.internet.mgmt.mib-2.system.sysName.0Hostname van het device (de .0 = enige instantie, scalar).
1.3.6.1.2.1.1.1.0...system.sysDescr.0Beschrijving (OS/hardware).
1.3.6.1.2.1.1.3.0...system.sysUpTime.0Uptime sinds laatste herstart.
1.3.6.1.2.1.4.6iso.org.dod.internet.mgmt.mib-2.ip.ipForwDatagramsAantal door te sturen datagrammen (cursus-voorbeeld).
text
ipForwDatagrams OBJECT-TYPE
    SYNTAX     Counter
    ACCESS     read-only
    STATUS     mandatory
    DESCRIPTION "The number of input datagrams for which this entity
                 was not their final IP destination ..."
    ::= { ip 6 }
Voorbeeld MIB-object (ASN.1)

Lees: object ipForwDatagrams, type Counter, read-only, hangt onder ip (4) op positie 6, dus OID ...ip.6 = 1.3.6.1.2.1.4.6.

+25 XP

4SNMP versies en beveiliging

VersieJaarBeveiligingNieuw
SNMPv11990Community string (plaintext "wachtwoord")Basis: GET, GETNEXT, SET, Trap.
SNMPv2c1996Zelfde community string als v1 (c = community), security-verbetering mislukteGetBulk, Inform, 64-bit counters, RMON.
SNMPv32002Echte veiligheid: gebruikers, authenticatie, integriteit, privacyUSM + VACM, 3 security-niveaus.

Community string = een tekst (default public = lezen, private = schrijven) die als wachtwoord in cleartext over het netwerk gaat. Iedereen die meeluistert (sniffer) ziet hem. Standaardwaarden laten staan = groot risico.

  • Integriteit: pakket is niet aangepast onderweg (hash).
  • Authenticatie: de bron van het pakket is zeker (gebruiker + MD5/SHA).
  • Privacy: pakket kan niet gelezen worden door derden (encryptie DES/AES).
Waarom SNMPv3 (en niet v2)?
  • Veilig: authenticatie, integriteit en encryptie.
  • Geen plaintext community string; per gebruiker met eigen wachtwoord.
  • Toegangscontrole per gebruiker/groep, per MIB-sectie (view), per IP-range.
  • Nodig op onbetrouwbare netwerken, voor SET (configuratie wijzigen) en voor compliance.
Waarom SNMPv2c (en niet v3)?
  • Eenvoudig instellen: enkel een community string.
  • Oude toestellen ondersteunen enkel v1/v2c.
  • Minder CPU/overhead (geen crypto) op kleine devices.
  • Makkelijk te debuggen (leesbaar), prima voor alleen-lezen monitoring in een afgeschermd beheernetwerk (met ACL).
Security niveau (v3)AuthenticatieEncryptieBescherming
noAuthNoPrivEnkel juiste gebruikersnaam (geen echte controle)NeeQuasi geen (zoals community).
authNoPrivMD5 of SHA (HMAC met wachtwoord)NeeEcht, ongewijzigd (integriteit), maar leesbaar.
authPrivMD5 of SHADES of AESEcht, ongewijzigd en geheim. Veiligste.
+25 XP

5SNMPv3 instellen: createUser, rouser/rwuser

Net-SNMP agent: bestand /etc/snmp/snmpd.conf (of net-snmp-config --create-snmpv3-user, dat dezelfde regel toevoegt). Een v3-gebruiker (USM-user) maak je met createUser en geef je rechten met rouser/rwuser. Passphrase minimum 8 tekens.

text
createUser  <gebruiker>  [MD5|SHA]  "<auth-passphrase>"  [DES|AES]  ["<priv-passphrase>"]
rouser <gebruiker> [noauth|auth|priv]     # read-only, min. security niveau (standaard auth)
rwuser <gebruiker> [noauth|auth|priv]     # read-write
Syntax
text
createUser authOnlyUser MD5 "secret007"
rouser authOnlyUser

createUser authPrivUser SHA "geheim007" AES
rwuser authPrivUser
/etc/snmp/snmpd.conf (uit de cursus)
CommandoWat doet het?
createUser authOnlyUser MD5 "secret007"Maakt SNMPv3-gebruiker authOnlyUser met authenticatie via MD5 (key afgeleid van passphrase "secret007") en zonder privacy (geen encryptie). Niveau = authNoPriv. Met rouser authOnlyUser: enkel lezen (GET/GETNEXT/GETBULK), geen SET.
createUser authPrivUser SHA "geheim007" AESMaakt gebruiker authPrivUser met authenticatie via SHA en privacy/encryptie via AES. Er is geen aparte priv-passphrase opgegeven, dus "geheim007" wordt ook de AES-passphrase. Niveau = authPriv. Met rwuser authPrivUser: lezen én schrijven (SET).
  • Auth vs priv: auth (MD5/SHA) bewijst wie je bent en dat het pakket niet gewijzigd is; priv (DES/AES) versleutelt de inhoud.
  • Syntaxis: eerst auth-protocol + passphrase, dan priv-protocol (+ eventueel eigen priv-passphrase).
  • rouser/rwuser zonder niveau = minimum auth; wil je encryptie afdwingen: rwuser authPrivUser priv.
  • SHA is beter dan MD5, AES is beter dan DES (MD5/DES zijn verouderd; cursus gebruikt ze voor het voorbeeld).
  • Na wijziging: sudo systemctl restart snmpd. Net-SNMP slaat de gebruiker daarna op als gelokaliseerde sleutel (geen leesbaar paswoord meer) in /var/lib/snmp/snmpd.conf.
bash
# authNoPriv (MD5)
snmpget -v3 -l authNoPriv -u authOnlyUser -a MD5 -A "secret007" 192.168.2.1 1.3.6.1.2.1.1.5.0

# authPriv (SHA + AES)
snmpget -v3 -l authPriv -u authPrivUser -a SHA -A "geheim007" -x AES -X "geheim007" 192.168.2.1 1.3.6.1.2.1.1.5.0

# v2c ter vergelijking
snmpget -v2c -c public 192.168.2.1 sysName.0
Manager (snmpget) tegen de agent 192.168.2.1: sysName.0 = 1.3.6.1.2.1.1.5.0
OptieBetekenis
-v 1|2c|3SNMP-versie
-c publiccommunity string (v1/v2c)
-u usersecurity name (v3-gebruiker)
-l noAuthNoPriv|authNoPriv|authPrivsecurity level
-a MD5|SHA / -A passauth-protocol / auth-passphrase
-x DES|AES / -X passprivacy-protocol / privacy-passphrase
-n contextcontext name (bv. router1)
+25 XP

6Praktijk: Linux, Cisco, VyOS, controle

bash
apt-get install snmpd                  # agent (daemon), /etc/snmp/snmpd.conf
apt-get install snmp snmp-mibs-downloader   # snmpwalk/snmpget/snmpset; download-mibs
apt-get install tkmib                  # MIB-browser
apt-get install snmptrapd snmptrap     # trap daemon en trap sturen

sudo systemctl restart snmpd           # herstarten
journalctl -a -u snmpd                 # log
sudo nmap -sU 192.168.2.1 -p 161       # UDP-scan: poort mag NIET filtered zijn
sudo lsof -nP -iUDP | grep 161         # lokaal: snmpd luistert op UDP *:161
sudo ufw allow 161/udp                 # firewall Ubuntu/Debian
sudo firewall-cmd --permanent --add-port=161/udp   # CentOS/Fedora/RedHat
Ubuntu: pakketten en controle
cisco
R1(config)# snmp-server community ciscolab ro SNMP_ACL
R1(config)# snmp-server location snmp_manager
R1(config)# snmp-server contact ciscolab_admin
R1(config)# snmp-server host 192.168.56.1 version 2c ciscolab
R1(config)# snmp-server enable traps
R1(config)# ip access-list standard SNMP_ACL
R1(config-std-nacl)# permit 192.168.56.1
Cisco agent (v2c) afgeschermd met ACL

Lees: community ciscolab read-only (ro), enkel toegankelijk voor de manager 192.168.56.1 (ACL). Traps gaan naar die host (versie 2c, community ciscolab).

vyos
set service snmp listen-address 192.168.56.101
set service snmp location KdG_Antwerpen
set service snmp v3 engineid 1
set service snmp v3 view snmpview1 oid 1
set service snmp v3 group mygroup mode ro
set service snmp v3 group mygroup seclevel private
set service snmp v3 group mygroup view snmpview1
set service snmp v3 user vyos auth plaintext-password Supersecret007
set service snmp v3 user vyos auth type sha
set service snmp v3 user vyos group mygroup
set service snmp v3 user vyos privacy plaintext-password Supersecret007
set service snmp v3 user vyos privacy type des
VyOS agent met SNMPv3 (authPriv)

Lees: view = welk deel van de MIB (oid 1 = alles), group = read-only en seclevel private (= authPriv), user vyos met SHA-auth en DES-privacy.

+25 XP
Volgende stap

Nog niet klaar? Je kan altijd terugkomen.

Leer de begrippen