Вкратце:
- cfauth — настраивает сервис SSH, админскую учётную запись,
sudo, пароль суперпользователя- cfsystem — настройка: APT, временной зоны, отправки системных писем, синхронизация времени, расширенный список стандартных пакетов
- Все модули интегрированы с модулем сетевого фильтра cfnetwork и не требуют дополнительных настроек
Тематический цикл:
- Часть I: сеть и сетевой фильтр (cfnetwork + cffirehol)
- Часть II: доступ и стандартное окружение (cfauth + cfsystem)
Данная пара модулей служит для автоматизации стандартных действий, которые требуется осуществить практически на любой развёрнутой системе.
Модуль 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
- параметр
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_servicessshd_config_template = 'cfauth/sshd_config.epp'— возможность переопределить стандартный шаблон генерации конфигурационного файла OpenSSH
Модуль cfsystem
Данный модуль ориентирован не только на обособленные системы, но и на возможность предоставлять стандартные сервисы внутри ДМЗ в целях ограничения допустимых исходящих соединений и поддержания этических сетевых норм — не ломиться бригадой из десятков систем на внешние сервисы.
цели
- Установка
hostnameв соответствии сcertname— для профилактики - Установить настройки APT для конкретного релиза Debian или Ubuntu
- При необходимости, настроить кэширующий прокси-сервер
- Целесообразно только при развёртывании более одной система в одном месте
- Используется apt-cacher-ng
- Может использоваться как простой HTTP/HTTPS прокси для скачивания иных обновлений в инфраструктуру без необходимости разрешать исходящие соединения во внешний мир. По понятным причинам HTTPS не кэшируется.
- При необходимости, настроить кэширующий прокси-сервер
- Устанавливает часовой пояс.
Рекомендация: на вкус и цвет, но UTC по умолчанию решает множество проблем — говорю и как админ, и как разработчик. - Устанавливает постоянную синхронизацию времени
- При необходимости, позволить другим машинам использовать данную систему как эталон времени
- Установить настройки
SMTP
- При необходимости, указать smarthost с логином и паролем
- При необходимости, разрешить другим локальным машинам централизовано пересылать свои системные сообщения
Примечание: это удобно с точки зрения сетевой безопасности, хранения доступа к smarthost или правильных настроек DNS и т.п.
- Установить все необходимые правила сетевого фильтра через
cfnetworkAPI - Установить множество разнообразные подручных средств админа, которые не входят в стандартный список утилит, в т.ч.: etckeeper, curl, htop, tree, ethtool, iftop, netcat, netstat-nat, conntrack, telnet, screen, apticron, chkrootkit, rkhunter, debsums и т.д. (не полон и будеть расширяться, возможно добавиться конфигурационная опция)
- Установить и извлекать специальные факты
cf_locationиcf_location_pool, которые удобно использовать в конфигурации Hiera. - Настройка стандартных параметров системы
- Принудительная установка noop планировщика ввода-вывода для SSD и виртуальных дисков (на гостевых системах)
- Возможность добавить произвольные команды в /etc/rc.local
класс cfsystem
Все вложенные классы, добавляются автоматически.
allow_nfs = false— если не разрешено, то выпиливает установленные по умолчанию RPC & NFSadmin_email = undef— адрес электронный почты для системных уведомленийrepo_proxy = undef— установка HTTP/HTTPS прокси-сервера для скачивания системных пакетов
host— IP или имяport— TCP порт
add_repo_cacher = false— установить прокси-сервер, принимающий клиентов на$service_faceservice_face = 'any'— интерфейсcfnetwork::iface, на котором слушать клиентов, если включены сервисыntp_servers = [ 'pool.ntp.org' ]— список NTP серверов для синхронизацииadd_ntp_server = false— установить NTP-сервер, принимающий клиентов на$service_facetimezone = 'Etc/UTC'— временная зонаapt_purge— передаётся вapt::purge, удаляет все неуправляемые настройки репозиториев и преференций пакетовapt_update— передаётся вapt::update. По умолчанию, ежедневно с таймаутом в 300 секунд.real_hdd_scheduler = 'deadline'— планировщик ввода-вывода реальных жёстких дисков по умолчанию. Для SSD и виртуалок всегда noop.rc_local = undef— дополнительный список команд для /etc/rc.local
класс 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 для SMTPsmarthost_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/'— Базовый адрес для Debian Security APTrelease= 'jessie' — название релиза
класс cfsystem::ubuntu
Специфично для Ubuntu:
apt_url = 'mirror://mirrors.ubuntu.com/mirrors.txt'— Базовый адрес для APTrelease = 'wily'— название релиза
Живой пример
Полноценное развёртывание инфраструктуры в Vagrant можно посмотреть здесь.
настройки 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'UPD 2016-02-18:
- Добавлено описание авто-конфигурации планировщика ввода-вывода для дисков
- Поддержка произвольных команд в /etc/rc.local