SNMPとは

# はじめに
cactiを使ってネットワーク機器の監視を始めたので、SNMPについて調べてみた。

# SNMPとは
https://blogs.manageengine.jp/itom_what_is_snmp/

* UDP/IPでサーバーやネットワーク機器のリソース状態を監視できるプロトコル

## UDPで上で動く

SNMPデータ
UDPデータ
IPデータ

## 通信形態
SNMPマネージャーとSNMPエージェント

cactiがSNMPマネージャーになり、ネットワーク機器のエージェントと通信して管理情報を収集する

## ポーリングとトラップ
### ポーリング
* マネージャーがエージェントに対して定期的にリクエストを送り、エージェントからその都度管理情報を受け取る
* cactiなどでグラフを描く時など
* **エージェントのUDP161ポートに送る**

### トラップ
* エージェントがマネージャーに対して自発的に管理情報を発信
* トラブルが起こったときに、緊急でマネージャーに伝えるために使う
* **マネージャーのUDP162ポートに送る**


### 管理情報(MIB)
機器ごとに異なる管理情報を統一

### 標準MIBと拡張MIB
#### 標準MIB(mib-2)
* 多くの機器が共通として持っている管理情報
* マネージャーは何もせずに読み取れる

#### 拡張MIB(プライベートMIB)
* ベンダー独自の管理情報が格納
* マネージャーに登録作業が必要

# SNMPのセキュリティ(SNMPv1とSNMPv2)
## SNMPv1とSNMPv2
脆弱。パケットのなかみは　暗号化されない

## コミュニティ名
https://www.infraexpert.com/study/tcpip21.5.html

認証として使われ、機器をグループする役割もある

## アクセス権限
https://www.atmarkit.co.jp/ait/articles/0807/01/news167.html

ネットワーク機器側でコミュニティ名によって、

読み込み、書き込み、読み書き

といった設定ができる

## SNMPv3
セキュリティ機能が大幅に強化、認証や暗号化、細かいアクセス制御が可能


# snmpwalk
https://www.manageengine.jp/products/OpManager/how-to-use-snmpwalk.html

SNMPマネージャ用コマンドの一つ

# SNMP設定ファイル(/etc/snmpd.conf) SNMPエージェントの設定
https://www.infra.jp/squeeze/snmp.html

SNMPエージェントの設定は/etc/snmp/snmpd.confで行います。設定内容は、主にSNMPマネージャに対してどのような情報を公開するかのコントロールです。

http://zvub.hateblo.jp/entry/20161231/1483180199
↑各設定の意味について詳しい

```/etc/snmpd.conf
 37 ####
 38 # First, map the community name "public" into a "security name"
 39 
 40 #       sec.name  source          community
 41 com2sec notConfigUser  default       public
 42 
 43 ####
 44 # Second, map the security name into a group name:
 45 
 46 #       groupName      securityModel securityName
 47 group   notConfigGroup v1           notConfigUser
 48 group   notConfigGroup v2c           notConfigUser
 49 
 50 ####
 51 # Third, create a view for us to let the group have rights to:
 52 
 53 # Make at least  snmpwalk -v 1 localhost -c public system fast again.
 54 #       name           incl/excl     subtree         mask(optional)
 55 view    systemview    included   .1.3.6.1.2.1.1
 56 view    systemview    included   .1.3.6.1.2.1.25.1.1
 57 
 58 ####
 59 # Finally, grant the group read-only access to the systemview view.
 60 
 61 #       group          context sec.model sec.level prefix read   write  notif
 62 access  notConfigGroup ""      any       noauth    exact  systemview none none

```


### com2sec 
http://changineer.info/server/monitoring/monitoring_snmpd.html

例

```
#       sec.name  source          community
com2sec local     localhost       private
com2sec mynet     192.168.0.0/24  public
com2sec public    default         public
```
* マネージャーからコミュニティへのアクセスが**どのNWから、どんな権限で**アクセスできるのかを定義している
* defaultはどこからもでそのコミュニティにアクセスできる。

**sec.nameはセキュリティnameで、以下で権限を設定する。**


## group
```
 46 #       groupName      securityModel securityName
 47 group   notConfigGroup v1            notConfigUser
 48 group   notConfigGroup v2c           notConfigUser
```
com2sec で定義したセキュリティ名に対して、

「どのバージョンのsnmp通信を許可するか」を定義する部分。

バージョンは securityModel で指定し、それぞれが以下のように対応する。

・SNMP version1 : v1
・SNMP version2 : v2c
・SNMP version3 : usm

## view
 SNMP で取得可能な情報の範囲を指定

```
 54 #       name           incl/excl     subtree         mask(optional)
 55 view    systemview    included   .1.3.6.1.2.1.1
 56 view    systemview    included   .1.3.6.1.2.1.25.1.1
 57 
```
"subtree" 列で指定したオブジェクトID を基準に情報を取得するよう定義する。"type" を「included」とすると "subtree" で指定したOIDを含む範囲の指定となり「excluded」とすると、"subtree" で指定したOIDの範囲外の指定となる。

## access
セキュリティnameの権限設定

```
 61 #       group          context sec.model sec.level prefix read   write  notif
 62 access  notConfigGroup ""      any       noauth    exact  systemview none none
```