Mon projet non réalisé. Réseau de 200 routeurs MikroTik



Bonjour à tous. Cet article est destiné à ceux qui ont beaucoup d'appareils Mikrotik dans le parc et qui souhaitent faire une unification maximale afin de ne pas se connecter à chaque appareil individuellement. Dans cet article, je décrirai un projet qui, malheureusement, n'a pas atteint les conditions de combat en raison de facteurs humains. En bref: plus de 200 routeurs, configuration rapide et formation du personnel, unification par région, réseaux de filtrage et hôtes spécifiques, possibilité d'ajouter facilement des règles à tous les appareils, journalisation et contrôle d'accès.

Ce qui est décrit ci-dessous ne prétend pas être un cas fini, mais j'espère qu'il vous sera utile lors de la planification de vos réseaux et de la réduction des erreurs. Peut-être que certains points et décisions ne vous sembleront pas exacts - dans l'affirmative, écrivez dans les commentaires. La critique dans ce cas sera une expérience dans une tirelire commune. Par conséquent, le lecteur, regardez les commentaires, l'auteur a peut-être fait une grave erreur - la communauté aidera.

Le nombre de routeurs est de 200 à 300, dispersés dans différentes villes avec une qualité de connexion Internet différente. Il est nécessaire de tout faire magnifiquement et d'expliquer facilement aux administrateurs locaux comment tout fonctionnera.

Alors, où commence tout projet. Bien sûr, avec TK .

  1. Organisation d'un plan de réseau pour toutes les agences en fonction des besoins des clients, segmentation du réseau (de 3 à 20 réseaux en agence selon le nombre d'appareils).
  2. Configurez les appareils dans chaque branche. Vérification de la bande passante réelle du fournisseur dans différentes conditions de travail.
  3. Organisation de la protection des appareils, gestion des listes blanches, auto-détection des attaques avec auto-blacklistage pendant un certain temps, minimisation de l'utilisation des différents moyens techniques utilisés pour intercepter le contrôle d'accès et refuser le service.
  4. Organisation de connexions VPN sécurisées avec filtrage réseau selon les exigences du client. Au moins 3 connexions vpn de chaque branche vers le centre.
  5. Basé sur le paragraphe 1, 2. Choisissez les moyens optimaux pour créer un VPN tolérant aux pannes. La technologie de routage dynamique, si elle est justifiée correctement, peut être sélectionnée par le contractant.
  6. Organisation de la hiérarchisation du trafic par protocoles, ports, hôtes et autres services spécifiques que le client utilise. (VOIP, hôtes avec des services importants)
  7. Organisation de la surveillance et de la journalisation des événements de routeur pour la réponse du personnel de support technique.

Comme nous le comprenons, dans un certain nombre de cas, les savoirs traditionnels sont compilés à partir des exigences. J'ai formulé ces exigences moi-même, après avoir écouté les principaux problèmes. J'ai admis la possibilité que quelqu'un d'autre puisse reprendre la mise en œuvre de ces points.

Quels outils seront utilisés pour répondre à ces exigences:

  1. Pile ELK (après un certain temps, la compréhension est venue que fluentd sera utilisé à la place de logstash).
  2. Ansible. Pour faciliter l'administration et le partage d'accès, nous utiliserons AWX.
  3. GITLAB. Il n'est pas nécessaire d'expliquer. Où sans contrôle de version de nos configs.
  4. PowerShell Il y aura un script simple pour la génération initiale de la configuration.
  5. Wiki Doku pour la rédaction de documentation et de manuels. Dans ce cas, utilisez habr.com.
  6. La surveillance se fera via zabbix. Un schéma de connexion y sera dessiné pour une compréhension générale.

Moments des paramètres EFK


Dans le premier paragraphe, je ne décrirai que l'idéologie à partir de laquelle les indices seront construits. Il y a beaucoup
d'excellents articles sur la configuration et la réception des journaux des appareils exécutant mikrotik.

Je m'attarderai sur certains points:

