Часть 4 – Обновление ROS, создание бэкапа.
SNMP.
Протокол SNMP предназначен для мониторинга различных устройств в IP-сетях и позволяет получать с них дистанционно требуемые параметры. wiki
Версии SNMP можно поделить на 2 варианта:
v1 и v2c – не безопасные версии, которые передают данные между агентом и менеджером (системой управления сетью NMS) в открытом не зашифрованном виде, создавая угрозу информационной безопасности. Используется условный логин (комьюнити) и IP-адрес с которого разрешено подключение. Паролей нет. Эти версии можно ограниченно использовать внутри защищенной сети. На клиенте указывается комьюнити (по дефолтной настройке «public») и IP-адрес устройства, с которого разрешено подключение. При совпадении комьюнити и IP-адреса клиент начинает передавать данные менеджеру (системе управления или мониторинга сети).
v3 – применяет шифрование передаваемых данных и аутентификацию пользователя (логин-пароль), ее можно использовать между сетями и в Интернете.
Освоить MikroTik Вы можете с помощью онлайн-куса
«Настройка оборудования MikroTik». Курс содержит все темы, которые изучаются на официальном курсе MTCNA. Автор курса – официальный тренер MikroTik. Подходит и тем, кто уже давно работает с микротиками, и тем, кто еще их не держал в руках. В курс входит 162 видеоурока, 45 лабораторных работ, вопросы для самопроверки и конспект.
Чаще всего мониторят такие параметры: имя устройства, модель, загрузка процессора, использование ОЗУ, использование диска, нагрузка на WAN (для роутеров), температура, напряжение питания, время работы системы. Для определенных устройств могут быть какие-то их специфические параметры, например расход тонера в сетевом принтере.
Система сетевого мониторинга The Dude поддерживает все версии SNMP.
Если используется v1, v2, то необходимо заменить название комьюнити «public» на что-то другое. Использовать эти версии в защищенных сетях или отдельных VLAN.
Создадим новое комьюнити, заменим его название и установим по умолчанию (default).
Выбираем v2-public. Нажимаем кнопку Copy.
Переименовываем копию профиля, заменяем в нем название комьюнити.
Выставляем в значении default созданный только что профиль.
Теперь в любом устройстве на карте в настройке по умолчанию будет профиль с измененным именем комьюнити и версией протокола v2c.
Если у кого-то пока нет опыта работы с SNMP, то сперва нужно потренироваться с комьюнити «public». Это имя используется в большинстве сетевых устройств по умолчанию. И в большинстве случаев SNMP v1 и v2 сразу работают без дополнительных настроек.
Для v3 нужно создать профиль и указать учетные данные. Выполним это.
Переходим в меню Settings >> SNMP. Добавляем новый профиль, нажав +.
Name: SNMPv3 – Любое понятное имя профиля.
Version: 3 – версия протокола.
Port: 161 без изменений.
User Name: PC360-NETWORK – Имя пользователя, которое в предыдущих версиях SNMP было комьюнити (Community).
В SNMPv3 нельзя использовать дефолтное значение «public» по причинам информационной безопасности.
При создании имя рекомендуется использовать только строчные буквы и цифры. Многие устройства при настройке имя SNMPv3 не поддерживают спец-символы. В данном случае имя содержит большие буквы и тире для наглядности.
Security: private – тип безопасности.
Auth Method: sha1 – способ аутентификации.
Auth Password: Pass-123 – сложный пароль из латинских букв разного регистра, цифр и спец-символов, не менее 8 знаков.
Crypt Method: aes – метод шифрования.
Crypt Password: 321-Pass – сложный пароль.
Количество попыток запроса Tries и время таймаут после каждой попытки Try Timeout изменяются индивидуально и по ситуации.
Нажимаем кнопку ОК для сохранения настроек.
Желательно сразу создать второй профиль методом копирования с другим методом шифрования. В настройках некоторых сетевых устройств не всегда есть возможность сменить шифрование DES на AES.
Чтоб профиль начал работать его необходимо выбрать в настройке устройства Settings.
Далее представлена активация и использованию SNMP в различных сетевых устройствах, которые были в ближайшем доступе.
SNMP в RouterOS.
Настройка на примере одного из сетевых роутеров. Подключаемся через WinBox.
Переходим в IP >> SNMP >> Communities и создаем новое комьюнити нажав +
В открывшемся окне вводим параметры.
Name: PC360-NETWORK – имя такое же, как указывали в настройках SNMPv3 в сервере Dude.
Adressess: 192.168.1.1 – адрес сервера The Dude. С этого адреса разрешается подключение к роутеру по SNMP.
Security: private – тип безопасности.
Read Access – только чтение.
Authentication Protocol: SHA1 – способ аутентификации.
Encryption Protocol: AES — протокол шифрования
Authentication Password: Pass-123 – сложный пароль такой же как в профиле The Dude.
Encryption Password: 321-Pass – сложный пароль такой же как в профиле The Dude.
Нажимаем ОК для сохранения.
Переходим в верхнее окно с настройками.
Enabled – отмечаем галочкой активацию SNMP.
Contact Info – вводим контактную информацию.
Location – место расположения.
Trap Community – указываем созданную только что комьюнити.
Trap Version: 3 – версия SNMP.
Нажимаем ОК для сохранения.
Отключаем существующее комьюнити public в целях информационной безопасности. Для этого меняем имя комьюнити public на что-нибудь любое другое, например pc360ru. Отключаем доступ на чтение и запись.
Те же настройки через терминал.
1 2 3 4 5
| /snmp community set [ find default=yes ] name=pc360ru read—access=no add addresses=192.168.1.1/32 authentication—password=Pass—123 authentication—protocol=SHA1 encryption—password321—Pass encryption—protocol=AES name=PC360—NETWORK security=private /snmp set contact=Dude—admin enabled=yes location=PC360 trap—community=PC360—NETWORK trap—interfaces=all trap—version=3 |
Переходим в The Dude. Проверяем роутер (или добавляем на схему). В его настройках должен быть указан профиль SNMPv3.
Если все сделано правильно, то информация по SNMP уже передается. На значке роутера появится строка с отображением производительности.
На вкладке SNMP появятся некоторые параметры.
Если роутер находится где-то вне сети или работает через VPN, то в его firewall нужно открыть доступ по порту 161 для IP-адреса сервера The Dude или интерфейса VPN.
1
| /ip firewall filter add action=accept chain=input comment=«SNMP ACCEPT» dst—port=161 in—interface=VPN—TO—MAIN—OFFICE protocol=udp |
MIB и OID: мониторинг и вывод желаемых параметров на этикетку устройства.
MIB – Management Information Base (база управляющей информации) – виртуальная база данных, используемая для управления объектами в сети передачи данных. wiki
Простыми словами это файл, в котором хранятся записи обо всех объектах конкретного устройства. Под объектом подразумевается параметр, состояние или настройка в устройстве.
OID – Object identifier (идентификатор объекта) – уникальный цифровой идентификатор для объектов в иерархическом дереве MIB.
Кроме этих двух определений в протоколе SNMP еще используется понятие Object Name – уникальное имя объекта, соответствующее определенному OID.
Проще один раз увидеть, чтоб понять. Для просмотра использован MIB-браузер iReasoning.
В Dude тоже можно посмотреть MIB, но нельзя выбрать OID.
OID в Dude можно составить самому по следующему принципу (но это долго). Открываем нужный MIB в отображении дерева и справа от каждой ветки папок видим номер.
Переписываем номера от каждой нужной ветки до искомого объекта.
iso-1, org-3 и тд, mgmt – эта ветка не подходит, ее номер не пишем, и тд.
1.3.6.1.4.1 …
В результате получаем значение OID объекта для напряжения питания. 1.3.6.1.4.1.14988.1.1.3.8 Есть другие способы получения OID.
Допустим мы, хотим отслеживать все параметры Health у роутера. В роутере должны быть соответствующие датчики. Можно посмотреть их наличие в меню WinBox System >> Health или по модели на сайте производителя.
Как видно отображаются температура и напряжение питания. Нам необходимо узнать OID этих объектов и затем добавить их в этикетку роутера на карте.
В терминале роутера вводим команду:
1
| /system health print oid |
В ответ будут выведены нужные значения.
voltage: .1.3.6.1.4.1.14988.1.1.3.8.0
temperature: .1.3.6.1.4.1.14988.1.1.3.10.0
Другие полезные запросы:
system resource cpu print oid – загрузка процессора в процентах
system resource print oid – различные системные ресурсы (время работы, память и тп)
Еще один альтернативный более долгий способ, но так же более универсальный для нахождения других OID.
Переходим в The Dude. Нажимаем правой кнопкой мыши на выбранном роутере. Выбираем Tools >> Snmpwalk.
Выбираем нужный профиль SNMP. Можно сменить просмотр на Tree (дерево). Нажимаем кнопку Start.
В результате сканирования появится большое количество доступных OID.
Нажимаем Ctrl+F или кнопку «Бинокль» и находим нужный OID по известному параметру, который посмотрели ранее в WinBox этого роутера. Если это температура – ищем значение 27. Если это напряжение – ищем значение 24.1.
В описании найденного OID присутствует слово Voltage. Это то, что нужно. Копируем OID правой кнопкой мыши.
Вставляем OID в этикетку, дополнив нужным синтаксисом.
Tp=[oid(«1.3.6.1.4.1.14988.1.1.3.10.0»)]C
U=[oid(«1.3.6.1.4.1.14988.1.1.3.8.0»)]V
В результате этих действий на этикетке роутера будет отображаться динамическое значение температуры и напряжения питания.
Аналогичным методом находятся другие необходимые OID для мониторинга. Однако такой метод не всегда может найти значение (Value) или имя OID, потому что эти параметры могут отображаться по-другому.
Функции.
Небольшой пример как можно использовать функции. Допустим нам нужно узнать свободную память в роутере в процентах, чтоб быстро оценить его состояние.
Найти такой OID не получилось. Но есть другие OID.
[oid(«1.3.6.1.2.1.25.2.3.1.5.65536»)] Всего памяти.
[oid(«1.3.6.1.2.1.25.2.3.1.6.65536»)] Использовано памяти.
Чтоб узнать свободную память нужно найти процент числа от общего количества.
Всего памяти – X.
Использовано памяти – Y.
Свободно памяти – Z.
Найдем свободную память.
Z =X – Y
Процент свободной памяти от общего количества.
Z%=100% / (X/Z)
Теперь все то же самое, только с использованием OID.
100/(oid(«1.3.6.1.2.1.25.2.3.1.5.65536»)/(oid(«1.3.6.1.2.1.25.2.3.1.5.65536»)-oid(«1.3.6.1.2.1.25.2.3.1.6.65536»)))
Далее нужно создать новую функцию и разместить это выражение в ней.
В имени функции не должно быть пробелов.
В результате цифра на этикетке получилась без округления, что выглядит не очень приемлемо. Поэтому к выражению нужно применить синтаксическую функцию округления round(x).
Итоговое выражение.
round(100/(oid(«1.3.6.1.2.1.25.2.3.1.5.65536»)/(oid(«1.3.6.1.2.1.25.2.3.1.5.65536»)-oid(«1.3.6.1.2.1.25.2.3.1.6.65536»))))
Выносим функцию на этикетку и подписываем ее для понятности.
Free Memory [FREE_MEMORY()]%
Результат.
В реальности, для понимания администратора проще видеть не процент свободной памяти, а процент использованной.
Поэтому 100% / (X/Y).
round(100/(oid(«1.3.6.1.2.1.25.2.3.1.5.65536»)/(oid(«1.3.6.1.2.1.25.2.3.1.6.65536»))))
Used Memory [USED_MEMORY ()]%
Кому как удобно.
Это просто пример, используя который можно выводить какие-то другие необходимые значения.
Изначально в ранние версии Windows была добавлена поддержка SNMP v1 и v2c, но затем поддержка прекратилась для предотвращения утечек информации с незашифрованными данными. При этом во всех ОС до Windows 10 SNMP v1 и v2c еще можно активировать. SNMPv3 отсутствует в Windows. Его можно использовать только, если установить стороннее ПО или агента, например NET-SNMP.
Для активации службы SNMP v1 и v2 первоначально нужно добавить соответствующую роль.
В серверных Windows это делается через мастер добавления ролей и компонентов.
Для Windows 10 добавление этой службы перенесли в параметры конфигурации.
Далее, через панель управления переходим в службы и находим службу SNMP.
Выполняем ее настройку.
Добавляем сообщество (комьюнити) «public». Если в настройках профиля SNMP в Dude изменялось имя комьюнити, то нужно указать его.
Разрешаем прием пакетов SNMP только с одного конкретного IP-адреса сервера Dude.
Сохраняем настройку.
Этот ПК (сервер) предварительно добавлен в Dude, настройки его SNMP-профиля не изменялись.
Через некоторое время на этикетке сервера появится строка с параметрами производительности. Это свидетельствует о работе SNMP.
На вкладке SNMP этого устройства появились различные параметры.
Можно запустить Snmpwalk на устройстве.
Добавление желаемых OID для мониторинга аналогично описанному выше для RouterOS.
Например, нужно вывести на этикетку время непрерывной работы сервера.
Смотрим в диспетчере задач сервера эту информацию: 78дней.
Запускаем Snmpwalk.
Через поиск находим значение 78. Проверяем имя.
Копируем OID в этикетку. Дописываем пояснение.
System Up Time [oid(«1.3.6.1.2.1.25.1.1.0»)]
Результат.
По работе с агентом SNMPv3 информация будет добавлена позже.
Настройка выполнялась на ПК с UBUNTU20.
Запускаем терминал Ctrl+Alt+T
Входим с правами админа.
1
| sudo su – root |
пароль
Обновляем ПО.
1
| apt—get update |
Установим SNMP демон.
1
| apt install snmpd |
Демон – компьютерная программа в UNIX-подобных системах, запускаемая самой системой и работающая в фоновом режиме без прямого взаимодействия с пользователем.
SNMP v1, v2.
Разрешим подключения SNMP к этому компьютеру с IP-адреса сервера The Dude.
Отредактируем файл конфигурации snmpd редактором nano.
1
| nano /etc/snmp/snmpd.conf |
Закоментируем строку
1
| # agentaddress 127.0.0.1,[::1] |
Создадим новую строку, разрешающую подключение с локальных интерфейсов и с внешнего интерфейса.
1
| agentaddress udp:127.0.0.1:161,udp:192.168.10.235:161 |
(внешний интерфейс подразумевает интерфейс этого компьютера с его IP-адресом)
Далее нужно исправить комьюнити (community).
Синтаксис.
rocommunity (read-only) – разрешение только на чтение.
rwcommunity (read-write) – разрешение на запись.
public – название комьюнити.
IP-адрес с которого разрешено подключение.
Разрешим для комьюнити public доступ только на чтение с IP-адреса сервера Dude.
1
| rocommunity public 192.168.1.1 |
Ctrl+O сохранить по тому же пути
Enter (Ввод)
Ctrl+X выйти
Перезапускаем snmpd
1
| systemctl restart snmpd |
Проверяем статус snmpd
1
| systemctl status snmpd |
Устанавливаем автозапуск после перезагрузки ПК.
1
| systemctl enable snmpd |
Проверяем прослушиваемые порты
1
| netstat —nlpu|grep snmp |
Если нет команды netstat то ее нужно установить
1
| apt install net—tools |
Блокировку SNMP может производить firewall. Проверяем его статус.
1
| ufw status |
(Status: inactive)
Если firewall работает то его нужно настроить для разрешения входящих подключений от Dude.
1
| ufw allow from 192.168.1.1 to any port 161 comment «Allow SNMP» |
UFW – это оболочка с упрощенной настройкой для линуксового файервола iptables. Если используется iptables напрямую, то нужно выполнить следующие настройки.
1
| iptables —A INPUT —s 192.168.1.1 —p udp —dport 161 —j ACCEPT —m comment —comment «Allow SNMP» |
Этой строкой мы разрешаем входящий трафик для порта UDP 161 с IP-адреса сервера The Dude.
Удаление правила по номеру в списке.
Выводим список с номерами.
1
| iptables —L —line—numbers |
Удаляем нужный номер правила в нужной цепочке.
1
| iptables —D INPUT 1 |
Переходим в The Dude. На тестовом ПК появилась его производительность.
В этикетку добавлен пробный OID, выводящий имя компьютера.
[oid(«1.3.6.1.2.1.1.5.0»)] PC name’s OID
Данные по SNMP передаются успешно.
SNMPv3
В этой версии отсутствует понятие комьюнити. Создаем пользователя и пароль, и так же пароль для шифрования передающихся данных. Синтаксис такой:
net-snmp-create-v3-user [-ro] [-A authpass] [-a MD5|SHA] [-X privpass][-x DES|AES] [username]
[-ro] — разрешение только на чтение;
[-A authpass] — пароль аутентификации (Authentication Password);
[-a MD5|SHA] — алгоритм аутентификации (выбрать MD5 или SHA);
[-X privpass] — пароль шифрования (Encryption Password);
[-x DES|AES] — алгоритм шифрования (выбрать DES или AES];
[username] — имя пользователя.
Действия выполнялись на другом сервере.
Поэтому заново заходим в терминал с правами root.
1
| sudo su – root |
пароль
Обновляем ПО.
1
| apt—get update |
Установим SNMP демон.
1
| apt install snmpd |
Устанавливаем доп. библиотеку (нужна при создании пользователя).
1
| apt install libsnmp—dev |
Проверяем статус snmpd.
1
| systemctl status snmpd |
Останавливаем snmpd.
1
| systemctl stop snmpd |
Создаем пользователя, пароли, задаем алгоритмы шифрования.
1
| net—snmp—create—v3—user —ro —A Pass—123 —a SHA —X 123—Pass —x AES PC360—NETWORK |
Имя пользователя и пароли должны быть аналогичны настройке профиля SNMPv3 в The Dude.
*Для удаления или редактирования пользователя нужно остановить snmpd и с помощью редактора исправить или удалить данные usmUser и rouser в файлах по путям:
1 2
| nano /var/lib/snmp/snmpd.conf nano /usr/share/snmp/snmpd.conf |
Запускаем snmpd
1
| systemctl start snmpd |
Отредактируем файл конфигурации snmpd с помощью редактора nano.
1
| nano /etc/snmp/snmpd.conf |
Закоментируем строку.
1
| # agentaddress 127.0.0.1,[::1] |
Создадим новую строку, разрешающую подключение с локальных и с внешнего интерфейсов.
1
| agentaddress udp:127.0.0.1:161,udp:192.168.1.15:161 |
Отключим комьюнити public, закомментировав строки.
Ctrl+O сохранить по тому же пути.
Enter (Ввод).
Ctrl+X выйти.
Перезапускаем snmpd.
1
| systemctl restart snmpd |
Проверяем статус snmpd.
1
| systemctl status snmpd |
Устанавливаем автозапуск после перезагрузки ПК.
1
| systemctl enable snmpd |
Проверяем прослушиваемые порты.
1
| netstat —nlpu|grep snmp |
Проверяем статус файрволов ufw и iptables. В данном случае они не мешают доступу.
Переходим в The Dude. В настройках нужного компьютера выставляем созданный ранее профиль SNMPv3. Через пару минут на этикетке появилась информация о производительности.
Пример добавления OID аналогичен вышеописанным в RouterOS и Windows.
Запускаем Snmpwalk.
Выведем на этикетку, например, время работы системы. Находим OID по тэгу uptime.
Копируем его в этикетку.
System Up Time [oid(«1.3.6.1.2.1.1.3.0»)]
*c момента подключения SNMP
Результат.
Можно поискать другие полезные OID в Интернете.
Изначально, по заводским настройкам SNMP v1 и v2c уже активирован с комьюнити public и работает после включения коммутатора. Убедиться в этом можно, если добавить коммутатор на схему The Dude и запустить Snmpwalk. Коммутатор выдаст большое количество разных объектов.
Выведем для теста пару OID на этикетку.
Up Time [oid(«1.3.6.1.2.1.1.3.0»)]
Model [oid(«1.3.6.1.2.1.47.1.1.1.1.13.67108992»)]
По сути дела это дыра в безопасности. Мало кто из администраторов специально подключается в новый купленный коммутатор и закрывает SNMP v1, и V2. Хотя в коммутаторе каждый раз появляется такое предупреждение при логине в него.
Настройка SNMPv3.
Создаем группу.
Добавляем пользователя.
По результатам работы с GS1900, стало понятно, что в этих коммутаторах нельзя переключить шифрование des aes без командной строки. Настройка через командную строку в этих моделях не поддерживается. Работают команды только для просмотра. Поэтому создан профиль SNMPv3-des для проверки работы. В нем метод шифрования (Crypt Method) указан des.
Проверяем Snmpwalk – работает.
Подключаемся к коммутатору через web-браузер.
Переходим к настройке SNMP в главном меню коммутатора Management >> Access Control >> SNMP
Вводим учетные данные такие же, как в настройке для SNMPv3 в Dude.
Username: PC360-NETWORK – имя пользователя (имя сообщества).
Security Level: private – тип безопасности.
Authentication: SHA – способ аутентификации.
Password: Pass-123 – пароль аутентификации.
Privacy: AES – приватность (шифрование)
Password: пароль шифрования.
Group: readonly – группа только для чтения.
Проверяем Snmpwalk. Данные начинают поступать.
Есть еще дополнительная настройка на вкладке «Контроль доступа». Тут настраиваются «ловушки» (trap).
Trap – это определенное событие которое может произойти в устройстве. На него нет запроса, коммутатор сам его отправляет. Так же нет подтверждения от менеджера (сервера мониторинга) о доставке.
Настройки должны выглядеть примерно так.
Trap Community используется, у остальных заменены названия чтоб отключить их.
Trap Destination: v3 192.168.1.1 (IP-адрес сервера Dude) – место назначения для отправляемых «ловушек».
После этого на вкладке Group отметить галочками события, о которых мы хотим получать сообщения.
Настройка очень урезана.
Для версии 3 нельзя выбрать шифрование и пароль (через web-интерфейс). Получить данные через SNMPv3 не удалось.
Для версии 2c название комьюнити должно состоять только из букв и цифр.
SNMPv2 работает, выполняется Snmpwalk.
Через панель управления попадаем в настройку SNMP. Активируем службу SNMP. Выбираем версию SNMPv3. Настройки такие же как в сервере.
Применяем настройку. Переходим в сервер мониторинга.
В настройках объекта сетевого хранилища выбираем профиль SNMPv3 с шифрованием DES.
Через некоторое время на этикетки отобразились параметры производительности. Добавляем свои дополнительные параметры через OID по необходимости.
Control Panel >> Notification >> SNMP.
Активируем, выставляем настройки, такие же как в профиле сервера мониторинга.
Подчеркнуты обязательные к заполнению настройки, без которых применение (Apply) не срабатывает.
Community: PC360-NETWORK или public – сообщество, используется для v1 и v2.
Ниже галочками отмечаются виды сообщений, которые хотим получать трапами.
Настройка находится в боковом меню Management Settings >> SNMP.
Для версии v1, v2 и комьюнити «public» ничего настраивать не нужно.
Убедится в ее работе можно запустив Snmpwalk на добавленном на карту принтере.
Настройка v3.
Переходим в настройку протоколов.
Отключаем SNMPv1/v2c.
Включаем SNMPv3.
Возвращаемся к настройке SNMP.
SNMPv3 не заработал. Нет возможности ввести пароль AES.
Настройки SNMP невозможно изменить через web-интерфейс.
Под эти настройки нужно создать профиль в Dude. Указать все как тут.
После активации этого профиля в устройстве на карте, SNMPv3 заработал.
У разработчиков странная логика. Во первых комьюнити public и SNMPv1, v2 остались активными. Во вторых для всех принтеров этой модели общие одинаковые параметры имени пользователя и пароль в SNMPv3. Это дыра в безопасности. Хотя для принтер это может не очень критично.
Не все камеры поддерживают работу с SNMP. В некоторых моделях в меню нет такой вкладки.
SNMPv1,v2 работает сразу после активации в настройках камеры.
Для SNMPv3 нужно ввести параметры имени пользователя паролей и шифрования, такие же как в профиле сервера мониторинга.
В связи с тем, что имя пользователя в настройке SNMP видеокамеры не может содержать определенных знаков, в настройке The Dude был создан дополнительный профиль для IP-видеокамер.
Подключаемся в камеру через браузер. Выполняем настройки.
Так же необходимо заполнить настройки для пользователя с правами записи, иначе система не позволит сохранить введенные данные.
Проверка.
Настройка выполняется на вкладке «Управление».
К сожалению SNMPv3 отсутствует. Активируем что есть.
Проверка.
Освоить MikroTik Вы можете с помощью онлайн-куса
«Настройка оборудования MikroTik». Курс содержит все темы, которые изучаются на официальном курсе MTCNA. Автор курса – официальный тренер MikroTik. Подходит и тем, кто уже давно работает с микротиками, и тем, кто еще их не держал в руках. В курс входит 162 видеоурока, 45 лабораторных работ, вопросы для самопроверки и конспект.