Устал бороться с мониторингом дисков на ESXi серверах. Хочется, чтобы всё взяло и заработало. Возникла идея запустить zabbix-agent на гипервизоре.
Сегодня будем делать первую подготовительную часть, сделаем VIB пакет для отдельного правила Firewall для Zabbix Agent.
ESXi 7.0 Firewall — добавляем своё правило
В гипервизоре ESXi имеется встроенный Firewall. В нём предустановлен ряд правил, удовлетворяющих разработанному функционалу. Однако, имеющиеся правила не всегда покрывают все необходимые порты, иногда требуется дополнительный функционал.
Создание собственных правил
Процесс создания собственных правил описан здесь:
https://kb.vmware.com/s/article/2008226
Начиная с ESXi 7.0 создавать собственные наборы правил Firewall запретили. При этом предложили обходной способ:
- Скопировать файл с правилами на отдельный datastore.
- Добавить свои изменения в скопированный файл.
- В /etc/rc.local.d/local.sh добавить команду на копирование с заменой основного файла.
- Чтобы принудительно сохранить эту команду при перезагрузках хоста, команда должна быть добавлена вручную в /etc/rc.local.d/local.sh файл на сервере ESXi.
Это настолько кривое решение, что даже пробовать его не хочется. Тем более нужно отдельное хранилище.
Альтернатива — создание собственного VIB пакета для внесения изменений в Firewall.
VIB пакет для ESXi 7.0 firewall
Создадим собственный VIB пакет для дополнительных правил Firewall. Для сборки нам понадобится пакет:
ESXi Community Packaging Tools 2.4
Добавлять будем два новых правила:
- Входящее на TCP 10050
- Исходящее на TCP 10051
Создаём TGZ файл
Создаём структуру каталогов, она очень простая, потому как нам нужно добавить всего один файл. У меня это будет /etc/vmware/firewall/fw-zabbix-agent.xml.
Редактируем:
<!-- Firewall configuration information for fw Zabbix Agent -->
<ConfigRoot>
<service id='0000'>
<id>Zabbix Agent in</id>
<rule id='0000'>
<direction>inbound</direction>
<protocol>tcp</protocol>
<porttype>dst</porttype>
<port>10050</port>
</rule>
<enabled>false</enabled>
<required>false</required>
</service>
<service id='0001'>
<id>Zabbix Agent out</id>
<rule id='0000'>
<direction>outbound</direction>
<protocol>tcp</protocol>
<porttype>dst</porttype>
<port>10051</port>
</rule>
<enabled>false</enabled>
<required>false</required>
</service>
</ConfigRoot>
Структуру XML можно посмотреть в ESXi. Идентификаторы сервисов должны быть уникальными.
Засовываем проект в Linux, это необходимо для правильной настройки прав доступа к файлам. Я воспользуюсь WSL2 для Windows, только мне придётся скопировать проект в home, т.к. по умолчанию права на все файлы примонтированного диска C:\ — 777. Назначаем созданному XML файлу права 444:
chmod 444 ./fw-zabbix-agent.xml
Переходим в корневую папку проекта и собираем TGZ архив:
tar cvzf ../fw-zabbix-agent.tgz *
TGZ файл получен. Дальше с ним буду работать из Windows.
Создаём VIB файл с помощью tgz2vib5.cmd
Переходим к ESXi Community Packaging Tools 2.4.
Чтобы создать файл VIB из нашего файла TGZ, запускаем tgz2vib5.cmd.
Скармливаем утилите наш TGZ файл, указываем рабочую директорию. Заполняем все поля, не забываем указать версию, VIB type — bootbank. Очень удобно, что имеется готовый пресет для firewall, который за нас проставит нужные галки. Acceptance Level для правила firewall достаточно указать "community". Run!
VIB пакет собрался.
Создаём ZIP файл Offline Bundle с помощью tgz2vib5.cmd
В принципе, достаточно и VIB файла. Но я собираюсь с вами поделиться готовым пакетом, поэтому соберу Offline Bundle.
Чтобы создать Offline Bundle из нашего файла VIB, запускаем vib2zip.cmd:
Указываем директорий с файлом VIB, закидываем в неё наш VIB пакет. Указываем рабочую директорию. Заполняем поля, устанавливаем максимальный уровень совместимости. Run!
Offline Bundle собрался.
Установка Offline Bundle
Для тестирования перевожу хост в Maintenance Mode.
Копируем ZIP пакет на хост в папку /tmp.
Запускаем службу SSH на хосте, коннектимся. Проверяем содержимое папки tmp.
ZIP файл присутствует. Разрешаем установку программ и драйверов со сторонними сертификатами. Для этого перед установкой выполняем команду:
esxcli software acceptance set --level=CommunitySupported
Устанавливаем пакет:
esxcli software vib install -d /tmp/fw-zabbix-agent-1.0-0-offline_bundle.zip
Пакет установлен. В списке установленных VIB пакетов имеется наш новый пакет.
esxcli software vib list | grep zabbix
Наш XML файл появился в папке /etc/vmware/firewall.
Теперь правило firewall никуда не должно пропасть после перезагрузки хоста. Проверяю — перезагружаю хост.
Configure → System → Firewall → Edit. У нас появились два новых правила:
- Zabbix Agent in
- Zabbix Agent out
Включаем их галками. OK.
Входящее на TCP 10050:
Исходящее на TCP 10051:
Мы добились того, чего хотели.
А зачем оно?
Собственно, пакет я назвал fw-zabbix-agent. Скачать его можно в Сборке для VMware. Пакет добавляет два правила firewall, которые нужны для работы Zabbix Agent.
Пакет для агента я ещё не делал, но планирую.