1
Personalización
groales edited this page 2025-12-04 10:20:42 +01:00

Personalización

Configuración avanzada de NetBox: LDAP, plugins, scripts y más.

Configuración de Archivos

NetBox usa /config/ para almacenar configuración personalizada.

Acceder a Configuración

# Entrar al contenedor
docker exec -it netbox bash

# Navegar a config
cd /config

# Ver archivos
ls -la

Archivos importantes:

  • configuration.py - Configuración principal
  • ldap_config.py - Autenticación LDAP (si usas LDAP)
  • plugins/ - Directorio de plugins
  • reports/ - Scripts de reportes personalizados
  • scripts/ - Scripts ejecutables desde UI

Autenticación LDAP

Configurar LDAP

Edita /config/ldap_config.py:

import ldap
from django_auth_ldap.config import LDAPSearch, GroupOfNamesType

# Servidor LDAP
AUTH_LDAP_SERVER_URI = "ldap://ldap.example.com"

# Credenciales para bind
AUTH_LDAP_BIND_DN = "CN=netbox,OU=Services,DC=example,DC=com"
AUTH_LDAP_BIND_PASSWORD = "password"

# Búsqueda de usuarios
AUTH_LDAP_USER_SEARCH = LDAPSearch(
    "OU=Users,DC=example,DC=com",
    ldap.SCOPE_SUBTREE,
    "(sAMAccountName=%(user)s)"
)

# Mapeo de atributos
AUTH_LDAP_USER_ATTR_MAP = {
    "first_name": "givenName",
    "last_name": "sn",
    "email": "mail"
}

# Grupos
AUTH_LDAP_GROUP_SEARCH = LDAPSearch(
    "OU=Groups,DC=example,DC=com",
    ldap.SCOPE_SUBTREE,
    "(objectClass=group)"
)

AUTH_LDAP_GROUP_TYPE = GroupOfNamesType()

# Permisos basados en grupos
AUTH_LDAP_USER_FLAGS_BY_GROUP = {
    "is_staff": "CN=NetBox Admins,OU=Groups,DC=example,DC=com",
    "is_superuser": "CN=NetBox Superusers,OU=Groups,DC=example,DC=com"
}

# Sincronización automática
AUTH_LDAP_ALWAYS_UPDATE_USER = True
AUTH_LDAP_FIND_GROUP_PERMS = True
AUTH_LDAP_MIRROR_GROUPS = True

Reinicia NetBox: docker restart netbox


Plugins

Instalar Plugin

# Ejemplo: NetBox Topology Views
docker exec -it netbox bash
pip install netbox-topology-views

# Editar configuration.py
nano /config/configuration.py

# Añadir a PLUGINS
PLUGINS = ['netbox_topology_views']

# Configuración específica del plugin (opcional)
PLUGINS_CONFIG = {
    'netbox_topology_views': {
        'static_image_directory': '/opt/netbox/netbox/media/topology_views'
    }
}

# Salir y reiniciar
exit
docker restart netbox

Plugins Recomendados

Plugin Descripción
netbox-topology-views Visualización de topología de red
netbox-secrets Gestión segura de credenciales
netbox-bgp Gestión de sesiones BGP
netbox-documents Adjuntar documentos

Scripts Personalizados

Crear Script

# Crear script en /config/scripts/
docker exec -it netbox bash
nano /config/scripts/example_script.py

Ejemplo de script:

from dcim.models import Device
from extras.scripts import Script

class DeviceAudit(Script):
    class Meta:
        name = "Device Audit"
        description = "Genera reporte de dispositivos sin IP asignada"
    
    def run(self, data, commit):
        devices_without_ip = Device.objects.filter(
            primary_ip4__isnull=True,
            primary_ip6__isnull=True
        )
        
        self.log_info(f"Dispositivos sin IP: {devices_without_ip.count()}")
        
        for device in devices_without_ip:
            self.log_warning(f"  - {device.name} ({device.site.name})")
        
        return f"Auditados {devices_without_ip.count()} dispositivos"

El script aparecerá en Scripts en la UI de NetBox.


Configuración Avanzada

configuration.py

Opciones comunes en /config/configuration.py:

# Banner personalizado
BANNER_TOP = 'NetBox Producción - ICT Iberia'
BANNER_BOTTOM = ''
BANNER_LOGIN = 'Acceso Restringido - Solo Personal Autorizado'

# Paginación
PAGINATE_COUNT = 50
MAX_PAGE_SIZE = 1000

# Preferencias de sesión
LOGIN_REQUIRED = True
SESSION_COOKIE_AGE = 1209600  # 2 semanas

# Timeout de cambios
CHANGELOG_RETENTION = 90  # días

# Enforcement de nombres únicos
ENFORCE_GLOBAL_UNIQUE = True

# Webhooks y jobs
QUEUE_NAMES = ['default', 'high', 'low']

# Métricas
METRICS_ENABLED = True

# GraphQL
GRAPHQL_ENABLED = True

Personalizar Plantillas

# Crear override de plantilla
docker exec -it netbox mkdir -p /config/templates/dcim/device
docker exec -it netbox cp /app/netbox/templates/dcim/device/base.html /config/templates/dcim/device/

Edita /config/templates/dcim/device/base.html para personalizar la UI.


Integración con Herramientas

Ansible

- name: Get devices from NetBox
  hosts: localhost
  tasks:
    - name: Query NetBox API
      uri:
        url: "https://netbox.example.com/api/dcim/devices/"
        headers:
          Authorization: "Token {{ netbox_token }}"
        return_content: yes
      register: devices
    
    - name: Show devices
      debug:
        var: devices.json.results

Terraform

provider "netbox" {
  server_url = "https://netbox.example.com"
  api_token  = var.netbox_token
}

resource "netbox_prefix" "example" {
  prefix      = "10.0.0.0/24"
  status      = "active"
  description = "Example prefix"
}

Python

import pynetbox

nb = pynetbox.api(
    'https://netbox.example.com',
    token='tu_token_aqui'
)

# Obtener dispositivos
devices = nb.dcim.devices.all()
for device in devices:
    print(f"{device.name} - {device.primary_ip}")

# Crear IP
new_ip = nb.ipam.ip_addresses.create(
    address='192.168.1.100/24',
    status='active',
    dns_name='server.example.com'
)

Próximos Pasos

  1. Backup - Protege tu configuración
  2. API Docs - Explora la API
  3. Plugins Wiki - Más plugins