Meu projeto não realizado. Rede de 200 roteadores MikroTik



Olá pessoal. Este artigo é destinado a quem possui muitos dispositivos Mikrotik no parque e deseja fazer a unificação máxima para não se conectar a cada dispositivo individualmente. Neste artigo, descreverei um projeto que, infelizmente, não alcançou condições de combate devido a fatores humanos. Em resumo: mais de 200 roteadores, configuração rápida e treinamento da equipe, unificação por região, redes de filtragem e hosts específicos, a capacidade de adicionar regras facilmente a todos os dispositivos, registro e controle de acesso.

O que está descrito abaixo não afirma ser um caso final, mas espero que seja útil para você ao planejar suas redes e minimizar erros. Talvez alguns pontos e decisões não lhe pareçam corretos - se assim for, escreva nos comentários. As críticas neste caso serão uma experiência em um cofrinho comum. Portanto, o leitor, observe os comentários, talvez o autor tenha cometido um erro grave - a comunidade ajudará.

O número de roteadores é de 200 a 300, espalhados em diferentes cidades com qualidade de conexão à Internet. É necessário fazer tudo de maneira bonita e rápida para explicar aos administradores locais como tudo funcionará.

Então, onde começa qualquer projeto. Claro, com TK .

  1. Organização de um plano de rede para todas as filiais de acordo com os requisitos do cliente, segmentação de rede (de 3 a 20 redes em filiais, dependendo do número de dispositivos).
  2. Configure dispositivos em cada filial. Verificando a largura de banda real do provedor em diferentes condições de trabalho.
  3. Organização da proteção do dispositivo, gerenciamento da lista branca, detecção automática de ataques com lista negra automática por um certo período de tempo, minimização do uso de vários meios técnicos utilizados para interceptar o acesso de controle e recusar o serviço.
  4. Organização de conexões VPN seguras com filtragem de rede de acordo com os requisitos do cliente. Pelo menos 3 conexões VPN de cada filial ao centro.
  5. Com base no parágrafo 1, 2. Escolha as maneiras ideais de criar vpn tolerante a falhas. A tecnologia de roteamento dinâmico, se justificada corretamente, pode ser selecionada pelo contratado.
  6. Organização da priorização de tráfego por protocolos, portas, hosts e outros serviços específicos que o cliente utiliza. (VOIP, hosts com serviços importantes)
  7. Organização de monitoramento e registro de eventos do roteador para resposta da equipe de suporte técnico.

Como entendemos, em vários casos, o TK é compilado a partir de requisitos. Eu mesmo formulei esses requisitos, depois de ouvir os principais problemas. Eu admiti a possibilidade de que outra pessoa pudesse assumir a implementação desses pontos.

Quais ferramentas serão usadas para atender a esses requisitos:

  1. Pilha ELK (depois de algum tempo, entendeu-se que o fluentd será usado em vez do logstash).
  2. Ansible. Para facilitar a administração e o compartilhamento do acesso, usaremos o AWX.
  3. GITLAB. Não há necessidade de explicar. Onde sem controle de versão de nossas configurações.
  4. PowerShell Haverá um script simples para a geração inicial da configuração.
  5. Wiki Doku para escrever documentação e manuais. Nesse caso, use habr.com.
  6. O monitoramento será feito através do zabbix. Um diagrama de conexão será desenhado lá para entendimento geral.

Momentos das configurações do EFK


No primeiro parágrafo, descreverei apenas a ideologia pela qual os índices serão construídos. Existem muitos
excelentes artigos sobre como configurar e receber logs de dispositivos executando o mikrotik.

Vou me debruçar sobre alguns pontos:

1. De acordo com o esquema, vale a pena considerar o recebimento de logs de diferentes locais e em diferentes portos. Para isso, usaremos um agregador de logs. E também queremos fazer agendamentos universais para todos os roteadores com a possibilidade de compartilhar o acesso. Em seguida, construímos os índices da seguinte maneira:

aqui está um pedaço de configuração com fluentd
tipo elasticsearch
logstash_format true
index_name mikrotiklogs.north
logstash_prefix mikrotiklogs.north
flush_interval 10s
hosts elasticsearch : 9200
porta 9200


