На текущий момент существует несколько групп потенциальных клиентов, которым может понадобиться описываемая система:
Вышеперечисленные клиенты могут решать свои проблемы с УТМ различными средствами (выставление УТМ в Интернет напрямую через “белый” IP, организацию vpn –соединений между 2 локальными сетями, организацию распределенных информационных баз, и.т.д.), что неизбежно приводит к снижению производительности, безопасности и усложняет структуру учета. Для борьбы с вышеперечисленными проблемами и был создан “УТМ-Провайдер”, цели создания которого можно перечислить пунктами:

Попробуем расписать данную схему подробнее. Изначально УТМ –мы работают в своих локальных сетях, пользователи напрямую обращаются к ним. С введением “УТМ-Провайдера”, с УТМ-мами начинают работать “клиенты УТМ”, которые с одной стороны, подключаются как клиенты к УТМ, с другой стороны, как клиенты, подключаются к серверу УТМ, находящемуся в интернете. Именно подключение к “серверу УТМ”, как клиент, позволяет игнорировать ограничения NAT. Затем, пользователь обращается к серверу УТМ, который транслирует запрос пользователя на Клиента УТМ, который транслирует запрос в УТМ. Аналогично, ответ из УТМ транслируется в “УТМ Клиент”, далее в “УТМ Сервер” и далее – пользователю. Это общая схема работы.
Так как архитектура решения предполагает использование одного “Сервера УТМ” для нескольких “Клиентов УТМ”, было решено сделать http-авторизацию при подключения пользователя к “Серверу УТМ”. При этом логином будет выбран FSRAR_ID клиента-организации, а пароль будет требоваться в обязательном порядке в виде его MD5-хеша. О организации авторизации будет описано подробнее ниже.
Так как данные, передаваемые в УТМ будут передаваться через интернет, было решено выполнять их шифрование согласно протоколу SSL (версия TLS1.2) для предотвращения их перехвата и доступа сторонним лицам. Данные шифруются на этапе передачи от “Клиента УТМ” к “Серверу УТМ” и, опционально, от “Сервера УТМ” к пользователю (могут и не шифроваться, если пользователь и “УТМ Сервер” находятся в одной локальной сети.
Так как данные, передаваемые в УТМ будут передаваться через интернет, было решено выполнять их подпись для предотвращения их подмены “клиентов УТМ” сторонними фальшивыми клиентами, а также “Серверов УТМ” сторонними фальшивыми серверами. Данные подписываются на этапе передачи от “Клиента УТМ” к “Серверу УТМ” и, опционально, от “Сервера УТМ” к пользователю (могут и не подписываться, если пользователь и “УТМ Сервер” находятся в одной локальной сети. Каждому “Клиенту УТМ” выдается подписанный сертификат, работающий только на конкретном клиенте. Аналогично с “Сервером УТМ”. Важно отметить, что данные сертификаты являются самоподписанными и выдают предупреждение при подключении к серверу УТМ из браузера, на которое следует добавить данный сертификат в исключения браузера.
Клиентская часть (“УТМ Клиент”) представлена отдельным исполняемым файлом “UTMProviderClient.exe” и выполняется в инфраструктуре УТМ. “УТМ Клиент” работает с конкретным экземпляром УТМ и может выполняться как на рабочей станции УТМ, так и на прочей рабочей станции в локальной сети. Если “УТМ Клиент” выполняется на рабочей станции с УТМ, он будет собирать статистику и быстродействие УТМ, а также обеспечивать удаленный доступ. Если “УТМ Клиент ” выполняется на отдельной машине и имеет доступ к УТМ посредством локальной сети, то статистику и быстродействие он снимать не будет. Выполняться может как служба Windows, так и отдельно стоящее приложение, запускаемое с ключом “-application” командной строки и имеющее интерфейс с текущим логом и настройками:


Клиент поддерживает повторные подключения к УТМ и “УТМ Серверу” в случае обрыва связи, свертывание в системный трэй при минимизации окна, а также ведения лога в интерфейс, в файлы на локальном диске. А также передача логов на “УТМ сервер” и дальше, пользователю по запросу:

Серверная часть (“УТМ Сервер”) представлена отдельным исполняемым файлом “UTMProviderServer.exe”. “УТМ Сервер” работает с множеством экземпляров “УТМ Клиентов” и может выполняться как на рабочей станции в интернете, так и на рабочей станции в локальной сети пользователя. Выполняться может как служба Windows, так и отдельно стоящее приложение, запускаемое с ключом “-application” командной строки и имеющее интерфейс с текущим логом и настройками:


В интерфейсе можно увидеть список подключённых/авторизованных “Клиентов-УТМ”, по нажатию на который можно увидеть его параметры. Это могут быть логические параметры:

системные:

и лог обмена с клиентом:

Также, в случае возникновения каких-либо проблем с УТМ, данный Клиент УТМ выделяется красным цветом в списке клиентов, а в параметрах УТМ возникает подсказка по проблеме:
![]()
Также, из системных параметров можно отправить команды УТМ-у, такие, как запуск, перезапуск и остановку УТМ:
![]()
Помимо типового доступа учетного ПО (пользователя) к серверу УТМ для обмена с РАР УТМ, есть отдельный интерфейс доступа, реализующий функционал, аналогичный приложению Сервера УТМ. Интерфейс реализован в виде обмена запрос-ответ пакетами XML, посылаемыми на адрес “/UTM_Management”. Формат пакетов обмена в виде xsd файла приведен в приложении 1. Пример реализации удаленного доступа приведен в виде обработки 1С и доступен для просмотра:


<xs:schema
xmlns:tns="http://www.ejoff.ru/UTM_Management"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.ejoff.ru/UTM_Management"
attributeFormDefault="unqualified"
elementFormDefault="qualified">
<xs:simpleType name="ИдентификаторФСРАР">
<xs:restriction base="xs:string">
<xs:maxLength value="50" />
<xs:pattern value="[0-9]+" />
</xs:restriction>
</xs:simpleType>
<xs:complexType name="Клиент">
<xs:sequence>
<xs:element name="UTMLogicStatus" type="tns:ЛогическийСтатусКлиента" />
<xs:element name="UTMSystemStatus" type="tns:СистемныйСтатусКлиента" />
<xs:element name="FSRARID" type="tns:ИдентификаторФСРАР" />
<xs:element name="Description" type="xs:string" />
<xs:element name="Connected" type="xs:boolean" />
<xs:element name="Logined" type="xs:boolean" />
<xs:element name="LastErrorDescription" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="Команда">
<xs:sequence>
<xs:element name="Address" type="xs:string" />
<xs:element name="Port" type="xs:string" />
<xs:element name="FSRARID" type="tns:ИдентификаторФСРАР" nillable="true" />
<xs:element name="AdminLogin" type="xs:string" />
<xs:element name="AdminPassword" type="xs:string" />
<xs:element name="CommandType" type="tns:ТипыКоманд" />
<xs:element name="Sign" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="ЛогическийСтатусКлиента">
<xs:sequence>
<xs:element name="UTMVersion" type="tns:ТипВерсияУТМ" />
<xs:element name="UTMWorking" type="xs:boolean" />
<xs:element name="PKIDateFiled" type="xs:boolean" />
<xs:element name="PKIStartDate" type="xs:date" nillable="true" />
<xs:element name="PKIStopDate" type="xs:date" nillable="true" minOccurs="0" />
<xs:element name="GOSTDateFiled" type="xs:boolean" />
<xs:element name="GOSTStartDate" type="xs:date" nillable="true" minOccurs="0" />
<xs:element name="GOSTStopDate" type="xs:date" nillable="true" minOccurs="0" />
<xs:element name="InDocCount" type="xs:int" />
<xs:element name="OutDocCount" type="xs:int" />
<xs:element name="MinOutQueryTime" type="xs:int" />
<xs:element name="MaxOutQueryTime" type="xs:int" />
<xs:element name="AvgOutQueryTime" type="xs:int" />
<xs:element name="TimeStamp" type="xs:dateTime" nillable="true" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="ОтветУТМ">
<xs:sequence>
<xs:element name="ClientList" type="tns:СписокКлиентов" minOccurs="0" />
<xs:element name="ErrorCode" type="xs:int" />
<xs:element name="Result" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="СистемныйСтатусКлиента">
<xs:sequence>
<xs:element name="UTMLocal" type="xs:boolean" />
<xs:element name="MonitorIsRun" type="xs:boolean" nillable="true" />
<xs:element name="UpdateIsRun" type="xs:boolean" nillable="true" />
<xs:element name="TransportIsRun" type="xs:boolean" nillable="true" />
<xs:element name="TransportReadBytes" type="xs:unsignedLong" />
<xs:element name="TransportWriteBytes" type="xs:unsignedLong" />
<xs:element name="TransportCurrentMemory" type="xs:unsignedLong" />
<xs:element name="TransportMaximumMemory" type="xs:unsignedLong" />
<xs:element name="DiskFreeSize" type="xs:unsignedLong" />
<xs:element name="DiskTotalSize" type="xs:unsignedLong" />
<xs:element name="PageFault" type="xs:unsignedLong" />
<xs:element name="AvgPageFault" type="xs:unsignedLong" />
<xs:element name="ErrorCode" type="xs:int" />
<xs:element name="TimeStamp" type="xs:dateTime" nillable="true" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="СписокКлиентов">
<xs:sequence>
<xs:element name="Client" type="tns:Клиент" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:simpleType name="ТипВерсияУТМ">
<xs:restriction base="xs:string">
<xs:maxLength value="6" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ТипыКоманд">
<xs:restriction base="xs:string">
<xs:enumeration value="GetClientList" />
<xs:enumeration value="StartUTM" />
<xs:enumeration value="StopUTM" />
<xs:enumeration value="RestartUTM" />
<xs:enumeration value="GetClientLog" />
<xs:enumeration value="GetMainLog" />
</xs:restriction>
</xs:simpleType>
</xs:schema>
Оставьте свой номер телефона, и мы бесплатно проконсультируем вас по возникшим вопросам.
Оставьте свой номер телефона, и мы бесплатно проконсультируем вас по возникшим вопросам.
Оставьте ваши контактные данные, и мы свяжемся с вами, чтобы уточнить детали вашего проекта.