1
0
Home
Roman Dmitriev энэ хуудсыг 11 сар өмнө засварлав

Welcome to the Eye wiki!

Введение

Проект появился где-то в 2008 году, когда мне понадобилось быстро сделать замену виндовому шлюзу с трафик-инспектором. Вэб-интерфейс написан на php, бэкенд - на перле. В процессе жизни обе части дополнялись разными фичами, которые мне требовались. В принципе, сейчас, обе части имеют дублирующие друг у друга функции ядра и могли бы заменить друг друга, но вторую часть переписывать мне лень, а потому две части на разных языках программирования так и останутся.
Состоит из двух частей - вэб-интерфейс и бэкенд, плюс имеет связи с другими системами мониторинга (nagios|cacti|torrus|wiki). Изначально система создавалась для контроля и ограничения выхода сотрудников/оборудования в сеть интернет. В качестве шлюзов можно использовать либо линуксовый роутер (в этом случае система генерит конфиги для iptables) либо роутер от микротик. В связи с этим, общая идеология такая - есть список логинов, к которому биндится список используемых ими ip-адресов. На каждый ip-адрес можно повесить различные параметры выхода в интернет. Настраиваются как ширина используемого канала, так и ограничения по портам/протоколам, плюс есть ограничения по трафику в сутки и в месяц. Логины можно группировать в группы для удобства анализа/управления. Трафик снимается с коллекторов netflow, обсчитывается, затем применяются правила по лимиту трафика. Позднее в систему была добавлена возможность управлять конфигурацией dhcp-сервера, dns-сервера и нагиоса. Вместе с этим было внедрено сканирование сети для идентификации мест подключения каждого ip-адреса.

Описание

Вся логика работы крутится вокруг ip-адреса:

В "Пользователи" заводим запись на сотрудника или устройство. Затем к этой записи добавляем используемые ip-адреса и соответствующий mac-адрес.
Т.о. пользователь, как правило, - это все адреса, принадлежащие определённому устройству. Однако, можно также вносить адреса оборудования, используемые каким-то сотрудником, если нам не важно, что это за оборудование.
Например, у сотрудника есть телефон, ноутбук, планшет. Мы не хотим заводить каждое из этих устройств, как отдельную запись пользователя, потому что нам в общем всё равно, что это за устройства - они не относятся к нашей сетевой/серверной инфраструктуре, а являются чисто потребителями трафика и принадлежат одному человеку. В этом случае мы просто указываем все адреса этих устройств в записи пользователя. В комментарий к ip-адресу - пишем что это за устройство.

Пользователей можно собирать в группы. Группа, как правило, подразумевает какое-то логическое объединение для сотрудников/устройств.
Мы можем создать правила для автоматического назначения нового ip-адреса в группу по маку, принадлежности ip-адреса какой-то подсети, или по имени устройства, которым оно представляется dhcp-серверу. В этом случае для адреса будет создан логин в этой группе и сразу назначены права доступа в интернет.

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

При анализе правил сначала проверяется нахождение ip-адреса в сетях хотспота. При совпадении - все прочие правила игнорируются.
Затем выполняется проверка по правилам автоназначения для записей пользователей:

  1. Проверяются правила автоназначения ip-адреса
  2. Проверяются правила автоназначения mac-адреса
  3. Проверяются правила автоназначения имени хоста

Если совпадений не найдено, эти проверки повторяются в той же последовательности для правил автоназначения групп.

Если совпадений не найдено, в группе с флагом Default (по умолчанию, это группа DHCP) будет заведён пользователь с логином на основе mac-адреса с этим ip-адресом.
Если адрес соответствует сети хотспота, он будет помещён в группу, с установленным флагом HotSpot. Если таковой не создано - в группу с флагом Default.

Для адресов, принадлежащих пользователям в группах DHCP или HOTSPOT есть ряд ограничений. Основное - им нельзя выдать доступ в интернет:

Для группы DHCP - из соображений безопасности. Чтобы любое вновь появившееся оборудование не начало общаться с внешним миром.
Для группы HOTSPOT - потому что доступ в интернет для этой группы управляется хотспотом.

Адреса (и пользователи) в этих группах (DHCP|HOTSPOT) живут согласно времени аренды, указанной в соответствующей им сети (или пока адрес активен). При получении dhcp-release пакета (когда оборудование освобождает ip-адрес, полученный по dhcp), адреса автоматически удаляются из базы.

Если пользователю назначена любая другая группа, то адреса, принадлежащие этому пользователю, получают статическую привязку ip-адреса к маку для dhcp-сервера, а пользователю становится возможным выдать доступ в интернет.

Для определения порта свича, к которому подключен ip-адрес, необходимо создать в "Инфраструктура" иерархию подключения свичей.
Для этого:

