Confusion with snmp trap
Categories:
Demystifying SNMP Traps: Configuration and Troubleshooting on Linux

Understand and configure SNMP traps on Linux systems using Net-SNMP, troubleshoot common issues, and ensure effective network monitoring.
SNMP (Simple Network Management Protocol) traps are asynchronous notifications sent from an SNMP agent to an SNMP manager when a significant event occurs on a network device. Unlike polling, where the manager actively requests information, traps allow devices to proactively alert the manager about critical situations, such as a disk going full, a service stopping, or a hardware failure. This article will guide you through setting up and troubleshooting SNMP traps on Linux systems, primarily using the Net-SNMP suite.
Understanding SNMP Trap Architecture
Before diving into configuration, it's crucial to grasp the basic architecture of how SNMP traps work. A device running an SNMP agent (e.g., a Linux server with snmpd
) is configured to send traps. When a predefined event triggers, the agent generates a trap message and sends it to one or more designated SNMP managers (trap receivers). The manager then processes this trap, which might involve logging, alerting, or triggering automated responses.
flowchart TD A[SNMP Agent (e.g., Linux Server)] --> B{Event Occurs} B -- Trigger --> C[Generate SNMP Trap] C -- Send Trap (UDP 162) --> D[SNMP Manager (Trap Receiver)] D -- Process Trap --> E[Log / Alert / Action]
Basic SNMP Trap Flow
Configuring the SNMP Agent to Send Traps
To send traps from a Linux machine, you need to configure the snmpd
daemon. The primary configuration file is typically /etc/snmp/snmpd.conf
. You'll need to specify the trap receiver's IP address and the community string to be used for sending traps. This ensures that traps are sent to the correct destination and with the appropriate authentication.
# Open the snmpd.conf file
sudo nano /etc/snmp/snmpd.conf
Opening the Net-SNMP configuration file
Inside snmpd.conf
, add or modify the following lines. Replace your_manager_ip
with the IP address of your SNMP trap receiver and your_community_string
with the desired community string (e.g., public
or a more secure one).
# Direct traps to a specific host
trapsink your_manager_ip your_community_string
# Or for SNMPv3 traps (more secure)
# trapfunk your_manager_ip
# createUser myuser SHA "authpass" AES "privpass"
# rouser myuser authpriv
# authtrapenable 1
Example snmpd.conf
entries for trap sending
After making changes, restart the snmpd
service for them to take effect.
# Restart the SNMP daemon
sudo systemctl restart snmpd
Restarting the SNMP daemon
localhost
as your_manager_ip
and set up a trap receiver on the same machine to verify that traps are being generated correctly before sending them across the network.Configuring the SNMP Manager to Receive Traps
On the SNMP manager side, you need a trap receiver daemon to listen for incoming traps. Net-SNMP provides snmptrapd
for this purpose. The configuration for snmptrapd
is typically in /etc/snmp/snmptrapd.conf
.
# Open the snmptrapd.conf file
sudo nano /etc/snmp/snmptrapd.conf
Opening the Net-SNMP trap receiver configuration file
Add the following line to snmptrapd.conf
to allow traps from any host using the specified community string. For production environments, it's recommended to restrict authCommunity
to specific IP addresses.
# Allow traps from any host using 'your_community_string'
authCommunity log,execute,net public
# Or, more securely, specify allowed hosts:
# authCommunity log,execute,net your_community_string source_ip_address
# Log all traps to a file
trapdlogfile /var/log/snmptrap/snmptrap.log
# Do not fork into background (useful for debugging)
# donotfork yes
# Do not log to syslog (if logging to file)
# disableAuthorization yes
Example snmptrapd.conf
entries for trap receiving
Ensure the snmptrapd
service is enabled and running. You might need to create the log directory if it doesn't exist.
# Create log directory if it doesn't exist
sudo mkdir -p /var/log/snmptrap
sudo chown snmptrap:snmptrap /var/log/snmptrap # Adjust user/group as per your system
# Enable and start the snmptrapd service
sudo systemctl enable snmptrapd
sudo systemctl start snmptrapd
Enabling and starting the SNMP trap receiver
firewalld
, ufw
) allows UDP traffic on port 162 (for traps) and potentially UDP port 161 (for polling) between your SNMP agents and managers. Failure to do so is a common cause of trap delivery issues.Troubleshooting Common SNMP Trap Issues
SNMP trap configuration can be finicky. Here are some common issues and how to troubleshoot them:
1. Check Firewall Rules
Verify that UDP port 162 is open on both the sending agent and the receiving manager. Use sudo firewall-cmd --list-all
(for firewalld
) or sudo ufw status
(for ufw
) to check, and add rules if necessary.
2. Verify snmpd
and snmptrapd
Status
Ensure both services are running without errors using sudo systemctl status snmpd
and sudo systemctl status snmptrapd
. Check their logs (journalctl -u snmpd
and journalctl -u snmptrapd
) for any error messages.
3. Test Trap Sending Manually
Use the snmptrap
command-line utility to send a test trap from the agent. This bypasses the snmpd
daemon's event-triggered traps and directly tests connectivity and receiver configuration. Replace your_manager_ip
and your_community_string
accordingly.
4. Check Community Strings
Ensure the community string configured in snmpd.conf
(for sending) matches the authCommunity
setting in snmptrapd.conf
(for receiving). Mismatched community strings are a frequent cause of traps being dropped.
5. Monitor Network Traffic
Use tcpdump
or wireshark
to capture UDP traffic on port 162 on both the agent and manager. This helps confirm if traps are leaving the agent and arriving at the manager. For example: sudo tcpdump -i any udp port 162
.
6. Review snmptrapd
Log File
If trapdlogfile
is configured in snmptrapd.conf
, check the specified log file (e.g., /var/log/snmptrap/snmptrap.log
) for incoming trap messages. If traps are arriving but not being processed as expected, this log will provide clues.
# Example of sending a test trap manually
snmptrap -v 2c -c your_community_string your_manager_ip:162 '' .1.3.6.1.4.1.8072.999.999 s "Test Trap from Linux"
Sending a manual SNMPv2c test trap
.1.3.6.1.4.1.8072.999.999
used in the manual trap example is a custom OID. You can use any valid OID for testing, but ensure it's not one that would trigger an actual system event.