1. Selon le schéma, il convient d'envisager de recevoir des journaux de différents endroits et de différents ports. Pour cela, nous utiliserons un agrégateur de journaux. Et nous voulons également faire des horaires universels pour tous les routeurs avec la possibilité de partager l'accès. Ensuite, nous construisons les indices comme suit:

voici un morceau de config avec fluentd
tapez elasticsearch
logstash_format true
nom_index mikrotiklogs.north
logstash_prefix mikrotiklogs.north
flush_interval 10s
héberge elasticsearch : 9200
port 9200


Ainsi, nous pouvons combiner des routeurs et des segments selon les plans mikrotiklogs.west, mikrotiklogs.south, mikrotiklogs.east. Pourquoi compliquer cela? Nous comprenons que nous aurons 200 appareils ou plus. Ne gardez pas une trace de tout. Depuis la version 6.8 d'elasticsearch, nous avons accès aux paramètres de sécurité (sans acheter de licence), nous pouvons donc répartir les droits de visualisation entre les employés du support technique ou les administrateurs système locaux.
Tableaux, graphiques - ici, vous devez juste être d'accord - utilisez les mêmes, ou chacun fait ce qui lui convient.

2. En vous connectant. Si nous activons la connexion dans les règles de pare-feu, nous faisons les noms sans espaces. On peut voir qu'en utilisant une simple configuration dans fluentd, nous pouvons filtrer les données et créer des panneaux pratiques. Dans l'image ci-dessous, mon routeur domestique.

image

3. Selon la place occupée et les journaux. En moyenne, avec 1 000 messages par heure, les journaux prennent 2 à 3 Mo par jour, ce qui, vous voyez, n'est pas tellement. Elasticsearch version 7.5.

ANSIBLE.AWX


Heureusement pour nous, nous avons un module prêt à l'emploi pour routeros
J'ai souligné AWX, mais les commandes ci-dessous ne concernent que ansible dans sa forme la plus pure - je pense que pour ceux qui ont travaillé avec ansible, il n'y aura aucun problème à utiliser gui awx.

J'avoue honnêtement, avant cela, j'ai regardé d'autres guides où ils utilisaient ssh, et tout le monde avait des problèmes différents avec le temps de réponse et un tas d'autres problèmes. Je le répète, cela n’a pas abouti à la bataille , prenez ces informations comme une expérience qui n’a pas dépassé le stade des 20 routeurs.

Nous devons utiliser un certificat ou une comptabilité. Cela dépend de vous, je suis pour les certificats. Un point subtil sur les droits. Je donne des autorisations d'écriture - au moins «réinitialiser la configuration» ne peut pas être fait.

La génération, la copie du certificat et l'importation ne devraient poser aucun problème:

Liste restreinte des équipes
Sur votre PC
ssh-keygen -t RSA, répondez aux questions, enregistrez la clé.
Copier sur mikrotik:
user ssh-keys import public-key-file = id_mtx.pub user = ansible
Vous devez d'abord créer un compte et lui attribuer des droits.
Vérifier la connexion par certificat
ssh -p 49475 -i / keys / mtx ansible@192.168.0.120

Nous écrivons vi / etc / ansible / hosts
MT01 ansible_network_os = routeros ansible_ssh_port = 49475 ansible_ssh_user = ansible
MT02 ansible_network_os = routeros 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

Eh bien, un exemple de playbook:
- nom: add_work_sites
hôtes: testmt
série: 1
connexion: network_cli
utilisateur_distant: mikrotik.west
recueillir_facts: oui
tâches:
- nom: ajoutez Work_sites
routeros_command:
commandes:
- / ip firewall address-list add address = gov.ru list = work_sites comment = Ticket665436_Ochen_nado
- / ip firewall address-list add address = habr.com list = work_sites comment = for_habr

Comme vous pouvez le voir dans la configuration ci-dessus, la compilation de votre playbook est un jeu d'enfant. C'est assez bon pour maîtriser cli mikrotik. Imaginez une situation où sur tous les routeurs vous devez supprimer la liste d'adresses avec certaines données, puis:

