- PVSM.RU - https://www.pvsm.ru -

Вариант развёртывания Linux систем на базе Puppet 4. Часть II: доступ и стандартное окружение (cfauth + cfsystem)

Вкратце:

  1. cfauth [1] — настраивает сервис SSH, админскую учётную запись, sudo, пароль суперпользователя
  2. cfsystem [2] — настройка: APT, временной зоны, отправки системных писем, синхронизация времени, расширенный список стандартных пакетов
  3. Все модули интегрированы с модулем сетевого фильтра cfnetwork [3] и не требуют дополнительных настроек

Тематический цикл:

Данная пара модулей служит для автоматизации стандартных действий, которые требуется осуществить практически на любой развёрнутой системе.

Модуль cfauth

цели

  • Вычистить OpenSSH конфиг и оставить только самое необходимое
    • Доступ только по публичному ключу
    • Отключение получения DNS хостов клиента — и запально, и дополнительные тормоза (не всегда)
    • Отключение баннеров OpenSSH и Debian
    • Включение агрессивного SSH KeepAlive
  • Разрешить доступ по SSH только для пользователей специальной группы ssh_access
  • Установка пароля суперпользователя в зашифрованном виде
  • Создание отдельного пользователя для доступа по SSH
    • Разрешение sudo команд
    • По умолчанию без пароля (упрощает администрирование большого количества систем):
      • /opt/puppetlabs/puppet/bin/puppet agent --test
      • /usr/bin/apt-get update
      • /usr/bin/apt-get dist-upgrade
    • Допустимо отключение пароля sudo для всех команд — удобно и относительно безопасно для большого количества машин в ДМЗ

конфигурация

  • cfauth::admin_auth_keys — обязательный список публичных SSH ключей в формате ssh_authorized_key [5]
    • параметр user уже задан
    • type = 'ssh-rsa' — по умолчанию
  • admin_user = 'adminaccess' — имя учётной записи для администратора. Желательно поменять и не использовать стандартное.
  • admin_password = undef — если указан, то устанавливает захешированный пароль для пользователей root и $admin_user
    Рекомендуется использовать mkpasswd -m sha-512 для генерации пароля
  • admin_hosts = undef — передаётся как src для сетевого фильтра cfnetwork::service_port. Настоятельно рекомендуется.
  • sudo_no_password_all = false — если true, то разрешает пользователю $admin_user запускать все команды через sudo без пароля
  • sudo_no_password_commands = undef — дополнительный список sudo команд, которые $admin_user может выполнить без пароля. Для случаев, когда нецелесообразно разрешать все команды.
  • sshd_ports = 22 — список SSH портов по умолчанию. Автоматически создаёт сервис cfssh через cfnetwork::describe_services
  • sshd_config_template = 'cfauth/sshd_config.epp' — возможность переопределить стандартный шаблон генерации конфигурационного файла OpenSSH

Модуль cfsystem

Данный модуль ориентирован не только на обособленные системы, но и на возможность предоставлять стандартные сервисы внутри ДМЗ в целях ограничения допустимых исходящих соединений и поддержания этических сетевых норм — не ломиться бригадой из десятков систем на внешние сервисы.

цели

  • Установка hostname в соответствии с certname — для профилактики
  • Установить настройки APT для конкретного релиза Debian или Ubuntu
    • При необходимости, настроить кэширующий прокси-сервер
      • Целесообразно только при развёртывании более одной система в одном месте
      • Используется apt-cacher-ng [6]
      • Может использоваться как простой HTTP/HTTPS прокси для скачивания иных обновлений в инфраструктуру без необходимости разрешать исходящие соединения во внешний мир. По понятным причинам HTTPS не кэшируется.
  • Устанавливает часовой пояс.
    Рекомендация: на вкус и цвет, но UTC по умолчанию решает множество проблем — говорю и как админ, и как разработчик.
  • Устанавливает постоянную синхронизацию времени
    • При необходимости, позволить другим машинам использовать данную систему как эталон времени
  • Установить настройки SMTP
    • При необходимости, указать smarthost с логином и паролем
    • При необходимости, разрешить другим локальным машинам централизовано пересылать свои системные сообщения
      Примечание: это удобно с точки зрения сетевой безопасности, хранения доступа к smarthost или правильных настроек DNS и т.п.
  • Установить все необходимые правила сетевого фильтра через cfnetwork API
  • Установить множество разнообразные подручных средств админа, которые не входят в стандартный список утилит, в т.ч.: etckeeper, curl, htop, tree, ethtool, iftop, netcat, netstat-nat, conntrack, telnet, screen, apticron, chkrootkit, rkhunter, debsums и т.д. (не полон и будеть расширяться, возможно добавиться конфигурационная опция)
  • Установить и извлекать специальные факты cf_location и cf_location_pool, которые удобно использовать в конфигурации Hiera.
  • Настройка стандартных параметров системы

класс cfsystem

Все вложенные классы, добавляются автоматически.

  • allow_nfs = false — если не разрешено, то выпиливает установленные по умолчанию RPC & NFS
  • admin_email = undef — адрес электронный почты для системных уведомлений
  • repo_proxy = undef — установка HTTP/HTTPS прокси-сервера для скачивания системных пакетов
    • host — IP или имя
    • port — TCP порт
  • add_repo_cacher = false — установить прокси-сервер, принимающий клиентов на $service_face
  • service_face = 'any' — интерфейс cfnetwork::iface, на котором слушать клиентов, если включены сервисы
  • ntp_servers = [ 'pool.ntp.org' ] — список NTP серверов для синхронизации
  • add_ntp_server = false — установить NTP-сервер, принимающий клиентов на $service_face
  • timezone = 'Etc/UTC' — временная зона
  • apt_purge — передаётся в apt::purge, удаляет все неуправляемые настройки репозиториев и преференций пакетов
  • apt_update — передаётся в apt::update. По умолчанию, ежедневно с таймаутом в 300 секунд.

класс cfsystem::hierapool

Установка и поддержка фактов, которые удобно использовать для настройке иерархии в hiera.yaml.

  • cf_location — по сути ассоциативное название физического центра данных. На этой основе удобно выставлять адреса репозитория пакетов APT и т.п..
  • cf_location_pool — конкретная группа серверов, подразумевает под собой отдельную ДМЗ группу в конкретном месте расположения.

Пример:

---
:backends:
    - yaml
:hierarchy:
    - "%{::trusted.domain}/%{::trusted.hostname}"
    - "%{::trusted.domain}"
    - "%{::cf_location}/%{::cf_location_pool}"
    - "%{::cf_location}"
    - common
:merge_behavior: deeper
:yaml:
    :datadir:

Параметры:

  • location = undef — сохраняет в /etc/cflocation, если задан
  • pool = undef — сохраняет в /etc/cflocationpool, если задан

класс cfsystem::email

Настройка отправки системных уведомлений.

  • smarthost = undef — устанавливает smarthost для SMTP
  • smarthost_login = undef — логин для smarthost при необходимости
  • smarthost_password = undef — пароль для smarthost при необходимости
  • relay_nets = <private subnets> — список сетей, которым разрешено пересылать письма через эту систему (само по себе не включает)
  • listen_ifaces = undef — список названий cfnetwork::iface интерфейсов, на которых слушать клиентов для пересылки писем
  • disable_ipv6 = true — отключение IPv6 — идёт прямиком в конфиг Exim4.
    Примечание: использование IPv6 для SMTP пока плохая идея.

класс cfsystem::sysctl

  • vm_swappiness = 1 — 0-100 (%), уменьшает использование swap до минимума по умолчанию.

Данный функционал ещё не полный и скорее всего будет расширяться.

класс cfsystem::debian

