diff options
Diffstat (limited to 'man/snmpd.examples.5.def')
-rw-r--r-- | man/snmpd.examples.5.def | 655 |
1 files changed, 655 insertions, 0 deletions
diff --git a/man/snmpd.examples.5.def b/man/snmpd.examples.5.def new file mode 100644 index 0000000..b4125d6 --- /dev/null +++ b/man/snmpd.examples.5.def @@ -0,0 +1,655 @@ +.TH SNMPD.EXAMPLES 5 "13 Oct 2006" VVERSIONINFO "Net-SNMP" +.SH NAME +snmpd.examples - example configuration for the Net-SNMP agent +.SH DESCRIPTION +The +.I 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. +.PP +This companion man page illustrates these directives, showing +some practical examples of how they might be used. +.SH AGENT BEHAVIOUR +.SS "Listening addresses" +The default agent behaviour (listing on the standard SNMP UDP port on +all interfaces) is equivalent to the directive: +.RS +agentaddress udp:161 +.RE +or simply +.RS +agentaddress 161 +.RE +The agent can be configured to \fIonly\fR accept requests sent to the +local loopback interface (again listening on the SNMP UDP port), using: +.RS +agentaddress localhost:161 \fI# (udp implicit)\fR +.RE +or +.RS +agentaddress 127.0.0.1 \fI# (udp and standard port implicit)\fR +.RE +It can be configured to accept both UDP and TCP requests (over both IPv4 +and IPv6), using: +.RS +agentaddress udp:161,tcp:161,udp6:161,tcp6:161 +.RE +.\" +.\" Can the agent handle the same port for both IPv4 & IPv6 +.\" +Other combinations are also valid. +.SS "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 \fI/etc/group\fR), this could be done using the directives: +.RS +.nf +agentuser nobody +agentgroup snmp +.fi +.RE +A similar effect could be achieved using numeric UID and/or GID values: +.RS +.nf +agentuser #10 +agentgroup #10 +.fi +.RE +.\" +.\" What effect will/may this have on the information returned. +.\" ??? Mention this in the main man page. +.\" +.SS 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 (\fIeth1\fR), using the directives: +.RS +engineIDType 3 +engineIDNic eth1 +.RE +or it could be calculated from the (first) IP address, using: +.RS +engineIDType 1 +.RE +or it could be specified explicitly, using: +.RS +engineID "XXX - WHAT FORMAT" +.RE +.\" +.\" Does engineID override the other directives, or what? +.\" +.SH ACCESS CONTROL +.SS SNMPv3 Users +The following directives will create three users, all using exactly +the same authentication and encryption settings: +.RS +.nf +createUser me MD5 "single pass phrase" +createUser myself MD5 "single pass phrase" DES +createUser andI MD5 "single pass phrase" DES "single pass phrase" +.fi +.RE +Note that this defines three \fIdistinct\fR users, who could be granted +different levels of access. Changing the passphrase for any one of +these would not affect the other two. +.PP +Separate pass phrases can be specified for authentication and +encryption: +.RS +createUser onering SHA "to rule them all" AES "to bind them" +.RE +Remember that these \fIcreateUser\fR directives should be defined in the +PERSISTENT_DIRECTORY/snmpd.conf file, rather than the usual location. +.RE +.\" +.\" ??? Illustrate "\-e", "\-l" and "\-m" forms ?? +.\" +.SS Traditional Access Control +The SNMPv3 users defined above can be granted access to the full +MIB tree using the directives: +.RS +.nf +rouser me +rwuser onering +.fi +.RE +Or selective access to individual subtrees using: +.RS +.nf +rouser myself .1.3.6.1.2 +rwuser andI system +.fi +.RE +.PP +Note that a combination repeating the same user, such as: +.RS +.nf +rouser onering +rwuser onering +.fi +.RE +should \fBnot\fR be used. This would configure the user \fIonering\fR +with read-only access (and ignore the \fIrwuser\fR entry altogether). +The same holds for the community-based directives. +.PP +The directives: +.RS +.nf +rocommunity public +rwcommunity private +.fi +.RE +would define the commonly-expected read and write community strings +for SNMPv1 and SNMPv2c requests. This behaviour is \fBnot\fR +configured by default, and would need to be set up explicitly. +.RS +.IP Note: +It would also be a very good idea to change \fIprivate\fR to something +a little less predictable! +.RE +.PP +A slightly less vulnerable configuration might restrict what information +could be retrieved: +.RS +rocommunity public default system +.RE +or the management systems that settings could be manipulated from: +.RS +rwcommunity private 10.10.10.0/24 +.RE +or a combination of the two. +.SS VACM Configuration +This last pair of settings are equivalent to the full VACM definitions: +.RS +.nf +\fI# sec.name source community\fR +com2sec public default public +com2sec mynet 10.10.10.0/24 private +com2sec6 mynet fec0::/64 private + +\fI# sec.model sec.name\fR +group worldGroup v1 public +group worldGroup v2c public +group myGroup v1 mynet +group myGroup v2c mynet + +\fI# incl/excl subtree [mask]\fR +view all included .1 +view sysView included system + +\fI# context model level prefix read write notify (unused)\fR +access worldGroup "" any noauth exact system none none +access myGroup "" any noauth exact all all none +.fi +.RE +.PP +There are several points to note in this example: +.PP +The \fIgroup\fR directives must be repeated for +both SNMPv1 and SNMPv2c requests. +.PP +The \fIcom2sec\fR security name is distinct from the community +string that is mapped to it. They can be the same ("public") +or different ("mynet"/"private") - but what appears in the +\fIgroup\fR directive is the security name, regardless of +the original community string. +.PP +Both of the \fIview\fR directives are defining simple OID +subtrees, so neither of these require an explicit mask. +The same holds for the "combined subtree2 view defined below. +In fact, a mask field is only needed when defining row slices +across a table (or similar views), and can almost always be omitted. +.PP +In general, it is advisible not to mix traditional and VACM-based +access configuration settings, as these can sometimes interfere +with each other in unexpected ways. Choose a particular style +of access configuration, and stick to it. +.\" +.\" Mention/use hardwired views '_all_' and '_none_' +.\" +.\" Illustrate other, more flexible configurations +.\" including SNMPv3 access. +.\" +.SS Typed-View Configuration +A similar configuration could also be configured as follows: +.RS +.nf +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 +.fi +.RE +.PP +This mechanism allows multi-subtree (or other non-simple) views to +be used with the one-line \fIrocommunity\fR style of configuration. +.PP +It would also support configuring "write-only" access, should this +be required. +.\" +.\" Expand this example +.\" +.SH SYSTEM INFORMATION +.SS System Group +The full contents of the 'system' group (with the exception of \fCsysUpTime\fR) +can be explicitly configured using: +.RS +.nf +\fI# Override 'uname \-a' and hardcoded system OID - inherently read-only values\fR +sysDescr Universal Turing Machine mk I +sysObjectID .1.3.6.1.4.1.8072.3.2.1066 + +\fI# Override default values from 'configure' - makes these objects read-only\fR +sysContact Alan.Turing@pre\-cs.man.ac.uk +sysName tortoise.turing.com +sysLocation An idea in the mind of AT + +\fI# Standard end-host behaviour\fR +sysServices 72 +.fi +.RE +.SS Host Resources Group +The list of devices probed for potential inclusion in the +\fChrDiskStorageTable\fR (and \fChrDeviceTable\fR) can be amended using +any of the following directives: +.RS +ignoredisk /dev/rdsk/c0t2d0 +.RE +which prevents the device \fI/dev/rdsk/c0t2d0\fR from being scanned, +.RS +.nf +ignoredisk /dev/rdsk/c0t[!6]d0 +ignoredisk /dev/rdsk/c0t[0\-57\-9a\-f]d0 +.fi +.RE +either of which prevents all devices \fI/dev/rdsk/c0t\fRX\fId0\fR +(except .../\fIc0t6d0\fR) from being scanned, +.RS +ignoredisk /dev/rdsk/c1* +.RE +which prevents all devices whose device names start with \fI/dev/rdsk/c1\fR +from being scanned, or +.RS +ignoredisk /dev/rdsk/c?t0d0 +.RE +which prevents all devices \fI/dev/rdsk/c\fRX\fIt0d0\fR +(where 'X' is any single character) from being scanned. +.SS Process Monitoring +The list of services running on a system can be monitored +(and provision made for correcting any problems), using: +.RS +.nf +\fI# At least one web server process must be running at all times\fR +proc httpd +procfix httpd /etc/rc.d/init.d/httpd restart + +\fI# There should never be more than 10 mail processes running +# (more implies a probable mail storm, so shut down the mail system)\fR +proc sendmail 10 +procfix sendmail /etc/rc.d/init.d/sendmail stop + +\fI# There should be a single network management agent running +# ("There can be only one")\fR +proc snmpd 1 1 +.fi +.RE +Also see the "DisMan Event MIB" section later on. +.SS Disk Usage Monitoring +The state of disk storage can be monitored using: +.RS +.nf +includeAllDisks 10% +disk /var 20% +disk /usr 3% +\fI# Keep 100 MB free for crash dumps\fR +disk /mnt/crash 100000 +.fi +.RE +.SS System Load Monitoring +A simple check for an overloaded system might be: +.RS +load 10 +.RE +A more refined check (to allow brief periods of heavy use, +but recognise sustained medium-heavy load) might be: +.RS +load 30 10 5 +.RE +.SS Log File Monitoring +.I TODO +.RS +file FILE [MAXSIZE] +.RE +.RS +logmatch NAME PATH CYCLETIME REGEX +.RE +.SH "ACTIVE MONITORING" +.SS "Notification Handling" +Configuring the agent to report invalid access attempts might be done by: +.RS +.nf +authtrapenable 1 +trapcommunity public +trap2sink localhost +.fi +.RE +Alternatively, the second and third directives could be combined +(and an acknowledgement requested) using: +.RS +informsink localhost public +.RE +A configuration with repeated sink destinations, such as: +.RS +.nf +trapsink localhost +trap2sink localhost +informsink localhost +.fi +.RE +should \fBNOT\fR be used, as this will cause multiple copies +of each trap to be sent to the same trap receiver. +.PP +.I "TODO - discuss SNMPv3 traps" +.RS +trapsess \fIsnmpv3 options\fR localhost:162 +.RE +.PP +.I "TODO - mention trapd access configuration" + +.SS "DisMan Event MIB" +The simplest configuration for active self-monitoring of +the agent, by the agent, for the agent, is probably: +.RS +.nf +\fI# Set up the credentials to retrieve monitored values\fR +createUser _internal MD5 "the first sign of madness" +iquerySecName _internal +rouser _internal + +\fI# Active the standard monitoring entries\fR +defaultMonitors yes +linkUpDownNotifications yes + +\fI# If there's a problem, then tell someone!\fR +trap2sink localhost +.fi +.RE +.PP +The first block sets up a suitable user for retrieving the +information to by monitored, while the following pair of +directives activates various built-in monitoring entries. +.PP +Note that the DisMan directives are not themselves sufficient to +actively report problems - there also needs to be a suitable +destination configured to actually send the resulting notifications to. +.PP +A more detailed monitor example is given by: +.RS +monitor \-u me \-o hrSWRunName "high process memory" hrSWRunPerfMem > 10000 +.RE +.PP +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 \fCmteTriggerFired\fR, +but adding an extra (wildcarded) varbind \fChrSWRunName\fR. +.PP +This entry also specifies an explicit user (\fIme\fR, as defined +earlier) for retrieving the monitored values, and building the trap. +.PP +Objects that could potentially fluctuate around the specified level +are better monitored using a threshold monitor entry: +.RS +monitor \-D \-r 10 "network traffic" ifInOctets 1000000 5000000 +.RE +.PP +This will send a \fCmteTriggerRising\fR trap whenever the incoming +traffic rises above (roughly) 500 kB/s on any network interface, +and a corresponding \fCmteTriggerFalling\fR trap when it falls below +100 kB/s again. +.PP +Note that this monitors the deltas between successive samples (\fI\-D\fR) +rather than the actual sample values themselves. The same effect +could be obtained using: +.RS +monitor \-r 10 "network traffic" ifInOctets \- \- 1000000 5000000 +.RE +.PP +The \fIlinkUpDownNotifications\fR directive above is broadly +equivalent to: +.RS +.nf +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 +.fi +.RE +.PP +This defines the traps to be sent (using \fInotificationEvent\fR), +and explicitly references the relevant notification in the corresponding +monitor entry (rather than using the default DisMan traps). +.PP +The \fIdefaultMonitors\fR directive above is equivalent to a series +of (boolean) monitor entries: +.RS +.nf +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 +.fi +.RE +and will send a trap whenever any of these entries indicate a problem. +.PP +An alternative approach would be to automatically invoke the corresponding +"fix" action: +.RS +.nf +setEvent prFixIt prErrFix = 1 +monitor \-e prFixIt "procTable" prErrorFlag != 0 +.fi +.RE +(and similarly for any of the other \fIdefaultMonitor\fR entries). +.SS "DisMan Schedule MIB" +The agent could be configured to reload its configuration +once an hour, using: +.RS +repeat 3600 versionUpdateConfig.0 = 1 +.RE +.PP +Alternatively this could be configured to be run at specific +times of day (perhaps following rotation of the logs): +.RS +cron 10 0 * * * versionUpdateConfig.0 = 1 +.RE +.PP +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: +.RS +at 13 13 13 * 5 snmpVirus.0 = 1 +.RE +.SH "EXTENDING AGENT FUNCTIONALITY" +.SS "Arbitrary Extension Commands" +.I "Old Style" +.RS +.nf +exec [MIBOID] NAME PROG ARGS" +sh [MIBOID] NAME PROG ARGS" +execfix NAME PROG ARGS" +.fi +.RE +.I "New Style" +.RS +.nf +extend [MIBOID] NAME PROG ARGS" +extendfix [MIBOID] NAME PROG ARGS" +.fi +.RE +.SS "MIB-Specific Extension Commands" +.I One-Shot +.RS +"pass [\-p priority] MIBOID PROG" +.RE +.IP +.I Persistent +.RS +"pass_persist [\-p priority] MIBOID PROG" +.RE +.SS "Embedded Perl Support" +If embedded perl support is enabled in the agent, the default +initialisation is equivalent to the directives: +.RS +.nf +disablePerl false +perlInitFile DATADIR/snmp/snmp_perl.pl +.fi +.RE +The main mechanism for defining embedded perl scripts is the +\fIperl\fR directive. A very simple (if somewhat pointless) +MIB handler could be registered using: +.RS +.nf +perl use Data::Dumper; +perl sub myroutine { print "got called: ",Dumper(@_),"\\n"; } +perl $agent\->register('mylink', '.1.3.6.1.8765', \\&myroutine); +.fi +.RE +.PP +This relies on the \fI$agent\fR object, defined in the example +\fCsnmp_perl.pl\fR file. +.PP +A more realistic MIB handler might be: +.RS +.nf +\fIXXX - WHAT ???\fR +.fi +.RE +Alternatively, this code could be stored in an external file, +and loaded using: +.RS +perl 'do DATADIR/snmp/perl_example.pl'; +.RE +.\" +.\" XXX - does this last entry need the quotes ?? +.\" +.SS Dynamically Loadable Modules +.I TODO +.RS +dlmod NAME PATH" +.RE +.SS "Proxy Support" +A configuration for acting as a simple proxy for two other +SNMP agents (running on remote systems) might be: +.RS +.nf +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 +.fi +.RE +(plus suitable access control entries). +.PP +The same \fIproxy\fR directives would also work with +(incoming) SNMPv3 requests, which can specify a context directly. +It would probably be more sensible to use contexts of +\fIremotehost1\fR and \fIremotehost2\fR - the names above were +chosen to indicate how these directives work together. +.PP +Note that the administrative settings for the proxied request +are specified explicitly, and are independent of the settings +from the incoming request. +.PP +An alternative use for the \fiproxy\fR directive is to pass +part of the OID tree to another agent (either on a remote host +or listening on a different port on the same system), +while handling the rest internally: +.RS +proxy \-v 1 \-c public localhost:6161 .1.3.6.1.4.1.99 +.RE +This mechanism can be used to link together two separate SNMP agents. +.PP +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): +.RS +.nf +\fI# 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\fR +proxy \-v 3 \-l noAuthNoPriv \-u user remotehost .1.3.6.1.3.10 .1.3.6.1.2.1.1 +.fi +.RE +.SS SMUX Sub-Agents +.RS +.nf +smuxsocket 127.0.0.1 +smuxpeer .1.3.6.1.2.1.14 ospf_pass +.fi +.RE +.SS 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: +.RS +.nf +master agentx +agentXSocket /tmp/agentx/master +agentXPerms 0660 0550 nobody snmp +.fi +.RE +.\" +.\" XXX - do numeric UID/GID take a leading '#' ?? +.\" why not?? +.\" +A sub-agent wishing to connect to this master agent would need +the same \fIagentXSocket\fR directive, or the equivalent code: +.RS +.nf +netsnmp_ds_set_string(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_X_SOCKET, + "/tmp/agentx/master"); +.fi +.RE +.PP +A loopback networked AgentX configuration could be set up using: +.RS +.nf +agentXSocket tcp:localhost:705 +agentXTimeout 5 +agentXRetries 2 +.fi +.RE +on the master side, and: +.RS +.nf +agentXSocket tcp:localhost:705 +agentXTimeout 10 +agentXRetries 1 +agentXPingInterval 600 +.fi +.RE +on the client. +.PP +Note that the timeout and retry settings can be asymmetric +for the two directions, and the sub-agent can poll the master agent +at regular intervals (600s = every 10 minutes), to ensure the +connection is still working. +.SH "OTHER CONFIGURATION" +.RS +override sysDescr.0 octet_str "my own sysDescr" +.RE +.RS +injectHandler stash_cache NAME table_iterator +.RE +.SH "FILES" +SYSCONFDIR/snmp/snmpd.conf +.SH "SEE ALSO" +snmpconf(1), snmpd.conf(5), snmp.conf(5), snmp_config(5), snmpd(8), EXAMPLE.conf, netsnmp_config_api(3). +.\" Local Variables: +.\" mode: nroff +.\" End: |