Debian: Установка и настройка NET-SNMP

http://pro-voip.com.ua net-snmpЗдесь все манипуляции проводятся на Debian Wheezy.

Установка net-snmp

root@deb# apt-get install snmp snmpd

snmp — SNMP (Simple Network Management Protocol) applications
snmpd — SNMP (Simple Network Management Protocol) agents

snmpd.conf — конфигурационный файл для Net-SNMP SNMP агента.

Редактируем файл /etc/snmp/snmpd.conf:

root@deb# nano /etc/snmp/snmpd.conf

Рестартуем демон snmpd:

root@deb# service snmpd restart

Проверяем (например):

root@deb# snmpwalk -v2c -c public localhost

Контроль доступа к snmpd можно организовать двумя способами:

  • Traditional Access Control — традиционный контроль доступа
  • VACM Configuration — View-Based Access Control Model

 

SNMPv1 и SNMPv2c

 

Традиционный контроль доступа

Создание read-only и read-write community:

rocommunity COMMUNITY [SOURCE [OID | -V VIEW [CONTEXT]]]
rwcommunity COMMUNITY [SOURCE [OID | -V VIEW [CONTEXT]]]

Создать read-only комьюнити с именем public, дать доступ ко всему дереву OID’ов, не ограничивая доступ к snmpd:

rocommunity public

Создать read-only комьюнити с именем public, дать доступ ко всему дереву OID’ов, разрешив доступ к snmpd только localhost:

rocommunity public localhost

Создать read-only комьюнити public, разрешить доступ с localhost’а к ветке .1.3.6.1.2.1.1:

rocommunity public localhost .1.3.6.1.2.1.1

Если нам нужно объединить несколько разных веток дерева OID’ов для одного community, используем именованые «view»:

view systemview included .1.3.6.1.2.1.1
view systemview included .1.3.6.1.2.1.2

rocommunity public localhost -V systemview

Если нужна более гибкое управление доступом к SNMP, следует использовать другую модель управления — VACM.

 

Контроль доступа VACM

Для того, чтобы настроить доступ к snmpd по модели VACM, необходимо определить 4 директивы:

  • com2sec
  • group
  • view
  • access

com2sec определяет некое имя (security name), к нему привязываются ip-адрес и комьюнити, с которыми можно получить доступ к snmpd:

com2sec  [-Cn CONTEXT] SECNAME SOURCE COMMUNITY

SECNAME — security name;
SOURCE — имя хоста, ip-адрес хоста, или подсеть в формате ip/mask, с которого разрешен доступ к snmpd;
COMMUNITY — строка community;
CONTEXT — используется в SNMPv3

group определяет группу, к которой привязываются ранее созданные secname:

group GROUP {v1|v2c|usm|tsm|ksm} SECNAME

view определяет ветки дерева MIB, к которым будем давать доступ:

view VNAME TYPE OID [MASK]

VNAME — произвольное имя вьюшки. Имена могут повторятся, таким образом создается вьюшка в набором «веток» дерева OID’ов;
TYPE — included или excluded — действие: включить или исключить ветку с view;
OID — определенный OID или ветка;

access даем ранее созданной группе права на доступ к просмотру/записи определенной вьюшки — связка group — view:

access GROUP CONTEXT {any|v1|v2c|usm|tsm|ksm} LEVEL PREFX READ WRITE NOTIFY

GROUP — имя группы, определенное в шаге 2;
CONTEXT — default context —  «»

Пример:

«Пользователь» local — это пользователь локалхоста с комьюнити secret33, который входит в группу rwgroup. Пользователи группы rwgroup имеют read-write права на view с названием all. Вьюшке all соответствует дерево .1.

«Пользователь» rouser1 может получить доступ с сети 10.10.10.0/24, а «пользователь» rouser2 — с ip-адреса 11.11.11.11/32. Комьюнити — public. «Пользователи» rouser1 и rouser2 входят в группу rogroup. Группа rogroup имеет read-only права на view с названием systemview, в которую входят такие ветки дерева — 1.3.6.1.2.1.1, 1.3.6.1.2.1.2, 1.3.6.1.2.1.25:

###############################################################################
# Access Control - VACM
###############################################################################

####
# First, map the "community name" into a "security name"
#          sec.name    source            community
com2sec    local       localhost         secret33
com2sec    rouser1     10.10.10.0/24     public
com2sec    rouser2     11.11.11.11/32    public

####
# Second, map the "security name" into a "group name":
#        groupName    securityModel    securityName
group    rwgroup      v2c              local
group    rogroup      v2c              rouser1
group    rogroup      v2c              rouser2

####
# Third, create a view for us to let the group have rights to:
#       name          incl/excl   subtree             mask(optional)
view    all           included    .1
view    systemview    included    .1.3.6.1.2.1.1
view    systemview    included    .1.3.6.1.2.1.2
view    systemview    included    .1.3.6.1.2.1.25

####
# Finally, grant the groups access to the view:
#         group        context    sec.model    sec.level    prefix    read            write    notif
access    rwgroup      ""         any          noauth       exact     all             all      none
access    rogroup      ""         any          noauth       exact     systemview      none     none

# -----------------------------------------------------------------------------

 

SNMPv3

 

В SNMPv3 главным действующим «лицом» выступает не community, а user. Поэтому перед манипуляциями с контролем доступа, нужно сначала создать пользователя. При создании пользователя, мы также определяем уровень безопасности.

