Варіант розгортання Linux систем на базі Puppet 4. Частина II: доступ та стандартне оточення (cfauth + cfsystem)

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

Тематичний цикл:
Дана пара модулів служить для автоматизації стандартних дій, які потрібно здійснити практично на будь розгорнутій системі.

Модуль
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_services
  • sshd_config_template = 'cfauth/sshd_config.epp'
    — можливість замінити стандартний шаблон генерації конфігураційного файлу OpenSSH
Модуль
cfsystem

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

цілі
  • Установка
    hostname
    у відповідності з
    certname
    для профілактики
  • Встановити установки APT для конкретного релізу Debian або Ubuntu
    • При необхідності, налаштувати кешуючий проксі-сервер
      • Доцільно тільки при розгортанні більше однієї система в одному місці
      • Використовується apt-cacher-ng
      • Може використовуватися як простий 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/'` — Базовий адреса для Debian Security APT
  • release
    = 'jessie'
    — назва релізу
клас
cfsystem::ubuntu

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

  • apt_url = 'mirror://mirrors.ubuntu.com/mirrors.txt'
    — Базовий адреса для APT
  • release = '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'


Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.