NAME
snmpd.examples - example configuration for the Net-SNMP agentDESCRIPTION
The snmpd.conf(5) man page defines the syntax and behaviour of the various configuration directives that can be used to control the operation of the Net-SNMP agent, and the management information it provides. This companion man page illustrates these directives, showing some practical examples of how they might be used.AGENT BEHAVIOUR
Listening addresses
The default agent behaviour (listing on the standard SNMP UDP port on all interfaces) is equivalent to the directive:agentaddress udp:161
or simply
agentaddress 161
The agent can be configured to only accept requests sent to the local
loopback interface (again listening on the SNMP UDP port), using:
agentaddress localhost:161 # (udp
implicit)
or
agentaddress 127.0.0.1 # (udp and standard
port implicit)
It can be configured to accept both UDP and TCP requests (over both IPv4 and
IPv6), using:
agentaddress
udp:161,tcp:161,udp6:161,tcp6:161
Other combinations are also valid.
Run-time privileges
The agent can be configured to relinquish any privileged access once it has opened the initial listening ports. Given a suitable "snmp" group (defined in /etc/group), this could be done using the directives:agentuser nobody agentgroup snmp
agentuser #10 agentgroup #10
SNMPv3 Configuration
Rather than being generated pseudo-randomly, the engine ID for the agent could be calculated based on the MAC address of the second network interface ( eth1), using the directives:engineIDType 3 engineIDNic eth1
or it could be calculated from the (first) IP address, using:
engineIDType 1
or it could be specified explicitly, using:
engineID "XXX - WHAT FORMAT"
ACCESS CONTROL
SNMPv3 Users
The following directives will create three users, all using exactly the same authentication and encryption settings:createUser me MD5 "single pass phrase" createUser myself MD5 "single pass phrase" DES createUser andI MD5 "single pass phrase" DES "single pass phrase"
createUser onering SHA "to rule them
all" AES "to bind them"
Remember that these createUser directives should be defined in the
/var/lib/snmp/snmpd.conf file, rather than the usual location.
Traditional Access Control
The SNMPv3 users defined above can be granted access to the full MIB tree using the directives:rouser me rwuser onering
rouser myself .1.3.6.1.2 rwuser andI system
rouser onering rwuser onering
rocommunity public rwcommunity private
- Note:
- It would also be a very good idea to change private to something a little less predictable!
rocommunity public default system
or the management systems that settings could be manipulated from:
rwcommunity private 10.10.10.0/24
or a combination of the two.
VACM Configuration
This last pair of settings are equivalent to the full VACM definitions:# sec.name source community com2sec public default public com2sec mynet 10.10.10.0/24 private com2sec6 mynet fec0::/64 private # sec.model sec.name group worldGroup v1 public group worldGroup v2c public group myGroup v1 mynet group myGroup v2c mynet # incl/excl subtree [mask] view all included .1 view sysView included system # context model level prefix read write notify (unused) access worldGroup "" any noauth exact system none none access myGroup "" any noauth exact all all none
Typed-View Configuration
A similar configuration could also be configured as follows:view sys2View included system view sys2View included .1.3.6.1.2.1.25.1 authcommunity read public default -v sys2View authcommunity read,write private 10.10.10.0/8
SYSTEM INFORMATION
System Group
The full contents of the 'system' group (with the exception of sysUpTime) can be explicitly configured using:# Override 'uname -a' and hardcoded system OID - inherently read-only values sysDescr Universal Turing Machine mk I sysObjectID .1.3.6.1.4.1.8072.3.2.1066 # Override default values from 'configure' - makes these objects read-only sysContact [email protected] sysName tortoise.turing.com sysLocation An idea in the mind of AT # Standard end-host behaviour sysServices 72
Host Resources Group
The list of devices probed for potential inclusion in the hrDiskStorageTable (and hrDeviceTable) can be amended using any of the following directives:ignoredisk /dev/rdsk/c0t2d0
which prevents the device /dev/rdsk/c0t2d0 from being scanned,
ignoredisk /dev/rdsk/c0t[!6]d0 ignoredisk /dev/rdsk/c0t[0-57-9a-f]d0
ignoredisk /dev/rdsk/c1*
which prevents all devices whose device names start with /dev/rdsk/c1
from being scanned, or
ignoredisk /dev/rdsk/c?t0d0
which prevents all devices /dev/rdsk/cXt0d0 (where 'X' is any
single character) from being scanned.
Process Monitoring
The list of services running on a system can be monitored (and provision made for correcting any problems), using:# At least one web server process must be running at all times proc httpd procfix httpd /etc/rc.d/init.d/httpd restart # There should never be more than 10 mail processes running # (more implies a probable mail storm, so shut down the mail system) proc sendmail 10 procfix sendmail /etc/rc.d/init.d/sendmail stop # There should be a single network management agent running # ("There can be only one") proc snmpd 1 1
Disk Usage Monitoring
The state of disk storage can be monitored using:includeAllDisks 10% disk /var 20% disk /usr 3% # Keep 100 MB free for crash dumps disk /mnt/crash 100000
System Load Monitoring
A simple check for an overloaded system might be:load 10
A more refined check (to allow brief periods of heavy use, but recognise
sustained medium-heavy load) might be:
load 30 10 5
Log File Monitoring
TODOfile FILE [MAXSIZE]
logmatch NAME PATH CYCLETIME REGEX
ACTIVE MONITORING
Notification Handling
Configuring the agent to report invalid access attempts might be done by:authtrapenable 1 trapcommunity public trap2sink localhost
informsink localhost public
A configuration with repeated sink destinations, such as:
trapsink localhost trap2sink localhost informsink localhost
trapsess snmpv3 options
localhost:162
TODO - mention trapd access configuration
DisMan Event MIB
The simplest configuration for active self-monitoring of the agent, by the agent, for the agent, is probably:# Set up the credentials to retrieve monitored values createUser _internal MD5 "the first sign of madness" iquerySecName _internal rouser _internal # Active the standard monitoring entries defaultMonitors yes linkUpDownNotifications yes # If there's a problem, then tell someone! trap2sink localhost
monitor -u me -o hrSWRunName "high
process memory" hrSWRunPerfMem > 10000
This defines an explicit boolean monitor entry, looking for any process using
more than 10MB of active memory. Such processes will be reported using the
(standard) DisMan trap mteTriggerFired, but adding an extra (wildcarded)
varbind hrSWRunName.
This entry also specifies an explicit user ( me, as defined earlier) for
retrieving the monitored values, and building the trap.
Objects that could potentially fluctuate around the specified level are better
monitored using a threshold monitor entry:
monitor -D -r 10 "network traffic"
ifInOctets 1000000 5000000
This will send a mteTriggerRising trap whenever the incoming traffic rises above
(roughly) 500 kB/s on any network interface, and a corresponding
mteTriggerFalling trap when it falls below 100 kB/s again.
Note that this monitors the deltas between successive samples ( -D)
rather than the actual sample values themselves. The same effect could be
obtained using:
monitor -r 10 "network traffic"
ifInOctets - - 1000000 5000000
The linkUpDownNotifications directive above is broadly equivalent to:
notificationEvent linkUpTrap linkUp ifIndex ifAdminStatus ifOperStatus notificationEvent linkDownTrap linkDown ifIndex ifAdminStatus ifOperStatus monitor -r 60 -e linkUpTrap "Generate linkUp" ifOperStatus != 2 monitor -r 60 -e linkDownTrap "Generate linkDown" ifOperStatus == 2
monitor -o prNames -o prErrMessage "procTable" prErrorFlag != 0 monitor -o memErrorName -o memSwapErrorMsg "memory" memSwapError != 0 monitor -o extNames -o extOutput "extTable" extResult != 0 monitor -o dskPath -o dskErrorMsg "dskTable" dskErrorFlag != 0 monitor -o laNames -o laErrMessage "laTable" laErrorFlag != 0 monitor -o fileName -o fileErrorMsg "fileTable" fileErrorFlag != 0
setEvent prFixIt prErrFix = 1 monitor -e prFixIt "procTable" prErrorFlag != 0
DisMan Schedule MIB
The agent could be configured to reload its configuration once an hour, using:repeat 3600 versionUpdateConfig.0 = 1
Alternatively this could be configured to be run at specific times of day
(perhaps following rotation of the logs):
cron 10 0 * * * versionUpdateConfig.0 =
1
The one-shot style of scheduling is rather less common, but the secret SNMP
virus could be activated on the next occurance of Friday 13th using:
at 13 13 13 * 5 snmpVirus.0 = 1
EXTENDING AGENT FUNCTIONALITY
Arbitrary Extension Commands
Old Styleexec [MIBOID] NAME PROG ARGS" sh [MIBOID] NAME PROG ARGS" execfix NAME PROG ARGS"
extend [MIBOID] NAME PROG ARGS" extendfix [MIBOID] NAME PROG ARGS"
MIB-Specific Extension Commands
One-Shot"pass [-p priority] MIBOID
PROG"
- Persistent
"pass_persist [-p priority] MIBOID
PROG"
Embedded Perl Support
If embedded perl support is enabled in the agent, the default initialisation is equivalent to the directives:disablePerl false perlInitFile /usr/share/snmp/snmp_perl.pl
perl use Data::Dumper; perl sub myroutine { print "got called: ",Dumper(@_),"\n"; } perl $agent->register('mylink', '.1.3.6.1.8765', \&myroutine);
XXX - WHAT ???
perl 'do
/usr/share/snmp/perl_example.pl';
Dynamically Loadable Modules
TODOdlmod NAME PATH"
Proxy Support
A configuration for acting as a simple proxy for two other SNMP agents (running on remote systems) might be:com2sec -Cn rem1context rem1user default remotehost1 com2sec -Cn rem2context rem2user default remotehost2 proxy -Cn rem1context -v 1 -c public remotehost1 .1.3 proxy -Cn rem2context -v 1 -c public remotehost2 .1.3
proxy -v 1 -c public localhost:6161
.1.3.6.1.4.1.99
This mechanism can be used to link together two separate SNMP agents.
A less usual approach is to map one subtree into a different area of the overall
MIB tree (either locally or on a remote system):
# uses SNMPv3 to access the MIB tree .1.3.6.1.2.1.1 on 'remotehost' # and maps this to the local tree .1.3.6.1.3.10 proxy -v 3 -l noAuthNoPriv -u user remotehost .1.3.6.1.3.10 .1.3.6.1.2.1.1
SMUX Sub-Agents
smuxsocket 127.0.0.1 smuxpeer .1.3.6.1.2.1.14 ospf_pass
AgentX Sub-Agents
The Net-SNMP agent could be configured to operate as an AgentX master agent (listening on a non-standard named socket, and running using the access privileges defined earlier), using:master agentx agentXSocket /tmp/agentx/master agentXPerms 0660 0550 nobody snmp
netsnmp_ds_set_string(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_X_SOCKET, "/tmp/agentx/master");
agentXSocket tcp:localhost:705 agentXTimeout 5 agentXRetries 2
agentXSocket tcp:localhost:705 agentXTimeout 10 agentXRetries 1 agentXPingInterval 600
OTHER CONFIGURATION
override sysDescr.0 octet_str "my own
sysDescr"
injectHandler stash_cache NAME
table_iterator
FILES
/etc/snmp/snmpd.confSEE ALSO
snmpconf(1), snmpd.conf(5), snmp.conf(5), snmp_config(5), snmpd(8), EXAMPLE.conf, netsnmp_config_api(3).13 Oct 2006 | V5.9.3 |