Home  

Artikel: Linux SNMP-Traps filtern


Ziel:
Ich wollte die Mac-Adress-Security beim Nortel BayStack mal ausprobieren und bei allen Verstößen eine Email bekommen. Da der Nortel ja einen SNMP-Trap schickt, galt es nur noch den zu finden und auszuwerten.
Hier der Weg:

Debian Sarge-Pakete:
ii snmp 5.1.2-6.2 NET SNMP (Simple Network Management Protocol
ii snmpd 5.1.2-6.2 NET SNMP (Simple Network Management Protocol

Hardware:
Nortel BayStack 425-24T Switch
Port Security aktiviert von Port 1-5
SNMP Trap IP Adress 172.16.10.15
Community String: Public

Alle Traps durch traps.sh ( http://net-snmp.sourceforge.net/tutorial/tutorial-5/commands/snmptrap.html ) Script von jagen
/etc/snmp/snmptrapd.conf:

traphandle default /etc/snmp/bin/traps.sh

Dienst neustarten:

 /etc/init.d/snmpd restart

Dann im Log den snmpTrapOID.0 suchen:

trap: 192.168.6.211 192.168.6.211
SNMPv2-MIB::sysUpTime.0 = 1:3:43:33.62,
SNMPv2-MIB::snmpTrapOID.0 = SNMPv2-SMI::enterprises.45.1.6.2.1.0.5,
SNMPv2-SMI::enterprises.45.1.6.5.3.12.1.1.1.1 = 1,
SNMPv2-SMI::enterprises.45.1.6.5.3.12.1.2.1.1 = 1,
SNMPv2-SMI::enterprises.45.1.6.5.3.12.1.3.1.1 = "00 30 05 65 56 89 ",
SNMP-COMMUNITY-MIB::snmpTrapAddress.0 = 192.168.6.211,
SNMP-COMMUNITY-MIB::snmpTrapCommunity.0 = "Public"
SNMPv2-MIB::snmpTrapOID.0 = SNMPv2-SMI::enterprises.45.1.6.2.1.0.5

Den Value (SNMPv2-SMI::enterprises.45.1.6.2.1.0.5) in die /etc/snmp/snmptrapd.conf eintragen:

traphandle SNMPv2-SMI::enterprises.45.1.6.2.1.0.5 /etc/snmp/bin/sec.sh

Dienst neustarten:

 /etc/init.d/snmpd restart

Und schon übernimmt sec.sh den Trap !!!


Was sagt der Trap noch:

SNMPv2-SMI::enterprises.45.1.6.5.3.12.1.1.1.1 = 1, -> ??
SNMPv2-SMI::enterprises.45.1.6.5.3.12.1.2.1.1 = 1, -> ??
SNMPv2-SMI::enterprises.45.1.6.5.3.12.1.3.1.1 = "00 30 05 65 56 89 ", -> Die Mac-Adresse die den Trap ausgelöst hat
SNMP-COMMUNITY-MIB::snmpTrapAddress.0 = 192.168.6.211, -> Das System das den Trap sendet
SNMP-COMMUNITY-MIB::snmpTrapCommunity.0 = "Public" -> Community

Ändern wir mal den Port auf 2 und gucken in den Trap:

trap: 192.168.6.211 192.168.6.211
SNMPv2-MIB::sysUpTime.0 = 1:3:53:31.37,
SNMPv2-MIB::snmpTrapOID.0 = SNMPv2-SMI::enterprises.45.1.6.2.1.0.5,
SNMPv2-SMI::enterprises.45.1.6.5.3.12.1.1.1.2 = 1, - >immer noch unbekannt ...
SNMPv2-SMI::enterprises.45.1.6.5.3.12.1.2.1.2 = 2, -> Dann ist das wohl der Port
SNMPv2-SMI::enterprises.45.1.6.5.3.12.1.3.1.2 = "00 30 05 65 56 89 ",
SNMP-COMMUNITY-MIB::snmpTrapAddress.0 = 192.168.6.211,
SNMP-COMMUNITY-MIB::snmpTrapCommunity.0 = "Public"

 

Und was fieses: Die letzte Zahl der oid (45.1.6.5.3.12.1.3.1.2) ist der Port !!!
Der muß da herausgefiltert werden ...

Wir nehmen cut mit dem Trenner . und nehmen alle Teile außer dem letzten
cut -d. -f1,2,3,4,5,6,7,8,9,10

das sieht im Script so aus:

oid_oi=`echo $oid | cut -d. -f1,2,3,4,5,6,7,8,9,10`

Und hier das ganze Script:

#!/bin/sh

read host
read ip
vars=

while read oid val
do

oid_oi=`echo $oid | cut -d. -f1,2,3,4,5,6,7,8,9,10`

#Suchen nach Port
if [ $oid_oi = "SNMPv2-SMI::enterprises.45.1.6.5.3.12.1.2.1" ]
then
port=$val
fi

#Suche nach MAC-Adresse
if [ $oid_oi = "SNMPv2-SMI::enterprises.45.1.6.5.3.12.1.3.1" ]
then
mac=$val
fi

done

datum=`date +%b" "%d" "%T`
out=/tmp/out

echo "$datum : Permission denied for $mac on Port $port at $host (IP: $ip )" >$out

#Email schicken
mail -s "SNMP Authentication Failure $host " markus.ungermann@example.net< $out

#Log-Eintrag erzeugen
`cat $out >> /log/snmp/sec.log`
#echo "trap: $1 $host $ip $vars" >>/log/snmp/sec.log
/td>


Erstellt: 2006-09-06   Autor:Markus Ungermann / tuxhausen.de
Letztes Update: