Ansible установка KESL — Kaspersky Endpoint Security на CentOS 7

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.