Создаём для свича запись в "Пользователи". В поле Логин пишем имя свича, и указываем все используемые им ip-адреса.
Сам свитч создаём из учётной записи пользователя, для чего жмём кнопку "+Устройство". Указываем модель свича, число портов и доступ.
Свитч обязательно должен иметь доступ по SNMP, который мы и указываем в его записи. Затем, на странице "Порты" щёлкаем в номер порта, который является аплинком этого свича и указываем к какому оборудованию он подключен и устанавливаем флаг Uplink.

Обязательные настройки

Для работы необходимо указать используемую вами сеть:

Настройки - Сети:

В поле "Новая сеть" указываем используемую организацией сеть в формате / (например: 192.168.0.0/24). Здесь:

  • - адрес сети
  • - маска сети в десятичном формате, для маски 255.255.255.0 будет соответствовать 24.

  • Жмём добавить.
    Затем - кликаем в ссылку названия сети и указываем параметры:

    • Vlan - чисто информативное поле, указываем для себя к какому влану относится сеть
    • Шлюз - адрес шлюза для этой сети. Будет отдаваться клиентам по dhcp
    • DHCP - Если включено, dhcp-сервер будет раздавать адреса для этой сети
    • Static - Если включено, dhcp-сервер будет отдавать адреса только известным хостам, запись которых есть в базе. Все новые(неизвестные) хосты адрес не получат
    • DHCP start - начало динамического диапазона dhcp
    • DHCP end - конец диапазона dhcp
    • Lease time,m - время аренды адреса по dhcp в минутах
    • Офисная - Основное поле. Если не установлено, сеть будет игнорироваться системой
    • Хот-спот - Установить, если сеть относится к хотспоту. В этом случае в этой сети будут игнорироваться все поля доступа в интернет.
    • VPN - Информационное поле.
    • Бесплатная - Если сеть не офисная, установка этого поля будет означать исключение этой сети из подсчёта трафика
    • Обновлять dns из dhcp - Если включено, при получении dhcp запросов из этой сети будет выполняться обновление связанной DNS-записи
    • Discovery - Сеть будет обрабатываться сканером для поиска новых адресов и их места подключения

    DHCP

    Система работает с dhcp-сервером dnsmasq и dhcp-сервером на роутере Микротик.

    Для работы с роутером микротик, вы должны:

    1. Создать запись устройства в разделе "Пользователи"
    2. Внести ip-адрес этого устройства в созданную запись
    3. Нажать кнопку "+Устройство" в записи пользователя, которая и создаст сетевой объект, как элемент инфраструктуры.
    4. Перейти в раздел "Инфраструктура" и отредактировать появившуюся запись, указав:
      • логин/пароль и способ входа на маршрутизатор (ssh|telnet).
      • Включив DHCP-Server
      • В разделе "[Список L3 интерфейсов]" - указать название интерфейса, на котором работает DHCP-сервер (название dhcp-сервера на роутере должно быть указано в формате dhcp-<имя интерфейса>, например => dhcp-bridge)

    Для работы с dnsmasq

    Ничего дополнительно не нужно. Конфиг для dnsmasq всегда генерится для всех зарегистрированных в системе сетей с флагом "офисная".

    Нюансы настройки

    В записи ip-адреса пользователя, есть несколько полей, относящихся к dhcp-серверу:

    • ip и mac адреса
    • DHCP - если флаг выключен, адрес будет исключён из конфигурации dhcp-сервера. Используется либо для адресов, принадлежащих самому роутеру с функцией dhcp-сервера, либо для устройств, имеющих несколько ip-адресов в одной подсети.
    • dhcp acl - поле используется dhcp-сервером микротика, позволяет динамически добавлять адрес в указанный здесь список фаервола
    • dhcp option set - поле используется dhcp-сервером микротика, позволяет привязать к адресу созданную на dhcp-сервере группу параметров dhcp. Нужно, если вам надо отдавать разные параметры по dhcp какому-то набору адресов.

    Важно

    Если запись пользователя находится в группе с флагами DHCP или Hotspot, статической привязки создано не будет! Адреса в этих группах рассматриваются как динамические и будут удаляться по событию dhcp-release от dhcp-сервера!

    Почему dnsmasq

    Причин несколько, но основная - только dnsmasq позволяет сделать привязку к маку для разных подсетей.
    Вы можете сделать резервирование мака в разных подсетях и dnsmasq это спокойно обработает.
    Чтобы добиться такого же функционала от ISC DHCPD или его форков, надо хорошо извратиться (пример скрипта для этого варианта есть в addons), но конфиг становится сложно-читаем.
    Windows DHCP такого не может вообще.
    Если используется Windows DHCP сервер, можно написать power-shell скрипт, который будет мониторить лог и обрабатывать события выделения адресов, дёргая api (как это делает микротик).

    DNS

    Настройка

    Для работы с DNS необходимо указать в настройках ("Настройки"=>"Параметры"):

    • используемый домен ([office domain])
    • ip-адрес DNS сервера ([dns server])
    • тип сервера ([dns_server_type]) - windows | bind
    • Включить обновление днс-записей ([enable_dns_updates]) из Око

    Для связки с dhcp-сервером, необходимо:

    • В "Сети" разрешить обновлять днс-записи для этой сети из dhcp-запросов
    • В "Параметры" установить [update hostname from dhcp]
    • Если используется Windows-домен, можно дополнительно включить параметр [check_computer_exists], который будет проверять есть ли в домене машина с этим именем, прежде чем создавать соответствующую запись

    Для того, чтобы это вообще работало, надо:

    • Для windows DNS - ввести машину в домен, создать в домене пользователя dns_updater (внести в группы DnsAdmins,DnsUpdateProxy), создать keytab файл и положить его в /opt/Eye/scripts/cfg/dns_updater.keytab. Поменять права для группы DnsAdmins на полные для офисного домена.

    ktutil

    add_entry -password -p dns_updater@YOURDOMAIN.COM -k 1 -e aes256-cts-hmac-sha1-96

    wkt /opt/Eye/scripts/cfg/dns_updater.keytab

    quit

    • Для Bind - создать и подключить в конфиг named.conf rndc-файл (/etc/bind/rndc.key):

    include "/etc/bind/rndc.key";

    controls {

    inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key"; };

    };

    N.B. Если используется dnsmasq в качестве днс-сервера - не надо ничего. Ни указывать днс-сервер в настройках, ни писать его тип.

    Работа с dns-записями

    DNS-записи могут быть статическими и динамическими.

    Динамические записи

    Динамические записи обновляют имя (A-запись) и обратную зону (PTR-запись) по запросу dhcp-сервера.
    Эта операция выполняется при выполнении условий:

    1. Обновления DNS вообще разрешены в настройках
    2. Обновление DNS разрешено для сети, к которой принадлежит ip-адрес
    3. Для запрошенного ip-адреса нет статической привязки в системе
    4. Если включена проверка на существование компьютера в домене и запрошенное по DHCP имя в домене найдено

    Статические записи:

    В записи ip-адреса пользователя есть три поля, отвечающие за статические записи в DNS (помимо ip-адреса):

    • [Имя в dns] - собственно, требуемое dns-имя для соответствующего ip-адреса. Обязано быть уникальным. Для указанного имени также будет создана запись в обратной зоне.
    • [Альясы] - здесь можно указать дополнительные имена для основной dns-записи. По факту - это создание CNAME записей к основной.
    • [ptr] - Установка этого флажка означает, что будет создана ТОЛЬКО PTR-запись. Когда это нужно? Обычно, только для маршрутизаторов или устройств имеющих несколько сетевых интерфейсов.

    N.B. Если устройство перемещается между несколькими сетями, надо отслеживать актуальность привязки DNS-имени к адресу!
    Альтернативой будет для доменной машины убрать статическую привязку и оставить изменение DNS-записи по DHCP-запросу. Сложнее дело обстоит с устройствами, которые не входят в windows-домен. В этом случае придётся отключать проверку на существование компьютера в домене (что приведёт к захламлению основной зоны мусором). Или отслеживать изменения вручную.

    Внешние записи:

    Система поддерживает создание "внешних" относительно офисного домена dns-записей.
    Для этого, днс-имя необходимо внести с точкой в конце.
    Имена с точкой в конце не добавляются (и не удаляются) из офисного днс-сервера.

    Имена с точкой где-то внутри имени:

    Если в dns-имени есть точка, то в обработка будет зависеть от типа используемого dns-сервера:

    Для bind - никакой разницы нет. Будет просто создана A-запись с точкой в имени

    Для Windows DNS - разница есть! Будет создан поддомен из строки после точки и указанного ip-адреса. Поэтому, если вам нужно будет создать несколько таких записей внутри одного поддомена, первой записью должна быть основная запись для обращения к указанному поддомену!
    Например, у вас есть роутер к которому вы хотите обращаться, как router1, а на роутере есть несколько интерфейсов - vlan1, vlan2 и т.д.

    Последовательность прописывания dns-имён должна быть такой:

    1. Указываем основной интерфейс - vlan1.router1
    2. Создаём к нему альяс - router1
    3. После того, как записи будут созданы (надо подождать пару минут и проверить запросом к днс), можно создавать записи для остальных интерфейсов вида vlan2.router1 и т.д.