На текущий момент существует несколько групп потенциальных клиентов, которым может понадобиться описываемая система:
Вышеперечисленные клиенты могут решать свои проблемы с УТМ различными средствами (выставление УТМ в Интернет напрямую через “белый” 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>
Оставьте свой номер телефона, и мы бесплатно проконсультируем вас по возникшим вопросам.
Оставьте свой номер телефона, и мы бесплатно проконсультируем вас по возникшим вопросам.
Оставьте ваши контактные данные, и мы свяжемся с вами, чтобы уточнить детали вашего проекта.