В SNMPv3 предусмотрено три уровня безопасности:

  • noAuthNoPriv — без аутентификации, без шифрования
  • authNoPriv — с аутентификацией (SHA|MD5), без шифрования
  • authPriv — с аутентификацией (SHA|MD5),с шифрованием (DES|AES)

Тип аутентификации — MD5 или SHA; Алгоритм шифрования — DES или AES;
SHA-аутентификация и DES/AES-шифрование используют OpenSSL — OpenSSL должен быть установлен, snmpd должен иметь поддержку OpenSSL.

Узнать, с какими опциями был собран net-snmp можно с помощью следующей команды:

root@deb# net-snmp-config --configure-options

Если —with-openssl в выводе есть, значит net-snmp собран с поддержкой openssl, если кто не догадался.

MD5 не использует OpenSSL.

 

Создание пользователя snmpv3

Для этого используется следующая команда:

net-snmp-config  —create-snmpv3-user [-ro] [-A authpass] [-X privpass] [-a MD5|SHA] [-x DES|AES] [username]

Минимальная длина authpass и privpass — 8 символов.

Сначала останавливаем демон snmpd:

root@deb# service snmpd stop

Затем создаем пользователя, например, rouserv3:

root@deb# net-snmp-config --create-snmpv3-user -ro -A testtest -X testtest -a MD5 -x DES rouserv3
adding the following line to /var/lib/snmp/snmpd.conf:
   createUser rouserv3 MD5 "testtest" DES testtest
adding the following line to /usr/share/snmp/snmpd.conf:
   rouser rouserv3

При этом создается 2 записи в двух дефолтных конфигурационных файлах, о чем и пишет net-snmp-config в своем выводе. Если вы, не запуская snmpd, посмотрите на файл /var/lib/snmp/snmpd.conf, то в конце файла вы действительно увидите там строку «createUser rouserv3 MD5 «testtest» DES testtest». При запуске демона snmpd эта строка удаляется, появляется вместо нее ключ.

Запись «rouser rouserv3» в файле /usr/share/snmp/snmpd.conf — это настройка контроля доступа. Мало ведь создать пользователя, нужно дать ему какие-то права. Запись «rouser rouserv3» можно перенести в /etc/snmp/snmpd.conf (что я и делаю), а дальше использовать либо традиционный контроль доступа (оставив эту строку «rouser rouserv3»), либо VACM (по аналогии, как это настраивалось выше с SNMPv2c, только там были rocommunity и rwcommunity, а здесь rouser и rwuser).

 

Традиционный контроль доступа

Создание read-only и read-write-пользователя:

rouser USER [noauth|auth|priv [OID | -V VIEW [CONTEXT]]]
rwuser USER [noauth|auth|priv [OID | -V VIEW [CONTEXT]]]

noauth, auth, priv — помним про три уровня безопасности? было описано выше. Как по мне, так тут не хватает опции SOURCE, как в варианте в SNMP v1 и v2c с комьюнити. Для ограничения доступа с определенных ip-адресов нужно будет использовать фаервол. Ну и дальше примеры.

Дать пользователю rouser1 read-only права на ветку .1.3.6.1.2.1.1, без аутентификации и без шифрования:

rouser    rouser1    noauth    .1.3.6.1.2.1.1

Проверка:

root@deb# snmpwalk -v3 -u rouser1 -l noAuthNoPriv localhost

Дать пользователю rouser1 read-only права на ветку .1.3.6.1.2.1.1, с аутентификацией, но без шифрования:

rouser    rouser1    auth    .1.3.6.1.2.1.1

Проверка:

root@deb# snmpwalk -v3 -u rouser1 -l authNoPriv -a MD5 -A testtest localhost

Дать пользователю rouser1 read-only права на ветку .1.3.6.1.2.1.1, с аутентификацией и с шифрованием:

rouser    rouser1    priv    .1.3.6.1.2.1.1

Проверка:

root@deb# snmpwalk -v3 -u rouser1 -l authPriv -a MD5 -A testtest -x DES -X testtest localhost

 

Контроль доступа VACM

В варианте с SNMP v1 и v2c для настройки VACM нужно было использовать 4 директивы: com2sec, group, view и access. В варианте с SNMP v3 — только три, com2sec использовать не нужно, у нас уже создан snmpv3-пользователь (он уже и есть «security name»), которого можно добавить в группу.

###############################################################################
# Access Control - VACM for SNMPv3
###############################################################################

####
# First, создаем snmpv3-пользователей, как было описано выше.

####
# Second, map the "security name" into a "group name":
#        groupName    securityModel    securityName
group    rwgroup      usm              rwuser1
group    rogroup      usm              rouser1

####
# Third, create a view for us to let the group have rights to:
#       name          incl/excl   subtree             mask(optional)
view    all           included    .1
view    systemview    included    .1.3.6.1.2.1.1
view    systemview    included    .1.3.6.1.2.1.2
view    systemview    included    .1.3.6.1.2.1.25

####
# Finally, grant the groups access to the view:
#         group        context    sec.model    sec.level    prefix    read            write    notif
access    rwgroup      ""         any          noauth       exact     all             all      none
access    rogroup      ""         any          priv         exact     systemview      none     none

Отличие от настройки VACM в SNMP v1 и v2c — это указание securityModel — usm в директве group и указани sec.level в директиве access (sec.level может быть noauth, auth или priv)

snmpwalk

Опрос оборудования с помощью утилиты snmpwalk для SNMPv3:

# snmpwalk -v3 -l authPriv -u username-SNMPv3 -a SHA -A authpassword -x AES -X encryptionpassword 10.10.10.10