Rechercher et supprimer
/ ip firewal address-list remove [trouver où list = "gov.ru"]

Je n'ai pas intentionnellement inséré ici la liste complète du pare-feu. Il sera individuel pour chaque projet. Mais une chose est sûre, utilisez uniquement la liste d'adresses.

Par GITLAB, tout est clair. Je ne m'attarderai pas sur ce moment. Tout est beau pour des tâches distinctes, des modèles, des gestionnaires.

Powershell


Il y aura 3 fichiers. Pourquoi PowerShell? Un outil pour générer des configurations peut être choisi par quiconque est plus à l'aise. Dans ce cas, tout le monde a des fenêtres sur le PC, alors pourquoi le faire sur bash alors que PowerShell est plus pratique. Pour qui c'est plus pratique.

Le script lui-même (simple et direct):
[cmdletBinding ()]
Param (
[Paramètre (obligatoire = $ vrai)]
[chaîne] $ EXTERNALIPADDRESS,
[Paramètre (obligatoire = $ vrai)]
[chaîne] $ EXTERNALIPROUTE,
[Paramètre (obligatoire = $ vrai)]
[chaîne] $ BWorknets,
[Paramètre (obligatoire = $ vrai)]
[chaîne] $ CWorknets,
[Paramètre (obligatoire = $ vrai)]
[chaîne] $ BVoipNets,
[Paramètre (obligatoire = $ vrai)]
[chaîne] $ CVoipNets,
[Paramètre (obligatoire = $ vrai)]
[chaîne] $ CClientss,
[Paramètre (obligatoire = $ vrai)]
[chaîne] $ BVPNWORKs,
[Paramètre (obligatoire = $ vrai)]
[chaîne] $ CVPNWORKs,
[Paramètre (obligatoire = $ vrai)]
[chaîne] $ BVPNCLIENTSs,
[Paramètre (obligatoire = $ vrai)]
[chaîne] $ cVPNCLIENTSs,
[Paramètre (obligatoire = $ vrai)]
[chaîne] $ NAMEROUTER,
[Paramètre (obligatoire = $ vrai)]
[chaîne] $ ServerCertificates,
[Paramètre (obligatoire = $ vrai)]
[chaîne] $ infile,
[Paramètre (obligatoire = $ vrai)]
[chaîne] $ outfile
)

Get-Content $ 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)} | Set-content $ outfile


Veuillez me pardonner, je ne peux pas énoncer toutes les règles car ce ne sera pas très beau. Vous pouvez créer les règles vous-même, guidé par les meilleures pratiques.

Par exemple, voici une liste de liens qui m'ont guidé:
wiki.mikrotik.com/wiki/Manual : Securing_Your_Router
wiki.mikrotik.com/wiki/Manual : IP / Pare-feu / Filtre
wiki.mikrotik.com/wiki/Manual : exemples OSPF
wiki.mikrotik.com/wiki/Drop_port_scanners
wiki.mikrotik.com/wiki/Manual : Winbox
wiki.mikrotik.com/wiki/Manual : Upgrading_RouterOS
wiki.mikrotik.com/wiki/Manual : IP / Fasttrack - ici, vous devez savoir que lors de l'activation de fasttrack, les règles de priorisation et de mise en forme du trafic ne fonctionneront pas - utile pour les appareils faibles.

Symboles des variables:
Les réseaux suivants sont pris comme exemple:
Réseau de travail 192.168.0.0/24
172.22.4.0/24 Réseau VOIP
Réseau 10.0.0.0/24 pour les clients sans accès LAN
Réseau VPN 192.168.255.0/24 pour les grandes succursales
172.19.255.0/24 Réseau VPN pour les petits

