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

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

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

wikipedia.org

Введение

Каким бы не был удобным 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 пулом

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

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

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

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

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

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

Под капотом

В сети уже есть достаточно качественного контента, поэтому здесь не будет примеров кода. Он ничем не отличается от того, что уже было написано ранее.

Создание к бота 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, а так же добавить уведомление о попытках авторизации.

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

Источник: https://habr.com/ru/post/568114/


Интересные статьи

Интересные статьи

ApexSQL — это комплексный набор инструментов, который оптимизирует и автоматизирует процессы управления базами данных SQL Server и разработки, а также обеспечивает безопасность и соответс...
Привет, Хабр! Наши читатели не могли не заметить нашего растущего интереса к языку Go. Наряду с книгой из предыдущего поста, у нас найдется на эту тему немало интересного. Сегодня мы х...
Многолетняя борьба за точность «broadband maps» близится к завершению. Это значит, что государство и телекоммуникационные компании смогут лучше понимать, как развивать се...
Доброго времени суток, друзья! В подавляющем большинстве случаев нам, как JavaScript-разработчикам, не нужно беспокоиться о работе с памятью. Движок это делает за нас. Тем не ме...
Добрый день, сегодня я хотел бы поделится с Вами проблемами и их необычными решениями, которые встретились при написании небольших IT проектов. Сразу скажу, что статья для тех, кто хоть немного р...