Ansible установка KESL — Kaspersky Endpoint Security на CentOS 7
Рассмотрим, каким образом может быть выполнена через Ansible установка KESL — Kaspersky Endpoint Security — на серверы с CentOS 7. Репозиторий на github: https://github.com/ittxx/kaspersky
Материал является продолжением статьи о ручной установке KESL. Далее по тексту буду ссылаться на эту статью с упоминанием «ручной установки KESL».
Окружение:
Сервер №1: OS - Centos 7 x64. IP - 10.10.10.10
Роль: Хранилище.
Описание: Настроен Nginx который отдает файлы по http по порту 8099 с авторизацией
Сервер №2: OS - Centos 7 x64. IP - 10.10.10.20
Роль: Исполнитель.
Описание: Сервер, на котором установлен ansible
Сервер №3: OS - Centos 7 x64. IP - 10.10.10.30
Роль: Целевой.
Описание: на данный сервер необходимо установить kesl
Структура playbook построена по типовой схеме. Кроме того, некоторые переменные хранятся в зашифрованном виде. Как работать с секретами в ansible можно почитать тут.
В предложенной реализации возможны два варианта запуска playbook. Для всех хостов, описанных в файле hosts:
ansible-playbook service_install_kesl_all_servers.yml --vault-password-file=/u01/ansible/secret --diff -vv
Точечно выбирать хосты, на которые необходимо запустить роль. Если необходимо, чтобы установка запустилась на нескольких хостах, указываем их через запятую. Не забываем, что указанные хосты должны соответствовать именам в файле hosts и host_vars:
ansible-playbook service_install_kesl_select_servers.yml -e "host=test01" --vault-password-file=/u01/ansible/secret --diff -vv
Переменные playbook Ansible для установки KESL
На каком уровне определить переменные решать вам, в статье переменные в ansible, можно почитать какие есть уровни и как они приоритизированы.
local_distr_repo_url — переменная, не имеющая отношения к установке Kaspersky. Хранит путь до репозитория с дистрибутивами. В моем случае был развернут nginx с возможностью авторизации по логину паролю. Он умеет отдавать файлы из папки по протоколу http. Как разворачивался такой репозиторий, можно посмотреть перейдя по ссылке.
local_distr_repo_user — логин к локальному репозиторию. Хранится в зашифрованном виде.
local_distr_repo_pass — пароль к локальному репозиторию. Хранится в зашифрованном виде.
kesl_file_name — переменная, указывающая на путь от корня (если пакет лежит не в корне http сервера) и имя rpm пакета для установки. Пакет должен быть загружен в репозиторий, который определен в переменной local_distr_repo_url. Это связано с тем, что на официальном сайте Касперского не удалось найти прямую ссылку на скачивание дистрибутива. Более подробно описано в статье про ручную установку KESL
EULA_AGREED, PRIVACY_POLICY_AGREED, SERVICE_LOCALE, USE_KSN, USE_GUI, INSTALL_LICENSE — необходимы для непосредственного развертывания Kesl. Более подробно описаны в статье про ручное развертывание.
ScanMemoryLimit — указывает порог ОЗУ в Мегабайтах, которым может воспользоваться KESL во время сканирования. Любое значение, которое будет меньше 2048, Kaspersky Endpoint Security проигнорирует, приведя значение к 2048 Мб.
Обработчики
В playbook описан один обработчик, который перезагружает демона kesl:
- name: restart kesl # перезапуск агента администрирования
service:
name: "kesl"
state: restarted
Задачи playbook Ansible для установки KESL
Задачи объединены в блок, который запустится, если параметр metod_kesl имеет значение custom_install. Это задел на будущее, если понадобится добавить какой-то новый метод установки, например через автономный пакет.
- block:
...
when: metod_kesl == "custom_install"
Рассмотрим более подробно список действий. Установка начинается с получения дистрибутива. Используется модуль ansible get_url. Он позволяют скачать файл по URL (скачивается из локального репозитория):
- name: "Getting kesl package to temporary folder"
get_url:
url: "{{ local_distr_repo_url }}/{{ kesl_file_name }}"
dest: /tmp/{{ kesl_file_name }}
url_username: "{{ local_distr_repo_user }}"
url_password: "{{ local_distr_repo_pass }}"
mode: 0755
tags: kesl
Далее создается файл ответов с помощью модуля template. Переменные в шаблон подставляются из group_vars/all:
- name: "Creating answer file for kesl"
become: yes
template:
src: "kesl.j2"
dest: "/tmp/kesl.ini"
mode: 0644
tags: kesl
Следующий шаг — установка пакета, скачанного с помощью модуля get_url:
- name: "Installing package"
become: yes
yum:
name: "/tmp/{{ kesl_file_name }}"
state: present
tags: kesl
После того, как kesl установился, можно переходить к конфигурированию посредством файла ответов, созданного в модуле tamplate. Для этого запускаем shell модуль и передаем ему perl скрипт с указанием ключа autoinstall:
- name: "Kesl postinstall config"
shell: "{{ default_kesl_bin_path }}/kesl-setup.pl --autoinstall=/tmp/kesl.ini"
register: postconfig_result
notify: restart kesl
Добавляем антивирус в автозагрузку и запускаем demon kesl:
- name: "Ensure kesl service is enabled"
become: yes
service:
name: kesl
enabled: yes
state: started
tags: kesl
Выводим общую информацию об антивирусе, какие модули запущены, работает ли под политикой, статус ключа:
- name: "Kesl check status"
shell: "{{ default_kesl_bin_path }}/kesl-control -S --app-info"
register: Kesl_status
notify: restart kesl
И последним шагом удаляем временные файлы:
- name: "Removing temporary files"
file:
path: "{{ item }}"
state: absent
with_items:
- "/tmp/{{ kesl_file_name }}"
- "/tmp/kesl.ini"
Сегодня рассказал, каким образом через Ansible производится установка KESL.