fdnet (Formal Described Networks ) представляет собой набор утилит и онтологий позволяющих описывать сети в машино-интерпретируемом формате.
Скрипт fdnet.py формирует набор SNORT правил на основе формально описанной сети. Необходимым аргументом этого скрипта является путь до описания сети в формате rdf/xml и комманда скрипту. rdf/xml может быть получен из n3 используя утилиту cwm:
cwm -n3 net.n3 -rdf=b >net.rdf
python fdnet.py --database net.rdf all
Скрипт выполняет следующие комманды:
-
all выполняет все комманды последовательно
-
diag создает только диаграмму взаимодействия програм
-
rules создает только список правил
-
plan формирует IP план
-
conn формирует список подключений
-
place формирует описание физического размешения оборудования
Скрипт на выходе скрипт создает несколько файлов:
-
sid-msg.map Набор идентифицаторов и сообщений о вторжении. Каждый номер (sid) используется в описании правила для SNORT/Suricata. Номера уникальны в рамках одной сети.
-
net.dot Исходный файл схемы, на основе которого создается файл .png
-
net.png Наглядное представление структуры сети с точки зрения взаимодействующих компонент (программ), их аффилиация с серверами (и репликами), а так же размещение логических серверов внутри логических сетей.
-
net.rules Файл содержащий правила для SNORT/Suricata
-
net_ip-plan.xlsx Таблица описывающая структуру сети с точки зрения назначения IP адресов оборудованию
-
net_phys.xlsx Таблица описывающая физическое размещение оборудования в серверной комнате
-
net_place.xlsx Таблица описывающая размещение и коммутиацию оборудоания
Минимальными требованиями для создания SNORT/Suricata правил следующие:
-
Subnet
-
name
-
hasServer
-
-
Server
-
name
-
hasDevice
-
hasProgram
-
-
NetDev
-
ip
-
hwAddr
-
connectedWith
-
-
Program
-
name
-
listenPort
-
communicateWith
-
При этом, скрипт корректно отработает, если в цифровой сети будут присутствовать сервера без программ. Скрипт сможет корректно отрабать, если в сети не будет Subnet, если в сети будет находится ни с кем не взаимодействующая программа, или у сервера не будет указан IP или имя.
Для создания описания физической конфигурации необходимо указать следующий минимальный набор объектов:
-
Rack
-
hasUnit
-
name
-
-
Unit
-
occupiedBy
-
number
-
-
Server
-
name
-
connectedWith
-
hasDevice
-
model
-
-
NetDev
-
ip
-
connectedWith
-
-
Model
-
name
-
power
-
size
-
weight
-
cooling
-
-
Port
-
name
-
number
-
connectedWith
-
Хотелось бы доработать следующие моменты:
-
Нужна валидация цифровой сети по схеме
-
Нужно проверить корректность работы с множеством сетевых адресов и подключений
-
Нужно описать пример
- Добавлена поддержка NedDev
- Добавлена генерация правил для MAC адресов
- Добавлена возможность описания группы серверов через диапазон
- Добавлены комманды в скрипт
- Сущности
- Генерация правил для IP и Port
- <..>