Assim, podemos combinar roteadores e segmentos de acordo com o plano- mikrotiklogs.west, mikrotiklogs.south, mikrotiklogs.east. Por que complicar isso? Entendemos que teremos 200 ou mais dispositivos. Não acompanhe tudo. Desde a versão 6.8 do elasticsearch, temos acesso às configurações de segurança (sem a compra de uma licença), para que possamos distribuir os direitos de visualização entre os funcionários do suporte técnico ou os administradores locais do sistema.
Tabelas, gráficos - aqui você só precisa concordar - ou usa o mesmo, ou cada um faz o que lhe convém.

2. Registrando. Se ativarmos o logon nas regras do firewall, faremos os nomes sem espaços. Pode-se observar que, usando uma configuração simples no fluentd, podemos filtrar os dados e criar painéis convenientes. Na imagem abaixo, meu roteador doméstico.

imagem

3. De acordo com o local ocupado e os registros. Em média, com 1.000 mensagens por hora, os logs ocupam de 2 a 3 MB por dia, o que, como você vê, não é muito. Elasticsearch versão 7.5.

ANSIBLE.AWX


Felizmente para nós, temos um módulo pronto para roteadores
Eu apontei o AWX, mas os comandos abaixo são apenas sobre o ansible em sua forma mais pura - acho que para aqueles que trabalharam com o ansible não haverá problemas ao usar o gui awx.

Eu admito, honestamente, antes disso, olhei para outros guias onde eles usavam ssh, e todos tinham problemas diferentes com o tempo de resposta e vários outros problemas. Repito, ele não chegou à batalha ", tome essas informações como um experimento que não foi além do suporte de 20 roteadores.

Precisamos usar um certificado ou contabilidade. Cabe a você, eu sou de certificados. Algum ponto sutil sobre direitos. Eu concedo permissões de gravação - pelo menos "redefinir configuração" não pode ser feito.

Não deve haver problemas com a geração, cópia do certificado e importação:

Lista curta de equipes
No seu pc
ssh-keygen -t RSA, responda a perguntas, salve a chave.
Copie para o mikrotik:
usuário ssh-keys import public-key-file = id_mtx.pub user = ansible
Primeiro, você precisa criar uma conta e alocar direitos a ela.
Verifique a conexão por certificado
ssh -p 49475 -i / keys / mtx ansible@192.168.0.120

Escrevemos vi / etc / ansible / hosts
MT01 ansible_network_os = roteadores ansible_ssh_port = 49475 ansible_ssh_user = ansible
MT02 ansible_network_os = roteadores ansible_ssh_port = 49475 ansible_ssh_user = ansible
MT03 ansible_network_os = routeros ansible_ssh_port = 49475 ansible_ssh_user = ansible
MT04 ansible_network_os = routeros ansible_ssh_port = 49475 ansible_ssh_user = ansible

Bem, um exemplo de manual:
- nome: add_work_sites
anfitriões: testmt
serial: 1
conexão: network_cli
remote_user: mikrotik.west
gather_facts: yes
tarefas:
- nome: adicione Work_sites
routeros_command:
comandos:
- lista de endereços de firewall / ip add address = gov.ru list = work_sites comment = Ticket665436_Ochen_nado
- lista de endereços de firewall / ip add address = habr.com list = work_sites comment = for_habr

Como você pode ver na configuração acima, compilar seu playbook é fácil. É bom o suficiente para dominar o cli mikrotik. Imagine uma situação em que em todos os roteadores você precise remover a lista de endereços com determinados dados e:

Localizar e excluir
/ ip firewal address-list remove [encontre onde list = "gov.ru"]

Eu intencionalmente não inseri a lista inteira do firewall aqui. Será individual para cada projeto. Mas uma coisa é certa, use apenas a lista de endereços.

Pelo GITLAB, tudo está claro. Não vou me debruçar sobre esse momento. Tudo é bonito para tarefas separadas, modelos, manipuladores.

Powershell