Специфично для Debian:

  • apt_url = 'http://httpredir.debian.org/debian' — Базовый адрес для APT
    Внимание: были замечены проблемы с apt-cacher-ng — лучше указать фиксированный, если используется для инфраструктуры
  • `security_apt_url = 'http://security.debian.org/ [7]'`` — Базовый адрес для Debian Security APT
  • release = 'jessie' — название релиза

класс cfsystem::ubuntu

Специфично для Ubuntu:

  • apt_url = 'mirror://mirrors.ubuntu.com/mirrors.txt' — Базовый адрес для APT
  • release = 'wily' — название релиза

Живой пример

Полноценное развёртывание инфраструктуры в Vagrant можно посмотреть здесь [8].

настройки Hiera

---
classes:
  - cfsystem

# При необходимости устанавливает настройки для фактов `cf_location` и `cf_location_pool` на последующих вызовах
# Обычно, эти факты устанавливаются при инициализации системы
cfsystem::hierapool::location: 'somelocation'
cfsystem::hierapool::pool: 'somepool'

cfauth::admin_user: vagrant
# mkpasswd -m sha-512: 'vagrant'
cfauth::admin_password: '$6$W32Psa5h$l7iIrVFdG.6SRta86n1GlDcMBapDP3fpzLD4F2Vkz2xTfd2GFg34h5CEBH3JifiVRszumAteGDLXZEbp2bx3Z0'
cfauth::sudo_no_password_all: true
cfauth::admin_auth_keys:
  data_test:
    key: 'AAAAB3NzaC1yc2EAAAADAQABAAAAgQDiruOsKA2xTeITRnmLlWph1xNdyoX7cufWU48737E8KQSltRZEeyyLKKPR0L+XTwrvpIhwymikP+7K77KMF8yEg9f98FaYtxGdEvPqGVO7Dezdg3eQmQzYce0/wlgLXn0GJa2TcrG7lvSnHkCjbOV5lRWP5vY92skYQHhuwtMgtQ=='
    options:
      - 'from="10.0.0.0/8,192.168.0.0/16,172.16.0.0/12"'
# Здесь должен быть хорошо выверенный список разрешённых IP
cfauth::admin_hosts:
    - '10.0.0.0/8'
    - '192.168.0.0/16'
    - '172.16.0.0/12'

# Использовать APT кэш, NTP и SMTP Smarthost на инфраструктурном сервере
cfsystem::repo_proxy:
    host: maint.example.com
    port: 3142
cfsystem::ntp_servers: 'maint.example.com'
cfsystem::email::smarthost: 'maint.example.com'

# Такие настройки должны быть на самом 'maint.example.com'
#===================================================
cfsystem::add_repo_cacher: true
cfsystem::add_ntp_server: true

cfsystem::ntp_servers:
    - 0.debian.pool.ntp.org
    - 1.debian.pool.ntp.org
    - 2.debian.pool.ntp.org
    - 3.debian.pool.ntp.org

cfsystem::email::smarthost:
cfsystem::email::listen_ifaces: 'main'

Автор: andvgal

Источник [9]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/ssh/112504

Ссылки в тексте:

[1] cfauth: https://forge.puppetlabs.com/codingfuture/cfauth

[2] cfsystem: https://forge.puppetlabs.com/codingfuture/cfsystem

[3] cfnetwork: https://forge.puppetlabs.com/codingfuture/cfnetwork

[4] Часть I: сеть и сетевой фильтр (cfnetwork + cffirehol): https://habrahabr.ru/post/277085/

[5] ssh_authorized_key: https://docs.puppetlabs.com/puppet/latest/reference/type.html#sshauthorizedkey

[6] apt-cacher-ng: https://www.unix-ag.uni-kl.de/~bloch/acng/

[7] http://security.debian.org/: http://security.debian.org/

[8] здесь: https://github.com/codingfuture/puppet-test

[9] Источник: https://habrahabr.ru/post/277309/