# SNMP 

![]()

In this tutorial we're going to look at how we can setup snmp for multiple operating systems: 

## **Linux SNMP**

First we need to install the required dependencies:
    
    
    root@home:~# apt install snmpd snmp
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    The following additional packages will be installed:
      libmariadb3 libsnmp-base libsnmp30 mariadb-common mysql-common
    Suggested packages:
      snmp-mibs-downloader snmptrapd
    The following NEW packages will be installed:
      libmariadb3 libsnmp-base libsnmp30 mariadb-common mysql-common snmp snmpd
    0 upgraded, 7 newly installed, 0 to remove and 0 not upgraded.
    Need to get 4,339 kB of archives.
    After this operation, 8,513 kB of additional disk space will be used.
    Do you want to continue? [Y/n] y	
    
    

Then we're going to get a snmp configuration sample along with the distro binary file:
    
    
    root@home:~# wget https://void.yt/snmp/snmpd.conf -O /etc/snmp/snmpd.conf
    --2021-04-30 19:42:15--  https://void.yt/snmp/snmpd.conf
    Resolving void.yt (void.yt)... 85.171.172.151
    Connecting to void.yt (void.yt)|85.171.172.151|:443... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 1522 (1.5K) [application/octet-stream]
    Saving to: ‘/etc/snmp/snmpd.conf’
    
    /etc/snmp/snmpd.conf                100%[=================================================================>]   1.49K  --.-KB/s    in 0s
    
    2021-04-30 19:42:16 (11.3 MB/s) - ‘/etc/snmp/snmpd.conf’ saved [1522/1522]
    
    root@home:~# vim /etc/snmp/snmpd.conf
    	
    

Edit this configuration however you like, then :wq to save and quit out of vim:
    
    
    #  Listen for connections on all interfaces (both IPv4 *and* IPv6)
    agentAddress udp:161,udp6:[::1]:161
    
    #  Full view access
    view   all         included   .1
    
    #  system + hrSystem groups only
    view   systemonly  included   .1.3.6.1.2.1.1
    view   systemonly  included   .1.3.6.1.2.1.25.1
    
    #  Default access to full view
    rocommunity void.yt  default    -V all
    
    #  Default access to basic system info
    #rocommunity public  default    -V systemonly
    
    #  System contact and location
    #syslocation Rack/Room/Building, Street, City, Country [GPSX,Y]
    syslocation Nowhere
    syscontact Nothing 
    
    #  Disk Monitoring
    disk       /     10000
    disk       /var  5%
    includeAllDisks  10%
    
    # Unacceptable 1-, 5-, and 15-minute load averages
    load   12 10 5
    
    # This line allows Observium to detect the host OS if the distro script is installed
    extend .1.3.6.1.4.1.2021.7890.1 distro /usr/local/bin/distro
    
    # This lines allows Observium to detect hardware, vendor and serial
    extend .1.3.6.1.4.1.2021.7890.2 hardware /bin/cat /sys/devices/virtual/dmi/id/product_name
    extend .1.3.6.1.4.1.2021.7890.3 vendor   /bin/cat /sys/devices/virtual/dmi/id/sys_vendor
    extend .1.3.6.1.4.1.2021.7890.4 serial   /bin/cat /sys/devices/virtual/dmi/id/product_serial
    
    # This line allows Observium to collect an accurate uptime
    extend uptime /bin/cat /proc/uptime
    
    # This line enables Observium's ifAlias description injection
    #pass_persist .1.3.6.1.2.1.31.1.1.1.18 /usr/local/bin/ifAlias_persist
    	
    

Make sure you edit the rocommunity line properly, **this contains the community string** (the password to view the system infos) so replace it with '**rocommunity MyP@$$W0RD default -V all** '

After you configured snmp, make sure you have the **/usr/bin/distro** bashscript:
    
    
    root@home:~# wget https://void.yt/snmp/distro -O /usr/local/bin/distro
    --2021-04-30 19:49:30--  https://void.yt/snmp/distro
    Resolving void.yt (void.yt)... 85.171.172.151
    Connecting to void.yt (void.yt)|85.171.172.151|:443... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 4677 (4.6K) [application/octet-stream]
    Saving to: ‘/usr/local/bin/distro’
    
    /usr/local/bin/distro              100%[================================================================>]   4.57K  --.-KB/s    in 0s
    
    2021-04-30 19:49:30 (25.8 MB/s) - ‘/usr/local/bin/distro’ saved [4677/4677]
    	
    root@home:~# chmod +x /usr/local/bin/distro
    root@home:~# /usr/local/bin/distro
    Debian 10.9
    
    root@home:~# wget https://void.yt/snmp/bandwidth.sh -O /usr/local/bin/bandwidth
    root@home:~# chmod +x /usr/local/bin/bandwidth
    root@home:~# apt install vnstat bc -y ; systemctl enable --now vnstat
    root@home:~# /usr/local/bin/bandwidth
    
    
    

Once that's done, simply restart the snmpd systemd service since we changed the default config:
    
    
    root@home:~# systemctl restart snmpd
    	
    

And that's it ! Now add it to your monitoring solution such as [Observium](../observium/index.md):

![](1.png) ![](2.png) ![](3.png)

Once the device is added, you need to wait for the device to get automatically polled, which usually takes 5-10 minutes on observium. 

![](4.png)

Check out my zabbix tutorial on how i setup a snmp OID to monitor the monthly bandwidth usage of my VPS [here ](../zabbix/index.md)

## **Windows SNMP**

First add the windows10 SNMP feature:

![](5.png) ![](6.png)

Then configure snmp itself with your readonly (RO) community string:

![](7.png) ![](8.png)

If you want you can select to only accept snmp packets from certain hosts for which you need to specify which IPs to filter. Next you need to go into Windows' firewall to enable the SNMP packets:
    
    
    netsh advfirewall firewall add rule name="SNMP UDP Port 161 In" dir=in action=allow protocol=UDP localport=161
    
    netsh advfirewall firewall add rule name="SNMP UDP Port 161 Out" dir=out action=allow protocol=UDP localport=161
    
    netsh advfirewall firewall add rule name="SNMPTRAP UDP Port 162 In" dir=in action=allow protocol=UDP localport=162
    
    netsh advfirewall firewall add rule name=" SNMPTRAP UDP Port 162 Out" dir=out action=allow protocol=UDP localport=162
    
    

![](9.png)

Once that's done, you should be able to add it to your monitoring tool: 

![](10.png) ![](11.png)

## **PfSense SNMP**

Same thing as our previous 2 examples, let enable and configure snmp:

![](12.png)

And then just add the host:

![](13.png) ![](14.png) ![](15.png)

And that's it! We managed to add 3 different hosts to our observium instance to monitor via the SNMP protocol.

