Cuando tenemos una instalación de red con puntos de acceso profesionales D-Link DAP, la mejor forma de gestionarlos es utilizando Nuclias Connect, para hacerlo de forma centralizada. Actualmente disponemos de dos versiones de Nuclias Connect, la que se instala en un ordenador o servidor con Windows o Linux, y la cual nos permite administrar tanto switches compatibles de la familia DGS-1210, como todos los puntos de acceso DAP. Si decidimos comprar el modelo DNH-100, el Nuclias Connect incorporado no soporta switches de momento. Si quieres acceder de forma remota y segura, sin necesidad de abrir puertos, hoy en RedesZone os vamos a enseñar cómo puedes hacerlo.
¿Qué formas tenemos de conectarnos remotamente?
La gestión de Nuclias Connect está basada en un servidor web, por lo tanto, debemos acceder a una URL con nuestro navegador web y accederemos a la web de administración general de todos los puntos de acceso, sedes y redes que tengamos dadas de alta. De esta forma tan sencilla, podemos monitorizar, administrar y gestionar toda la red de puntos de acceso de manera centralizada. En el caso de que tengas Nuclias Connect para PC, también podrás gestionar los switches de forma centralizada.
Lo ideal es que Nuclias Connect fuera accesible a través de Internet, tanto vía web con el navegador como también con la aplicación para smartphones Android y iOS, con la cual podemos monitorizar de forma rápida y fácil todas las redes y puntos de acceso WiFi configurados. Otros fabricantes lo que hacen es utilizar conexiones inversas para no tener problemas de seguridad, en el caso de Nuclias Connect tenemos un panel de control centralizado en la nube desde donde podemos pinchar e ir a cada controlador, ya sea software o hardware (con el DNH-100), sin embargo, es obligatorio que el router tenga abierto un puerto a la web de administración del Nuclias, lo que puede ser bastante peligroso.
Abrir puerto y acceso directo
La forma más sencilla de acceder de forma remota al panel de control vía web, es abriendo un puerto en nuestro router en la sección de «reenvío de puertos» o «port forwarding». Aunque es la solución más simple y fácil, también es la más peligrosa, porque estamos exponiendo a Internet el menú de administración web del Nuclias Connect. Un posible atacante no solamente podría intentar acceder probando credenciales de usuario, sino que podría encontrar una vulnerabilidad en el servidor web y explotarla, para hacerse con el control total del dispositivo.
No os recomendamos abrir un puerto y acceder directamente a la web de administración, porque cualquier ciberdelincuente podría hacer un escaneo de puertos, ver que el puerto está abierto y accesible, y comenzar a probar diferentes ataques para intentar entrar en la gestión del Nuclias.
Usar una VPN
Esta es la forma más segura sin lugar a dudas, pero también la más complicada de configurar y la más molesta de utilizar una vez que está todo montado. Con esta opción, tendrás que montar un servidor VPN con protocolos como IPsec, OpenVPN o Wireguard. Este servidor debe estar en el router o bien en un servidor NAS o PC que tengas en la organización, si ya tienes un servidor VPN montado, entonces solamente debes asegurarte que desde la subred de la VPN puedes tener acceso al Nuclias Connect.
La parte negativa de esta opción es que siempre tendrás que estar conectado al servidor VPN si quieres acceder al Nuclias, no tienes acceso directo, ni con el PC vía web ni tampoco con la app móvil. Siempre tendrás que tener en funcionamiento el servicio de VPN antes de intentar acceder, por lo que podría convertirse en algo bastante tedioso.
Montar un Proxy inverso
Esta es una forma muy segura y muy fácil de conectarnos, aunque la configuración en un primer momento pueda resultar complicada, después agradeces haber puesto un proxy inverso. El objetivo de esto es que podemos acceder a nuestro Nuclias a través de un subdominio de nuestro dominio principal, solamente los usuarios que sepan ese dominio podrán acceder a la web de administración, además, funciona con HTTPS utilizando Let’s Encrypt como CA, y podemos utilizar TLS 1.3 para proteger la conexión al máximo.
Otras opciones de seguridad que podemos implementar son que solamente tengan acceso los clientes con IP de España, también podemos configurar a que la configuración de seguridad sea la más segura, por último, también podríamos limitar el número de paquetes para evitar ataques de fuerza bruta. Por último, también podríamos poner diferentes plugins para añadir más seguridad de forma opcional, por ejemplo, podríamos añadir un OAuth para autenticarnos con nuestra cuenta de Google para añadir un segundo factor de autenticación, no obstante, si pones esto no podrás acceder con la app móvil ya que no lo soportaría.
Cómo configurar Traefik para Nuclias
El proxy inverso Traefik se puede instalar a través de un contenedor Docker, ya sea en nuestro servidor con Windows, Linux e incluso un servidor NAS. A continuación, os proporcionamos el docker-compose que se encarga de instalar Traefik, podéis modificarlo en base a vuestra configuración general. En este Docker-Compose también instalamos Portainer para la gestión de todos los contenedores, pero si ya lo tienes instalado, puedes obviarlo. Si queréis acceder con un dominio comprado, tendréis que configurarlo para que apunte a nuestra dirección IP pública o al dominio DDNS, en nuestro caso
version: '3.7'
#Directorio Docker ${DOCKER_CARPETA} en el archivo .ENV
networks:
redeszone:
name: redeszone
driver: bridge
ipam:
config:
- subnet: 172.30.1.0/24
services:
## Portainer - Gestor Dockers
portainer:
container_name: portainer
image: portainer/portainer-ce:latest
restart: always
networks:
redeszone:
ipv4_address: 172.30.1.2
ports:
- ${PORTAINER_PUERTO}:9000
security_opt:
- no-new-privileges:true
volumes:
- ${DOCKER_CARPETA}/portainer:/data
- /var/run/docker.sock:/var/run/docker.sock
- /etc/localtime:/etc/localtime:ro
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
labels:
- "traefik.enable=true"
## HTTP Routers
- "traefik.http.routers.portainer-rtr.entrypoints=web-secure"
- "traefik.http.routers.portainer-rtr.rule=Host(`portainer.${NOMBREDOMINIO}`)"
## Middlewares
- "traefik.http.routers.portainer-rtr.middlewares=simpleAuth@file"
## HTTP Services
- "traefik.http.routers.portainer-rtr.service=portainer-svc"
- "traefik.http.services.portainer-svc.loadbalancer.server.port=${PORTAINER_PUERTO}"
## Traefik proxy inverso
traefik:
container_name: traefik
image: traefik:v2.5.4
restart: always
networks:
redeszone:
ipv4_address: 172.30.1.3
ports:
- 80:80
- 443:443
- 8082:8082
security_opt:
- no-new-privileges:true
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ${DOCKER_CARPETA}/traefik/traefik.yml:/etc/traefik/traefik.yml
- ${DOCKER_CARPETA}/traefik:/etc/traefik
- ${DOCKER_CARPETA}/traefik/letsencrypt:/letsencrypt
environment:
- PUID=${PUID}
- PGID=${PGID}
- TZ=${TZ}
labels:
- "traefik.enable=true"
# HTTP-to-HTTPS Redirect
- "traefik.http.routers.http-catchall.entrypoints=web"
- "traefik.http.routers.http-catchall.rule=HostRegexp(`{host:.+}`)"
- "traefik.http.routers.http-catchall.middlewares=redirect-to-https"
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=web-secure"
# HTTP Routers
- "traefik.http.routers.traefik-rtr.entrypoints=web-secure"
- "traefik.http.routers.traefik-rtr.rule=Host(`traefik.${NOMBREDOMINIO}`)"
## Services - API
- "traefik.http.routers.traefik-rtr.service=api@internal"
## Middlewares
- "traefik.http.routers.traefik-rtr.middlewares=simpleAuth@file"
El código fuente del archivo .env para todas las contraseñas sería el siguiente:
##### PUERTOS
PORTAINER_PUERTO=9000
##### SISTEMA
PUID=1000
PGID=1000
TZ=Europe/Madrid
DOCKER_CARPETA=/share/Container/Docker
Una vez que está instalado Traefik en el contenedor Docker, ahora tenemos que poner la siguiente configuración en el archivo traefik.yml (el archivo estático):
global:
checkNewVersion: true
sendAnonymousUsage: true
entryPoints:
web:
address: ':80'
http:
redirections:
entryPoint:
to: web-secure
scheme: https
web-secure:
address: ':443'
http:
tls:
certResolver: lets-encrypt
traefik:
address: ':8082'
log:
level: DEBUG
filePath: /etc/traefik/logs/traefik.log
accessLog:
filePath: /etc/traefik/logs/access.log
api:
insecure: true
dashboard: true
debug: true
#pilot:
# token: "TOKEN QUE CONSEGUIMOS DESDE LA WEB"
experimental:
plugins:
GeoBlock:
moduleName: "github.com/PascalMinder/GeoBlock"
version: "v0.1.6"
ping: {}
providers:
docker:
endpoint: unix:///var/run/docker.sock
exposedByDefault: false
watch: true
swarmMode: false
file:
filename: /etc/traefik/dynamic-conf.yml
watch: true
certificatesResolvers:
lets-encrypt:
acme:
email: "sergio.deluz@grupoadslzone.com"
storage: "/letsencrypt/acme.json"
httpChallenge:
entryPoint: web
En el caso del archivo de configuración dinámico, la configuración que os recomendamos es la siguiente:
#Configuracion dinamica de Traefik
#Configuracion de TLS
tls:
options:
default:
minVersion: VersionTLS12
sniStrict: true
cipherSuites:
- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
- TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305
- TLS_AES_128_GCM_SHA256
- TLS_AES_256_GCM_SHA384
- TLS_CHACHA20_POLY1305_SHA256
curvePreferences:
- CurveP521
- CurveP384
#HTTP routers para el Traefik, listado:
# - D-Link Nuclias Connect
http:
routers:
router-https-nuclias-connect:
rule: Host(`nuclias-connect.redeszone.net`)
entrypoints:
- web-secure
middlewares: chain-sin-autenticacion
service: service-https-nuclias-connect
tls:
certResolver: lets-encrypt
services:
service-https-nuclias-connect-dnh-100:
loadBalancer:
servers:
- url: "https://IP:443"
#Middlewares HTTP para Traefik
middlewares:
chain-sin-autenticacion:
chain:
middlewares:
- GeoBloqueo
- limitePaquetes
- seguridadCabeceras
#Seguridad para las cabeceras de la comunicación HTTPS.
seguridadCabeceras:
headers:
accessControlAllowMethods:
- GET
- OPTIONS
- PUT
accessControlMaxAge: 100
addVaryHeader: true
browserXssFilter: true
contentTypeNosniff: true
forceSTSHeader: true
frameDeny: true
sslRedirect: true
sslForceHost: true
stsPreload: true
customFrameOptionsValue: SAMEORIGIN
referrerPolicy: "same-origin"
featurePolicy: "camera 'none'; microphone 'none'; payment 'none'; usb 'none'; vr 'none'; vibrate 'self';"
stsSeconds: 315360000
hostsProxyHeaders:
- "X-Forwarded-Host"
#Middlewares para poner un limite de datos intercambiados
limitePaquetes:
rateLimit:
average: 350
burst: 500
period: 1m
sourceCriterion:
ipStrategy:
depth: 2
#Middlewares para comprobar dirección IP de origen. Solo se permite España.
GeoBloqueo:
plugin:
GeoBlock:
allowlocalrequests: true
loglocalrequests: true
api: https://get.geojs.io/v1/ip/country/{ip}
countries:
- ES
Una vez que esté todo montado, podemos acceder a nuestro Nuclias Connect vía HTTPS usando el mismo puerto 443 de siempre, ya que la solicitud la realizamos al Traefik, y él nos va a dirigir hacia el servidor web de Nuclias, pasando antes por los diferentes filtros o «middlewares» que tenemos. Si somos integradores de sistemas y redes, podemos montar un proxy inverso en cada instalación con el objetivo de acceder a la gestión de Nuclias vía web sin necesidad de VPN ni abrir puertos (que no es seguro).
A continuación, podéis ver cómo se accedería desde Internet a nuestro Nuclias, usando un dominio:
Podemos ver que el certificado de Let’s Encrypt está perfectamente instalado y funcionando, además, la conexión es TLS 1.3:
Con la misma dirección URL donde accedemos a la web de administración del Nuclias, podemos ponerla en la aplicación para smartphones y también podemos acceder. Recuerda que si decides poner una autenticación adicional para acceder, con el típico nombre de usuario y clave, o una autenticación tipo OAuth2, no podrás acceder con el smartphone, solamente vía web con el navegador.