Haverá 3 arquivos. Por que powershell? Uma ferramenta para gerar configurações pode ser escolhida por qualquer pessoa que esteja mais confortável. Nesse caso, todos têm janelas no PC, então por que fazê-lo no bash quando o powershell é mais conveniente. Para quem é mais conveniente.

O script em si (simples e direto):
[cmdletBinding ()]
Param (
[Parâmetro (obrigatório = $ true)]
[string] $ EXTERNALIPADDRESS,
[Parâmetro (obrigatório = $ true)]
[string] $ EXTERNALIPROUTE,
[Parâmetro (obrigatório = $ true)]
[string] $ BWorknets,
[Parâmetro (obrigatório = $ true)]
[string] $ CWorknets,
[Parâmetro (obrigatório = $ true)]
[string] $ BVoipNets,
[Parâmetro (obrigatório = $ true)]
[string] $ CVoipNets,
[Parâmetro (obrigatório = $ true)]
[string] $ CClientss,
[Parâmetro (obrigatório = $ true)]
[string] $ BVPNWORKs,
[Parâmetro (obrigatório = $ true)]
[string] $ CVPNWORKs,
[Parâmetro (obrigatório = $ true)]
[string] $ BVPNCLIENTSs,
[Parâmetro (obrigatório = $ true)]
[string] $ cVPNCLIENTSs,
[Parâmetro (obrigatório = $ true)]
[string] $ NAMEROUTER,
[Parâmetro (obrigatório = $ true)]
[string] $ ServerCertificates,
[Parâmetro (obrigatório = $ true)]
[string] $ infile,
[Parâmetro (obrigatório = $ true)]
[string] $ outfile
)

Get-Content $ infile | Objeto de pesquisa {$ _. Replace ("EXTERNIP", $ EXTERNALIPADDRESS)} |
Objeto de pesquisa {$ _. Replace ("EXTROUTE", $ EXTERNALIPROUTE)} |
Objeto de pesquisa {$ _. Replace ("BWorknet", $ BWorknets)} |
Objeto de pesquisa {$ _. Replace ("CWorknet", $ CWorknets)} |
Objeto de pesquisa {$ _. Replace ("BVoipNet", $ BVoipNets)} |
Objeto de pesquisa {$ _. Replace ("CVoipNet", $ CVoipNets)} |
Objeto de pesquisa {$ _. Replace ("CClients", $ CClientss)} |
Objeto de pesquisa {$ _. Replace ("BVPNWORK", $ BVPNWORKs)} |
Objeto de pesquisa {$ _. Replace ("CVPNWORK", $ CVPNWORKs)} |
Objeto de pesquisa {$ _. Replace ("BVPNCLIENTS", $ BVPNCLIENTSs)} |
Objeto de pesquisa {$ _. Replace ("CVPNCLIENTS", $ cVPNCLIENTSs)} |
Objeto de pesquisa {$ _. Replace ("MYNAMERROUTER", $ NAMEROUTER)} |
Objeto de pesquisa {$ _. Replace ("ServerCertificate", $ ServerCertificates)} | Set-content $ outfile


Por favor, perdoe-me, não posso definir todas as regras porque não será muito bonito. Você mesmo pode fazer as regras, guiadas pelas melhores práticas.

Por exemplo, aqui está uma lista de links pelos quais fui guiado:
wiki.mikrotik.com/wiki/Manual : Protegendo o seu_Router
wiki.mikrotik.com/wiki/Manual : IP / Firewall / Filtro
wiki.mikrotik.com/wiki/Manual : exemplos de OSPF
wiki.mikrotik.com/wiki/Drop_port_scanners
wiki.mikrotik.com/wiki/Manual : Winbox
wiki.mikrotik.com/wiki/Manual : Atualizando_RouterOS
wiki.mikrotik.com/wiki/Manual : IP / Fasttrack - aqui você precisa saber que, ao ativar o fasttrack, as regras para priorizar e modelar o tráfego não funcionarão - útil para dispositivos fracos.

Símbolos para variáveis:
As seguintes redes são tomadas como exemplo:
Rede de trabalho 192.168.0.0/24
Rede VOIP 172.22.4.0/24
Rede 10.0.0.0/24 para clientes sem acesso à LAN
Rede VPN 192.168.255.0/24 para ramificações grandes
Rede VPN 172.19.255.0/24 para pequenas

