# SNMPv3
En esta guía se explica cómo configurar un servidor con SNMPv3 deshabilitando las versiones v1 y v2c.
## Comandos básicos
1. Asegurarse de que no existe ningún firewall que impida las conexiones a los puertos 161 y 162 UDP y TCP, aquí unos ejemplos para **ufw, firewalld e iptables**:
```
ufw allow 161/udp
ufw allow 162/udp
ufw allow 162/tcp
ufw allow 161/tcp
iptables -I INPUT -p udp -m udp --sport 161 -j ACCEPT
iptables -I INPUT -p udp -m udp --sport 162 -j ACCEPT
iptables -I INPUT -p udp -m udp --dport 161 -j ACCEPT
iptables -I INPUT -p udp -m udp --dport 162 -j ACCEPT
iptables -I INPUT -p tcp -m tcp --sport 161 -j ACCEPT
iptables -I INPUT -p tcp -m tcp --sport 162 -j ACCEPT
iptables -I INPUT -p tcp -m tcp --dport 161 -j ACCEPT
iptables -I INPUT -p tcp -m tcp --dport 162 -j ACCEPT
firewall-cmd --zone=public --add-port=161/udp --permanent
firewall-cmd --zone=public --add-port=162/udp --permanent
firewall-cmd --zone=public --add-port=161/tcp --permanent
firewall-cmd --zone=public --add-port=162/tcp --permanent
```
2. Instalar los paquetes necesarios
```
apt update
apt install snmp snmpd libsnmp-dev snmp-mibs-downloader
```
## Configuración del servidor
1. Desactivar la carga automática de MIB para que en los comandos de consulta **snmpwalk** no se carguen todas las MIBs de golpe y consuma así demasiados recursos
```
nano /etc/snmp/snmp.conf
(comentar la siguiente línea)
#mibs :
```
2. Crear las credenciales de usuario y contraseñas necesarias para cifrar las conexiones SNMP v3 (se necesita parar el servicio)
```
systemctl stop snmpd
net-snmp-create-v3-user -ro -A [authpass] -X [privpass] -a [auth_algorithm] -x [encryption_algorithm] [username]
systemctl start snmpd
```
- **authpass**: clave que se utiliza para autenticar los mensajes entre el gestor y el agente SNMP
- **auth_algorithm**: algoritmo de autenticación que se usa junto con la **authpass** para verficiar la autenticidad de los mensajes, que puede estar entre *MD5, SHA, SHA-512, SHA-384, SHA-256* ó *SHA-224*
- **privpass**: clave que se utiliza para el cifrado y el descifrado de los datos en la comunicación entre el gestor y el agente SNMP
- **encryption_algorithm**: algoritmo de cifrado que se usa junto con la **privpass** para cifrar y descifrar los datos, que puede estar entre *DES* o *AES*
- **username**: nombre de usuario necesario para la autenticación
```
net-snmp-create-v3-user -ro -A myauthpass -X myprivpass -a SHA -x AES myuser
```
3. Modificar el fichero **/etc/snmp/snmpd.conf** de configuración de SNMP y añadir o modificar las siguientes líneas
- Permitir todas las conexiones SNMP al servidor
```
agentAddress udp:161,udp6:[::1]:161
```
- Permitir la respuesta de todas las OID que comiencen por **.1** en las consultas, es decir, todas
```
view all included .1
```
- Desactivar las versiones v1 y v2c de SNMP comentando las líneas que comiencen por lo siguiente
```
# rocommunity ...
# rocommunity6 ...
```
- Definir las credenciales anteriores
```
createUser myuser MD5 myauthpass DES myprivpass
rouser myuser
```
- Reiniciar el servicio
```
systemctl restart snmpd
```
4. Se comprueba la correcta configuración con **snmpwalk** desde el mismo servidor
```
snmpwalk -v3 -l authPriv -u myuser -a MD5 -A myauthpass -x DES -X myprivpass 127.0.0.1
```
## Configuración del cliente
1. Hay que instalar los paquetes mencionados en el primer apartado
2. Realizar una consulta de prueba para cofirmar la comunicación SNMP
```
snmpwalk -v3 -l authPriv -u myuser -a MD5 -A myauthpass -x DES -X myprivpass IP_SERVER
```