SNMP: Desativando as versões 1 e 2C do snmp e habilitando a versão 3

icon_02As versões 1 e 2C do protocolo snmp não possuem suporte à autenticação nem à privacidade.

A autenticação limita o acesso do serviço ao conjunto  de usuários  que possuem uma senha cadastrada no daemon do snmpd, e a privacidade garante que, em caso de interceptação, os dados trocados entre agentes e gerentes não poderão ser lidos.

Atualmente a grande maioria dos sistemas de gerenciamento e monitoramento, assim como quase todos os ativos de rede e sistemas operacionais já suportam a versão 3 do protocolo snmp, desta forma, na maioria das vezes já podemos desativar o suporte as versões 1 e 2c.

Este artigo, destina-se descrever o processo de desabilitar estas versões do protocolo snmp no Ubuntu 12.0.4 e habilitar a versão 3.

Desativando as versões 1 e 2C

Neste caso devemos editar o arquivo /etc/snmp/snmpd.conf e comentar as linhas abaixo:

## 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 basic system info
#rocommunity public default -V systemonly
...

## Full read-only access for SNMPv3
#rouser authOnlyUser

Em seguida, devemos reiniciar o daemon do snmp

sudo service snmpd restart

Para verificar se os ajustes funcionaram,  podemos utilizar o comando abaixo para realizar uma consulta ao daemon

snmpwalk -v1 -cpublic localhost

Que depois de algum tempo deve retornar um erro de timeout

 Timeout: No Response from localhost

Nesta caso conseguimos desabilitar a versão 1, podemos repetir o comando acima substituindo -v1 por -v2c e verificar se teremos o mesmo resultado

Habilitando a versão 3 do protocolo

Para habilitar o uso desta versão do protocolo devemos editar o arquivo /etc/snmp/snmpd.conf e acrescentes algumas informações.

Neste arquivo, devemos acrescentar as configurações sobre os usuários, a autenticação, assim como, o tipo de criptografia utilizada para proteger a troca de dados,  o nível de acesso (leitura/escrita) do usuário e a partir de qual ramo da MIB o usuário poderá manipular as OIDs.

O primeiro passo será criar as contas dos usuários:

##==---------------------------------------------------
# Lista de Usuarios
##==---------------------------------------------------

# sgsbasico - nao utiliza nenhum tipo de autenticação
# ou criptografia
createUser sgsbasico

# sgscoletor - utiliza autenticacao MD5, mas nao
# utiliza criptografia
createUser sgscoletor MD5 tamandua

# sgsadmin - utilizar autenticacao MD5
# e criptografia DES
createUser sgsadmin MD5 tamandua DES bandeira

Neste caso criamos três contas:

  1. sgsbasico, que não utiliza nenhum tipo de autenticação ou criptografia
  2. sgscoletor, que utiliza autenticação MD5, mas nao utiliza criptografia
  3. sgsadmin, utiliza autenticação MD5 e criptografia DES
##==--------------------------------------------------
# Restricoes aplicadas aos usuarios
##==--------------------------------------------------

# sgsbasico - consegue consultar apenas o ramo
#     - 1.3.6.1.2.1.1 - SNMP MIB-2 System
rouser sgsbasico noauth 1.3.6.1.2.1.1

# sgscoletor - consegue consultar todo o ramo
#     - 1.3.6.1.2.1 - SNMP MIB-2
rouser sgscoletor auth 1.3.6.1.2.1

# sgsadmin - consulta e atribui valores as OIDs do ramo
#      - 1.3.6.1.2.1 - SNMP MIB-2
rwuser sgsadmin priv 1.3.6.1.2.1

Para cada usuário foi atribuído um nível de acesso:

  1. sgsbasico,  consegue consultar apenas o ramo – 1.3.6.1.2.1.1 – SNMP MIB-2 System
  2. sgscoletor,  consegue consultar todo o ramo – 1.3.6.1.2.1 – SNMP MIB-2
  3. sgsadmin, consulta e atribui valores as OIDs do ramo – 1.3.6.1.2.1 – SNMP MIB-2

Depois de editar e salvar o arquivo devemos reiniciar o daemon do snmpd


service  snmpd  restart

E agora já podemos testar os três acessos. Primeiro vamos testar a conta do usuário sgsbasico:


snmpget -v 3 -u sgsbasico -l NoauthNoPriv 
localhost 1.3.6.1.2.1.1.1.0

O comando acima deve produzir algo semelhante à:


iso.3.6.1.2.1.1.1.0 = STRING: "Linux enterprise 3.8.0-35-generic 
#52~precise1-Ubuntu SMP Thu Jan 30 17:24:40 UTC 2014 x86_64"

Em seguida podemos testar a conta do usuário sgscoletor.


snmpget -v 3 -u sgscoletor -l NoauthNoPriv 
localhost 1.3.6.1.2.1.1.1.0

Se tentarmos realizar uma consulta com este usuário, mas sem passar a senha de autenticação, o comando acima deve produzir algo semelhante à:


Error in packet
Reason: authorizationError (access denied to that object)

Para funcionar devemos fornecer a senha;


snmpget -v 3 -u sgscoletor -l authNoPriv 
-a MD5 -A senhaAuth localhost 1.3.6.1.2.1.1.1.0

O comando acima, deve produzir algo semelhante à:


iso.3.6.1.2.1.1.1.0 = STRING: "Linux enterprise 3.8.0-35-generic 
#52~precise1-Ubuntu SMP Thu Jan 30 17:24:40 UTC 2014 x86_64"

Agora podemos testar a ultima conta.


snmpget -v 3 -u sgsadmin -l authPriv 
-a MD5 -A senhaAuth -x DES -X chaveCriptografica 
localhost .1.3.6.1.2.1.1.1.0

O comando acima deve produzir algo semelhante à:


iso.3.6.1.2.1.1.1.0 = STRING: "Linux enterprise 3.8.0-35-generic 
#52~precise1-Ubuntu SMP Thu Jan 30 17:24:40 UTC 2014 x86_64"

Com estes passos garantimos que o daemon do snmp, só responderá consultas que utilizem a versão 3 do protocolo, mas somente se o usuário estiver cadastrado e o acesso liberado.