SNMP
Netwerkbeheer: manager, agent, MIB/OID, berichten (UDP 161/162), versies v1/v2c/v3 en SNMPv3-gebruikers.
1Wat is SNMP? Onderdelen

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.
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).
- Manager initieert, vraagt periodiek.
- Poort 161 op de agent.
- Geschikt voor grafieken/trends (Cacti).
- Kan een event missen tussen twee polls.
- 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.
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.
Een OID (Object Identifier) = het unieke adres van een object in de boom: reeks getallen (of woorden) gescheiden door punten.
.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)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 }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.
4SNMP versies en beveiliging
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).
- 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.
- 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).
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.
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-writecreateUser authOnlyUser MD5 "secret007"
rouser authOnlyUser
createUser authPrivUser SHA "geheim007" AES
rwuser authPrivUser- 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/rwuserzonder 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.
# 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.06Praktijk: Linux, Cisco, VyOS, controle
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/RedHatR1(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.1Lees: community ciscolab read-only (ro), enkel toegankelijk voor de manager 192.168.56.1 (ACL). Traps gaan naar die host (versie 2c, community ciscolab).
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 desLees: view = welk deel van de MIB (oid 1 = alles), group = read-only en seclevel private (= authPriv), user vyos met SHA-auth en DES-privacy.
Nog niet klaar? Je kan altijd terugkomen.