Mi proyecto inconcluso. Red de 200 enrutadores MikroTik

Mi proyecto inconcluso. Red de 200 enrutadores MikroTik

Hola a todos. Este artículo está destinado a aquellos que tienen muchos dispositivos Mikrotik en el parque y que quieren hacer la máxima unificación para no conectarse a cada dispositivo por separado. En este artículo, describiré un proyecto que, lamentablemente, no alcanzó las condiciones de combate debido a factores humanos. En resumen: más de 200 enrutadores, configuración rápida y capacitación del personal, unificación por región, filtrado de redes y hosts específicos, la capacidad de agregar reglas fácilmente a todos los dispositivos, registro y control de acceso.

Lo que se describe a continuación no pretende ser un caso prefabricado, pero espero que le sea útil a la hora de planificar sus redes y minimizar errores. Quizás algunos puntos y decisiones no le parezcan del todo correctos; si es así, escriba en los comentarios. La crítica en este caso será una experiencia en una alcancía común. Por lo tanto, lector, mire en los comentarios, tal vez el autor cometió un grave error: la comunidad lo ayudará.

El número de enrutadores es de 200 a 300, dispersos en diferentes ciudades con diferente calidad de conexión a Internet. Es necesario embellecer todo y explicar a los administradores locales de forma accesible cómo funcionará todo.

Entonces, ¿dónde comienza cada proyecto? por supuesto, con TK.

  1. Organización de un plan de red para todas las sucursales de acuerdo a los requerimientos del cliente, segmentación de la red (de 3 a 20 redes en sucursales, dependiendo del número de dispositivos).
  2. Configurar dispositivos en cada sucursal. Comprobación del ancho de banda real del proveedor en diferentes condiciones de trabajo.
  3. Organización de la protección de dispositivos, control de listas blancas, detección automática de ataques con listas negras automáticas durante un cierto período de tiempo, minimización del uso de diversos medios técnicos utilizados para interceptar accesos de control y denegación de servicio.
  4. Organización de conexiones vpn seguras con filtrado de red según requerimientos del cliente. Al menos 3 conexiones vpn de cada sucursal al centro.
  5. Basado en los puntos 1, 2. Elija las mejores formas de construir VPN tolerante a fallas. La tecnología de enrutamiento dinámico, con la justificación correcta, puede ser elegida por el contratista.
  6. Organización de la priorización del tráfico por protocolos, puertos, hosts y otros servicios específicos que utiliza el cliente. (VOIP, hosts con servicios importantes)
  7. Organización del monitoreo y registro de eventos del router para la respuesta del personal de soporte técnico.

Como entendemos, en algunos casos, los TOR se compilan a partir de los requisitos. Formulé estos requisitos por mi cuenta, después de escuchar los principales problemas. Admitió la posibilidad de que alguien más pudiera asumir la implementación de estos puntos.

Qué herramientas se utilizarán para cumplir con estos requisitos:

  1. pila ELK (después de un tiempo, se entendió que se usaría fluentd en lugar de logstash).
  2. Ansible. Para facilitar la administración y compartir el acceso, utilizaremos AWX.
  3. GITLAB. No hay necesidad de explicar aquí. Donde sin control de versión de nuestras configuraciones.
  4. Potencia Shell. Habrá un script simple para la generación inicial de la configuración.
  5. Doku wiki, para escribir documentación y manuales. En este caso, usamos habr.com.
  6. El seguimiento se realizará a través de zabbix. También habrá un diagrama de conexión para una comprensión general.

Puntos de configuración EFK

Sobre el primer punto, describiré solo la ideología sobre la cual se construirán los índices. Hay muchos
excelentes artículos sobre cómo configurar y recibir registros de dispositivos que ejecutan mikrotik.

Me detendré en algunos puntos:

1. Según el esquema, vale la pena considerar recibir registros de diferentes lugares y en diferentes puertos. Para ello, utilizaremos un agregador de registros. También queremos hacer gráficos universales para todos los enrutadores con la capacidad de compartir el acceso. Luego construimos los índices de la siguiente manera:

aquí hay una pieza de configuración con fluentd elasticsearch
logstash_format verdadero
nombre_índice mikrotiklogs.north
logstash_prefix mikrotiklogs.norte
intervalo_flujo 10s
anfitriones elasticsearch: 9200
puerto 9200

Por lo tanto, podemos combinar enrutadores y segmentos según el plan: mikrotiklogs.west, mikrotiklogs.south, mikrotiklogs.east. ¿Por qué hacerlo tan difícil? Entendemos que tendremos 200 o más dispositivos. No sigas todo. Desde la versión 6.8 de elasticsearch, la configuración de seguridad está disponible para nosotros (sin comprar una licencia), por lo que podemos distribuir los derechos de visualización entre los empleados de soporte técnico o los administradores del sistema local.
Tablas, gráficos, aquí solo debe estar de acuerdo, use los mismos o todos lo hagan según le convenga.

2. Al iniciar sesión. Si habilitamos el inicio de sesión en las reglas del firewall, hacemos los nombres sin espacios. Se puede ver que usando una configuración simple en fluentd, podemos filtrar los datos y hacer paneles convenientes. La siguiente imagen es el enrutador de mi casa.

Mi proyecto inconcluso. Red de 200 enrutadores MikroTik

3. Según el espacio ocupado y registros. En promedio, con 1000 mensajes por hora, los registros ocupan 2-3 MB por día, lo que, como ves, no es tanto. elasticsearch versión 7.5.

ANSIBLE.AWX

Afortunadamente para nosotros, tenemos un módulo listo para usar para routeros.
Señalé sobre AWX, pero los comandos a continuación son solo sobre ansible en su forma más pura. Creo que para aquellos que han trabajado con ansible, no habrá problemas para usar awx a través de la interfaz gráfica de usuario.

Para ser honesto, antes de eso miré otras guías donde usaban ssh, y todos tenían diferentes problemas con el tiempo de respuesta y muchos otros problemas. Repito, no llegó a la batalla , toma esta información como un experimento que no pasó de un stand de 20 routers.

Necesitamos usar un certificado o una cuenta. Tú decides, yo estoy a favor de los certificados. Algún punto sutil sobre los derechos. Doy los derechos para escribir, al menos "restablecer configuración" no funcionará.

No debería haber problemas para generar, copiar el certificado e importar:

Breve lista de comandosen tu computadora
ssh-keygen -t RSA, responder preguntas, guardar la clave.
Copiar a mikrotik:
usuario ssh-keys import public-key-file=id_mtx.pub usuario=ansible
Primero debe crear una cuenta y asignarle derechos.
Comprobación de la conexión con el certificado
ssh -p 49475 -i /teclas/mtx [email protected]

Escriba vi /etc/ansible/hosts
MT01 ansible_network_os=enrutadores ansible_ssh_port=49475 ansible_ssh_user= ansible
MT02 ansible_network_os=enrutadores ansible_ssh_port=49475 ansible_ssh_user= ansible
MT03 ansible_network_os=enrutadores ansible_ssh_port=49475 ansible_ssh_user= ansible
MT04 ansible_network_os=enrutadores ansible_ssh_port=49475 ansible_ssh_user= ansible

Bueno, un ejemplo de un libro de jugadas: nombre: add_work_sites
anfitriones:testmt
de serie: 1
conexión:network_cli
usuario_remoto: mikrotik.west
reunir_hechos: sí
Tareas:
nombre: agregar Work_sites
comando_routeros:
comandos:
- /lista de direcciones de cortafuegos ip add address=gov.ru list=work_sites comment=Ticket665436_Ochen_nado
- /ip lista de direcciones de cortafuegos add address=habr.com list=work_sites comment=for_habr

Como puede ver en la configuración anterior, compilar sus propios libros de jugadas es una cuestión simple. Es lo suficientemente bueno como para dominar cli mikrotik. Imagine una situación en la que necesita eliminar la lista de direcciones con ciertos datos en todos los enrutadores, luego:

Buscar y eliminar/ip firewal address-list remove [encontrar donde list="gov.ru"]

Deliberadamente no incluí la lista completa de cortafuegos aquí. será individual para cada proyecto. Pero puedo decir una cosa con seguridad, use solo la lista de direcciones.

