Управление сетевой инфраструктурой через Telegram за 5 EUR/месяц

Kate

Administrator
Команда форума
Автоматиза́ция произво́дства — это процесс в развитии машинного производства, при котором функции управления и контроля, ранее выполнявшиеся человеком, передаются приборам и автоматическим устройствам.
wikipedia.org
f6850f0aced2a7b275c713a831fde7d9.png

Введение​

Каким бы не был удобным WEB интерфейс системы управления сетью, это все-равно будет не так удобно, как использование мессенджера Telegram, где все в одном приложении: от общения с друзьями и получения прогноза погоды до управления сетевыми устройствами. В дополнение, удобный API интерфейс платформы Telegram позволяет получить желаемый сервис с минимальными трудозатратами. В данной статье я приведу самый простой пример одного из таких решений.

Состав системы​

  1. Машина с ОС GNU/Linux Ubuntu/Debian (или другой на ваш вкус) на VPS в вашем любимом облачном сервисе (AWS, GCP, MS Azure, Linode...), будет достаточно 1Гб памяти, 1 CPU и 10Гб жесткого диска. Пример: Nanode 1 GB с Debian 10 за 5 EUR/мес на сервисе Linode
  2. VPN между сервером и сетью. Тут возможны разные варианты, могу только предложить следующие варианты
    • L2TP VPN (самый простой вариант)
    • OpenVPN (более функциональный и сложный вариант)
    • Openconnect VPN (подходит если на площадке есть VPN сервис на базе Cisco ASA)
  3. Маршрутизация между сервером и сетью (можно выбрать как статическую маршрутизацию или в случае надобности можно построить динамическую маршрутизацию на базе Quagga)
  4. Telegram bot
  5. Python для обработки сообщений от Telegram бота через API и выполнения задач по настройке сетевого оборудования, подключения к камерам видео-наблюдения
  6. Git/Github (опционально)

Пример реализации с картинками​

ИЗМЕНЕНИЕ VLAN НА ПОРТУ КОММУТАТОРА ДОСТУПА:​

В сообщении боту указывается условный номер коммутатора, номер или диапазон портов, номер VLANа
В сообщении боту указывается условный номер коммутатора, номер или диапазон портов, номер VLANа

ПРОСМОТР ТЕКУЩИХ НАСТРОЕК VLAN-ОВ НА КОММУТАТОРАХ ДОСТУПА​

В сообщении боту указывается условный номер коммутатора
В сообщении боту указывается условный номер коммутатора

АУДИТ ПОРТОВ КОММУТАТОРА ДОСТУПА и СОХРАНЕНИЕ НАСТРОЕК​

Запрос аудита портов и сохранения конфигаруции на оборудовании
Запрос аудита портов и сохранения конфигаруции на оборудовании
Результат аудита портов
Результат аудита портов

ДОБАВЛЕНИЕ/УДАЛЕНИЕ VLAN с IP, DHCP пулом и пр.​

Запрос на добавление VLAN с SVI и DHCP пулом
Запрос на добавление VLAN с SVI и DHCP пулом

ДОБАВЛЕНИЕ/УДАЛЕНИЕ ПРОБРОСОВ ПОРТОВ​

76db7900dad45e2143c861cbadc2e9a0.png

ПРОСМОТР ТЕКУЩИХ НАСТРОЕК ПРОБРОСОВ ПОРТОВ​

1b5f26423b1daa18914906feaee26216.png

СОЗДАНИЕ ОГРАНИЧЕНИЙ СКОРОСТИ ИНТЕРНЕТА ДЛЯ VLAN​

d1bbb98d6615f1418a535b09ec33fced.png

Дополнение 1. Мониторинг​

Если есть Python и VPN до сети, не трудоно дополнить базовым мониторингом, опросом устройств по ICMP.

Дополнение 2. Получение изображения с камер видео-наблюдения​

3cc1cfab89244ec78ad3aa4716f40d79.png

Под капотом​

В сети уже есть достаточно качественного контента, поэтому здесь не будет примеров кода. Он ничем не отличается от того, что уже было написано ранее.
Создание к бота Telegram (telebot):
https://habr.com/ru/post/442800/
Подключение к сетевому оборудованию (Netmiko):
https://habr.com/ru/company/jetinfosystems/blog/336608/
Построение VPN туннелей:
https://habr.com/ru/post/354490/
https://habr.com/ru/post/233971/
Захват видео кадров с камер, тут информации не так много, ниже пример кода для двух вариантов захвата кадров: с RTSP потока и через WEB интерфейс.
import time
from datetime import datetime
import cv2

def get_image_rtsp(ip, name):
"""
Function get image from camera and write it to disk (use RTSP stream)
"""
user='admin'
passw="password"
url_pic = "rtsp://{}:554/profile1".format(ip)
time = str(datetime.now()).split(".")[0][0:-4].replace(" ", "-")
try:
cap = cv2.VideoCapture(url_pic)
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imwrite("static/{}.jpg_{}".format(name,time), frame)
cap.release()
cv2.destroyAllWindows()

def get_image_web(ip, name):
"""
Function get image from camera and write it to disk (use HTTP)
"""
user='admin'
passw="password"
url_pic = "http://{}:80/ISAPI/Streaming/channels/1/picture/".format(ip)
data = {}
headers = {}
files={"foo":"bar"}
auth1 = HTTPDigestAuth(user,passw)
s = requests.Session()
d = s.get(url_pic,auth=auth1,headers=headers,data=data,files=files)
time = str(datetime.now()).split(".")[0][0:-4].replace(" ", "-")
with open("static/{}.jpg_{}".format(name,time),'wb') as f:
f.write(d.content)

Безопасность​

Для обеспечения должного уровня безопасности можно использовать 2 фактора авторизации:
  1. Проверка по Telegram ID (уникальный номер)
  2. Проверка пользователя по PIN коду в начале сообщения
  3. Для каждой учетной записи может создаваться ограниченный список объектов
Бот - это только прослойка между виртуальной машиной и сервером. На сам сервер устанавливается межсетевой экран ufw, открыть только порт для SSH, еще рекомендуется поменять порт SSH на любой отличный от 22, а так же добавить уведомление о попытках авторизации.

Ключевая ценность​

c202a59ab7ba51670330260dae5695d1.jpg


Источник статьи: https://habr.com/ru/post/568114/
 
Сверху