L'adresse réseau se compose de 4 nombres décimaux, respectivement ABCD, le remplacement fonctionne selon le même principe, s'il demande B au démarrage, alors vous devez entrer le numéro 0 pour le réseau 192.168.0.0/24, et pour C = 0.
$ EXTERNALIPADDRESS - une adresse dédiée du fournisseur.
$ EXTERNALIPROUTE - la route par défaut vers le réseau est 0.0.0.0/0
$ BWorknets - Réseau de travail, dans notre exemple il y aura 168
$ CWorknets - Le réseau de travail, dans notre exemple, il y aura 0
$ BVoipNets - Réseau VOIP dans notre exemple ici 22
$ CVoipNets - Réseau VOIP dans notre exemple ici 4
$ CClientss - Réseau pour les clients - Accès Internet uniquement, dans notre cas ici 0
$ BVPNWORKs - Réseau VPN pour les grandes succursales, dans notre exemple 20
$ CVPNWORKs - Réseau VPN pour les grandes succursales, dans notre exemple 255
$ BVPNCLIENTS - Réseau VPN pour les petites succursales, puis 19
$ CVPNCLIENTS - Réseau VPN pour les petites succursales, ce qui signifie 255
$ NAMEROUTER - le nom du routeur
$ ServerCertificate - le nom du certificat que vous pré-importez
$ infile - Spécifiez le chemin d'accès au fichier à partir duquel nous lirons la configuration, par exemple D: \ config.txt (le chemin anglais sans guillemets et espaces est meilleur)
$ outfile - indiquez le chemin où sauvegarder, par exemple D: \ MT-test.txt

J'ai intentionnellement changé les adresses dans les exemples pour des raisons évidentes.

J'ai sauté le point sur la détection des attaques et des comportements anormaux - cela mérite un article séparé. Mais il convient de noter que dans cette catégorie, vous pouvez utiliser les valeurs de surveillance des données avec Zabbix + élaboré des données de boucle avec elasticsearch.

À quels points vous devez vous concentrer:

  1. Plan de réseau. Il vaut mieux le rendre immédiatement lisible. Assez c'est assez. Malheureusement, je vois souvent que les réseaux sont compilés selon le principe: «Une nouvelle branche est apparue, vous voilà / 24». Personne ne sait combien d'appareils sont censés se trouver à un endroit donné et s'il y aura une nouvelle croissance. Par exemple, un petit magasin a ouvert, dans lequel il est initialement clair que l'appareil ne sera pas plus de 10, pourquoi allouer / 24? Dans les grandes succursales - au contraire, elles allouent / 24, et il y a 500 appareils - vous pouvez simplement ajouter un réseau, mais vous voulez tout réfléchir tout de suite.
  2. Règles de filtrage. Si le projet suppose qu'il y aura une séparation des réseaux et une segmentation maximale. Les meilleures pratiques changent avec le temps. Auparavant, ils partageaient un réseau PC et un réseau d'imprimantes, maintenant il est normal de ne pas partager ces réseaux. Cela vaut la peine d’utiliser le bon sens et de ne pas créer beaucoup de sous-réseaux là où ils ne sont pas nécessaires et de ne pas connecter tous les appareils à un seul réseau.
  3. Paramètres "d'or" sur tous les routeurs. C'est-à-dire si vous avez décidé d'un plan. Cela vaut la peine de tout prévoir immédiatement et de s’assurer que tous les paramètres sont identiques - il n’existe que des listes d’adresses et des adresses IP différentes. En cas de problème, le temps de débogage sera moindre.
  4. Les questions d'organisation ne sont pas moins importantes que les questions techniques. Souvent, les employés paresseux suivent ces recommandations «manuellement», sans utiliser de configurations et de scripts prêts à l'emploi, ce qui conduit finalement à des problèmes à partir de zéro.

Par routage dynamique. OSPF utilisé avec division zonale. Mais ceci est un banc d'essai, dans des conditions de combat, il est plus intéressant de mettre en place de telles choses.

J'espère que personne n'a été contrarié de ne pas avoir posté la configuration des routeurs. Je pense qu'il y aura suffisamment de liens, et puis tout dépendra des exigences. Et bien sûr, des tests, d'autres tests sont nécessaires.

Je souhaite à tous de mettre en œuvre leurs projets dans la nouvelle année. Oui, l'accès accordé vous accompagnera !!!

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


All Articles