Según GITLAB, todo está claro. No me detendré en este momento. Todo es hermoso en términos de tareas individuales, plantillas, controladores.

Powershell

Habrá 3 archivos. ¿Por qué powershell? La herramienta para generar configuraciones puede ser elegida por cualquiera que se sienta más cómodo. En este caso, todos tienen Windows en su PC, entonces, ¿por qué hacerlo en bash cuando PowerShell es más conveniente? Quién está más cómodo.

El script en sí (simple y comprensible):[cmdletBinding()] Parámetro(
[Parámetro (Obligatorio = $ verdadero)] [cadena] $ EXTERNALALIPADDRESS,
[Parámetro(Obligatorio=$verdadero)] [cadena]$EXTERNALALIPROUTE,
[Parámetro (Obligatorio = $ verdadero)] [cadena] $ BWorknets,
[Parámetro(Obligatorio=$verdadero)] [cadena]$CWorknets,
[Parámetro(Obligatorio=$verdadero)] [cadena]$BVoipNets,
[Parámetro(Obligatorio=$verdadero)] [cadena]$CVoipNets,
[Parámetro(Obligatorio=$verdadero)] [cadena]$CClientss,
[Parámetro(Obligatorio=$verdadero)] [cadena]$BVPNWORKs,
[Parámetro(Obligatorio=$verdadero)] [cadena]$CVPNWORKs,
[Parámetro(Obligatorio=$verdadero)] [cadena]$BVPNCLIENTSs,
[Parámetro(Obligatorio=$verdadero)] [cadena]$cVPNCLIENTSs,
[Parámetro(Obligatorio=$verdadero)] [cadena]$NAMEROUTER,
[Parámetro(Obligatorio=$verdadero)] [cadena]$ServerCertificates,
[Parámetro(Obligatorio=$verdadero)] [cadena]$archivo,
[Parámetro (Obligatorio = $ verdadero)] [cadena] $ archivo de salida
)

Obtener contenido $infile | Foreach-Object {$_.Replace("EXTERNIP", $EXTERNALIPADDRESS)} |
Foreach-Object {$_.Replace("EXTROUTE", $EXTERNALIPROUTE)} |
Foreach-Object {$_.Replace("BWorknet", $BWorknets)} |
Foreach-Object {$_.Replace("CWorknet", $CWorknets)} |
Foreach-Object {$_.Replace("BVoipNet", $BVoipNets)} |
Foreach-Object {$_.Replace("CVoipNet", $CVoipNets)} |
Foreach-Object {$_.Replace("CClients", $CClientss)} |
Foreach-Object {$_.Replace("BVPNWORK", $BVPNWORKs)} |
Foreach-Object {$_.Replace("CVPNWORK", $CVPNWORKs)} |
Foreach-Object {$_.Replace("BVPNCLIENTS", $BVPNCLIENTSs)} |
Foreach-Object {$_.Replace("CVPNCLIENTS", $cVPNCLIENTSs)} |
Foreach-Object {$_.Replace("MYNAMERROUTER", $NAMEROUTER)} |
Foreach-Object {$_.Replace("ServerCertificate", $ServerCertificates)} | Establecer contenido $ outfile

Le pido perdón, no puedo exponer todas las reglas. no será bonito. Puede crear las reglas usted mismo, guiado por las mejores prácticas.

Por ejemplo, aquí hay una lista de enlaces que me guiaron:wiki.mikrotik.com/wiki/Manual:Protegiendo_su_enrutador
wiki.mikrotik.com/wiki/Manual:IP/Cortafuegos/Filtro
wiki.mikrotik.com/wiki/Manual:OSPF-ejemplos
wiki.mikrotik.com/wiki/Drop_port_scanners
wiki.mikrotik.com/wiki/Manual:winbox
wiki.mikrotik.com/wiki/Manual:Actualizando_RouterOS
wiki.mikrotik.com/wiki/Manual:IP/Fasttrack: aquí debe saber que cuando Fasttrack está habilitado, las reglas de configuración y priorización del tráfico no funcionarán, lo cual es útil para dispositivos débiles.