O endereço de rede consiste em 4 números decimais, respectivamente ABCD, a substituição funciona de acordo com o mesmo princípio; se solicitar B na inicialização, será necessário inserir o número 0 para a rede 192.168.0.0/24 e para C = 0.
$ EXTERNALIPADDRESS - um endereço dedicado do provedor.
$ EXTERNALIPROUTE - a rota padrão para a rede é 0.0.0.0/0
$ BWorknets - Rede de trabalho, no nosso exemplo haverá 168
$ CWorknets - A rede de trabalho, em nosso exemplo, haverá 0
$ BVoipNets - rede VOIP em nosso exemplo aqui 22
$ CVoipNets - rede VOIP em nosso exemplo aqui 4
$ CClientss - Rede para clientes - somente acesso à Internet, no nosso caso aqui 0
$ BVPNWORKs - rede VPN para grandes filiais, em nosso exemplo 20
$ CVPNWORKs - rede VPN para ramificações grandes, no nosso exemplo 255
$ BVPNCLIENTS - Rede VPN para pequenas filiais, então 19
$ CVPNCLIENTS - rede VPN para pequenas filiais, o que significa 255
$ NAMEROUTER - o nome do roteador
$ ServerCertificate - o nome do certificado que você pré-importa
$ infile - especifique o caminho para o arquivo do qual leremos a configuração, por exemplo, D: \ config.txt (o caminho em inglês sem aspas e espaços é melhor)
$ outfile - indica o caminho onde salvar, por exemplo D: \ MT-test.txt

Alterei intencionalmente os endereços nos exemplos por razões óbvias.

Eu pulei a questão de detectar ataques e comportamento anormal - isso merece um artigo separado. Mas vale ressaltar que nesta categoria você pode usar os valores dos dados de monitoramento com o Zabbix + calculou os dados de ondulação com a elasticsearch.

Em que pontos você precisa se concentrar:

  1. Plano de rede. É melhor compor imediatamente de forma legível. Já chega. Infelizmente, muitas vezes vejo que as redes são compiladas de acordo com o princípio: "Um novo ramo apareceu, aqui está você / 24". Ninguém descobre quantos dispositivos devem estar em um determinado local e se haverá mais crescimento. Por exemplo, uma pequena loja aberta, na qual fica claro que o dispositivo não terá mais que 10, por que alocar / 24? Em filiais grandes - pelo contrário, elas alocam / 24 e existem 500 dispositivos - você pode simplesmente adicionar uma rede, mas deseja pensar em tudo imediatamente.
  2. Regras de filtragem. Se o projeto assumir que haverá uma separação de redes e uma segmentação máxima. As melhores práticas mudam com o tempo. Antes, eles compartilhavam uma rede de PCs e uma rede de impressoras, agora é bastante normal não compartilhar essas redes. Vale a pena usar o bom senso e não criar muitas sub-redes onde elas não são necessárias e não conectar todos os dispositivos em uma rede.
  3. Configurações "douradas" em todos os roteadores. I.e. se você tiver decidido um plano. Vale a pena prever tudo imediatamente e tentar garantir que todas as configurações sejam idênticas - há apenas uma lista de endereços e endereços IP diferentes. Em caso de problemas, o tempo de depuração será menor.
  4. Questões organizacionais não são menos importantes que questões técnicas. Freqüentemente, funcionários preguiçosos seguem essas recomendações "manualmente", sem usar configurações e scripts prontos, o que acaba gerando problemas do zero.

Por roteamento dinâmico. OSPF usado com divisão zonal. Mas este é um banco de testes. Em condições de combate, é mais interessante montar essas coisas.

Espero que ninguém tenha ficado chateado por não ter postado a configuração dos roteadores. Eu acho que haverá links suficientes e tudo depende dos requisitos. E, claro, testes, mais testes são necessários.

Desejo a todos que implementem seus projetos no novo ano. Sim, o acesso concedido virá com você !!!

Source: https://habr.com/ru/post/pt482384/


All Articles