Convenciones variables:Se toman como ejemplo las siguientes redes:
192.168.0.0/24 red de trabajo
172.22.4.0/24 Red VoIP
Red 10.0.0.0/24 para clientes sin acceso LAN
Red VPN 192.168.255.0/24 para sucursales grandes
172.19.255.0/24 Red VPN para pequeños

La dirección de red consta de 4 números decimales, respectivamente ABCD, el reemplazo funciona de acuerdo con el mismo principio, si solicita B al inicio, entonces debe ingresar el número 192.168.0.0 para la red 24/0, y para C = 0 .
$EXTERNALIPADDRESS - dirección asignada por el proveedor.
$EXTERNALIPROUTE - ruta predeterminada a la red 0.0.0.0/0
$BWorknets - Red de trabajo, en nuestro ejemplo habrá 168
$CWorknets - Red de trabajo, en nuestro ejemplo será 0
$BVoipNets - red VOIP en nuestro ejemplo aquí 22
$CVoipNets - red VOIP en nuestro ejemplo aquí 4
$CClientss - Red para clientes - acceso solo a Internet, en nuestro caso aquí 0
$BVPNWORKs - Red VPN para sucursales grandes, en nuestro ejemplo 20
$CVPNWORKs - Red VPN para sucursales grandes, en nuestro ejemplo 255
$BVPNCLIENTS - Red VPN para sucursales pequeñas, significa 19
$CVPNCLIENTS - Red VPN para sucursales pequeñas, significa 255
$NAMEROUTER - nombre del enrutador
$ServerCertificate: el nombre del certificado que está importando primero
$infile - Especifique la ruta al archivo desde el cual leeremos la configuración, por ejemplo D:config.txt (mejor ruta en inglés sin comillas ni espacios)
$outfile: especifique la ruta donde guardar, por ejemplo D:MT-test.txt

Cambié deliberadamente las direcciones en los ejemplos por razones obvias.

Perdí el punto sobre la detección de ataques y comportamiento anómalo; esto merece un artículo aparte. Pero vale la pena señalar que en esta categoría puede usar valores de datos de monitoreo de Zabbix + datos de curl elaborados de elasticsearch.

En qué puntos enfocarse:

  1. plano de red. Es mejor escribirlo en una forma legible. Excel es suficiente. Desafortunadamente, a menudo veo que las redes se compilan de acuerdo con el principio "Ha aparecido una nueva rama, aquí está /24 para ti". Nadie sabe cuántos dispositivos se esperan en un lugar determinado y si habrá un mayor crecimiento. Por ejemplo, se abrió una pequeña tienda, en la que inicialmente está claro que el dispositivo no será más de 10, ¿por qué asignar / 24? Para sucursales grandes, por el contrario, asignan / 24, y hay 500 dispositivos: solo puede agregar una red, pero desea pensar en todo de inmediato.
  2. Reglas de filtrado. Si el proyecto asume que habrá separación de redes y máxima segmentación. Las mejores prácticas cambian con el tiempo. Anteriormente, compartían una red de PC y una red de impresoras, ahora es bastante normal no compartir estas redes. Vale la pena usar el sentido común y no producir muchas subredes donde no se necesitan y no combinar todos los dispositivos en una sola red.
  3. Configuraciones "doradas" en todos los enrutadores. Aquellos. si tienes un plan Vale la pena prever todo de inmediato y tratar de asegurarse de que todas las configuraciones sean idénticas: solo hay una lista de direcciones y direcciones IP diferentes. En caso de problemas, el tiempo de depuración será menor.
  4. Los aspectos organizativos no son menos importantes que los técnicos. A menudo, los empleados perezosos siguen estas recomendaciones "manualmente", sin usar configuraciones y scripts prefabricados, lo que en última instancia conduce a problemas desde cero.

Por enrutamiento dinámico. Se utilizó OSPF con zonificación. Pero este es un banco de pruebas, en condiciones de combate, estas cosas son más interesantes de configurar.

Espero que nadie se molestó porque no publiqué la configuración de los enrutadores. Creo que los enlaces serán suficientes, y luego todo depende de los requisitos. Y por supuesto pruebas, se necesitan más pruebas.

Deseo que todos realicen sus proyectos en el nuevo año. Que el acceso concedido te acompañe!!!

Fuente: habr.com

Añadir un comentario