Admin Future
241 subscribers
51 photos
1 video
4 files
120 links
Превращаем эникейщиков в System Architects.
🚀 Твой навигатор в мире IT-инфраструктуры:

▪️ Hard Skills: Linux, Windows, Network, Security
▪️ Tools: Лучший софт и скрытые фишки
▪️ Mindset: Как думать, чтобы платили много


Админ - @maksimshap
Download Telegram
Ansible для Всех: Автоматизация Харденинга Linux-серверов без Написания Ролей с Нуля

😫 Проблема: Ручной Харденинг
Представим: у вас 50+ Linux-серверов, и служба безопасности требует привести их в соответствие со стандартом CIS Benchmarks. Делать это вручную по SSH — прямой путь к ошибкам, несоответствиям и бессонным ночам. А главное, через месяц конфигурации серверов неизбежно "разъедутся" (configuration drift).

💡 Решение: Сила Ansible Galaxy и Готовых Ролей
Ansible — это не только написание плейбуков с нуля. Его экосистема включает Ansible Galaxy — огромный репозиторий готовых ролей. Для нашей задачи идеально подходит коллекция devsec.hardening, реализующая лучшие практики безопасности.

1️⃣ Шаг 1: Подготовка Окружения
Установите Ansible на вашу управляющую машину.

Установите коллекцию devsec.hardening одной командой:

Bash

ansible-galaxy collection install devsec.hardening

Создайте inventory.ini файл с вашими серверами:

Ini, TOML

[webservers]
web01.example.com
web02.example.com
[dbservers]
db01.example.com

2️⃣ Шаг 2: Создание Плейбука с Готовой Ролью
Вам не нужно знать, как именно работает каждый параметр безопасности. Вам нужно лишь декларативно описать исключения для вашей среды. Например, роль os_hardening по умолчанию отключает IP-форвардинг, который нужен для Docker. Мы можем это легко переопределить.

Код плейбука (playbook.yml):

YAML

- name: Harden all Linux servers
hosts: all
become: yes
roles:
- role: devsec.hardening.os_hardening
vars:
# Пример: разрешаем Docker'у работать
sysctl_overwrite:
net.ipv4.ip_forward: 1
# Пример: оставляем файловую систему vfat для UEFI
os_filesystem_whitelist:
- vfat

- name: Harden SSH configuration
hosts: all
become: yes
roles:
- role: devsec.hardening.ssh_hardening
vars:
# Пример: разрешаем вход по паролю (не для прода!)
sshd_password_authentication: "yes"

3️⃣ Шаг 3: Запуск и Проверка
Сначала выполняем "пробный запуск", который покажет изменения, но ничего не применит:

Bash

ansible-playbook -i inventory.ini playbook.yml --check

Убедившись, что всё корректно, запускаем в рабочем режиме:

Bash

ansible-playbook -i inventory.ini playbook.yml

Ключевое свойство Ansible — идемпотентность. Повторный запуск плейбука не вызовет ошибок. Ansible просто проверит, что все настройки в порядке, и исправит только то, что отклонилось от стандарта. Это позволяет использовать плейбук для регулярной борьбы с "дрейфом конфигурации".

🚀 Заключение: От Администратора к Инженеру по Автоматизации
С помощью нескольких десятков строк YAML-кода мы применили сотни настроек безопасности к целой группе серверов. Это и есть переход к Infrastructure as Code (IaC). Вы не просто администрируете серверы — вы управляете их состоянием через код.

#IaC #Ansible #Linux #Hardening #DevSecOps #Automation
Запускаем Ansible в один клик: Визуализация автоматизации с помощью AWX/Semaphore

Многие из нас используют Ansible, запуская плейбуки из командной строки. Это отлично работает для личных задач. Но как только мы начинаем работать в команде, возникают вопросы:

Как безопасно хранить ключи и пароли?

Как дать junior-админу кнопку для запуска рутинной задачи, не давая SSH-доступ к серверам?

Как видеть историю всех запусков и кто что изменил?

Ответ — веб-интерфейс для Ansible.

▪️ Что это такое?
AWX (open-source версия Ansible Tower) и его легковесный аналог Semaphore — это веб-панели, которые превращают ваши плейбуки в полноценный сервис автоматизации.

▪️ Что вы получаете:

Централизованное управление: Все ваши плейбуки, инвентари и проекты в одном месте.

Безопасное хранение credentials: SSH-ключи, токены облаков и пароли хранятся в зашифрованном виде.

RBAC (Role-Based Access Control): Вы можете создать учетные записи для коллег и дать им права только на запуск конкретных плейбуков (например, «Перезагрузить тестовый веб-сервер»).

Аудит и логирование: Каждый запуск плейбука логируется. Вы всегда знаете, кто, что и когда запускал.

Планировщик заданий (Scheduler): Встроенный аналог cron для запуска плейбуков по расписанию.

API: Управляйте автоматизацией из других систем, встраивая ее в CI/CD пайплайны.

🧠 Взгляд архитектора:
Переход на AWX/Semaphore — это не просто удобство. Это смена парадигмы. Вы перестаете быть «человеком, который запускает скрипты» и становитесь инженером, который строит платформу автоматизации для всей команды. Вы начинаете управлять не серверами, а процессами.

▪️ Как начать?
Самый простой способ — развернуть Semaphore или AWX через docker-compose. Подключите свой Git-репозиторий с плейбуками, настройте доступы, и ваша командная работа выйдет на новый уровень.

Это и есть один из ключевых шагов от админа к архитектору — создание масштабируемых и безопасных систем управления.

#Ansible #AWX #Semaphore #DevOps #Automation #IaC #Архитектура
«Дрейф конфигурации»: Тихий убийца вашей инфраструктуры

Вечер понедельника — идеальное время, чтобы поговорить о невидимом враге, с которым сталкивается каждый админ, — дрейфе конфигурации (configuration drift).

Что это такое?
Это постепенное и незаметное расхождение реального состояния сервера от его эталонной, задокументированной конфигурации.

Как это происходит?

«Срочный фикс»: Вы вручную правите конфиг на prod-server-01 в 2 часа ночи, чтобы поднять упавший сервис. Вы обещаете себе задокументировать это утром, но... утром появляются новые задачи.

Ручные обновления: Один сервер обновили через apt upgrade, а про второй забыли.

Неконсистентные деплои: Разработчики попросили «быстренько поставить вот эту библиотеку» на одном из веб-серверов.

Через полгода ваши серверы, которые должны быть идентичными близнецами, превращаются в уникальные, капризные «снежинки».

Почему это так опасно?

Непредсказуемые сбои: Новый релиз приложения идеально встает на server-01, но падает на server-02, потому что там другая версия glibc. Вы тратите часы на поиск проблемы.

Дыры в безопасности: На одном сервере вы закрыли уязвимый порт, а на другом — нет.

Невозможность масштабирования: Вы не можете быть уверены, что новый, автоматически развернутый сервер будет вести себя так же, как старые.

«Эффект домино»: Сбой на одной «снежинке» может вызвать каскадный отказ всей системы.

Лекарство: Infrastructure as Code (IaC)
Единственный надежный способ борьбы с дрейфом — это декларативный подход. Инструменты вроде Ansible, PowerShell DSC или Terraform позволяют описать желаемое состояние в коде.

Вы не «чините» сервер. Вы запускаете плейбук, который гарантированно приводит ВСЕ серверы к единому, эталонному состоянию. Любое ручное изменение будет автоматически исправлено при следующем запуске. Ваша инфраструктура становится предсказуемой, безопасной и документированной самим кодом.

Перестаньте бороться с симптомами. Начните лечить причину.

#IaC #Ansible #DevOps #Архитектура #ConfigurationManagement
Vault: Перестаньте хранить пароли в Ansible-плейбуках

Мы уже говорили про IaC и автоматизацию с помощью Ansible. Но где вы храните пароли от баз данных, API-токены и SSH-ключи, которые используют ваши плейбуки? Если ответ «в ansible-vault» или, что хуже, в зашифрованных файлах в Git, — есть способ лучше.

Знакомьтесь с HashiCorp Vault — это «швейцарский сейф» для всей вашей инфраструктуры.

▪️ Проблема, которую решает Vault:
Секреты (пароли, токены, ключи) разбросаны повсюду: в конфиг-файлах, переменных окружения, скриптах. Ими сложно управлять, ротировать (менять) и аудировать, кто и когда к ним получал доступ.

▪️ Как Vault меняет игру?
Vault — это централизованный сервис, который:

Надежно хранит секреты: Все данные шифруются как при передаче, так и при хранении.

Выдает секреты «на лету»: Vault может генерировать временные, короткоживущие учетные данные для баз данных (PostgreSQL, MySQL) или облаков (AWS). Ваше приложение получает доступ к базе не с постоянным паролем, а с временным, который действует, например, 5 минут. Даже если его украдут, он быстро станет бесполезным.

Предоставляет API: Приложения и скрипты (включая Ansible) аутентифицируются в Vault и запрашивают нужные им секреты через API. Паролей в плейбуках больше нет.

Ведет подробный аудит: Каждый запрос к любому секрету записывается в журнал. Вы всегда знаете, кто, что и когда запрашивал.

🧠 Взгляд архитектора:
Внедрение Vault — это переход от статичного управления секретами (пароль, который лежит в файле годами) к динамическому. Вы больше не защищаете сами пароли, вы защищаете доступ к Vault. Это фундаментальный сдвиг в сторону модели Zero Trust, где ни один компонент системы не доверяет другому по умолчанию.

Изучение Vault — это следующий логический шаг после освоения Ansible или Terraform, который выводит ваши навыки безопасности и автоматизации на новый уровень.

#Vault #Security #DevSecOps #IaC #Ansible #Архитектура
Стратегия/DevOps
idempotency Автоматизация: Почему "сделать" и "обеспечить" — это разные вещи. Принцип идемпотентности

Вы пишете скрипт для настройки сервера. Что он должен делать? "Установить Nginx". А что, если Nginx уже установлен? Скрипт упадет с ошибкой? Проигнорирует? Переустановит, сломав конфиги?
Здесь кроется фундаментальный принцип надёжной автоматизации — идемпотентность.
Идемпотентность — это свойство операции, при котором повторное её выполнение даёт тот же результат, что и первое.

НЕ идемпотентно:

Bash
# Добавляет строку в конфиг при каждом запуске
echo "ENABLED=true" >> /etc/myapp.conf

Идемпотентно:

Bash
# Проверяет наличие строки и добавляет ее, только если нужно
grep -qxF 'ENABLED=true' /etc/myapp.conf || echo "ENABLED=true" >> /etc/myapp.conf

Инструменты вроде Ansible, Terraform, PowerShell DSC построены на этом принципе.
ansible.builtin.lineinfile не просто добавляет строку, он обеспечивает её наличие.
ansible.builtin.package не просто устанавливает пакет, он обеспечивает, что пакет установлен.

Взгляд архитектора:
Архитектор строит предсказуемые и отказоустойчивые системы. Идемпотентная автоматизация — ключ к этому. Она позволяет вам запускать одни и те же скрипты/плейбуки снова и снова для:
Первоначальной настройки.
Приведения конфигурации в норму, если её изменили вручную (drift correction).
Восстановления после сбоев.
Перестаньте писать скрипты, которые "делают". Начните писать те, которые "обеспечивают состояние".

#devops #automation #iac #architect #ansible #стратегия
Ansible: Хватит хранить пароли в Git! Используем ansible-vault

Вы написали гениальный плейбук, но в group_vars/all.yml у вас лежит db_password: "MySuperSecretPassword123". Теперь этот плейбук нельзя безопасно положить в Git.

Ansible Vault — это не отдельный инструмент, это встроенный в Ansible механизм шифрования. Он позволяет шифровать не целые плейбуки, а только файлы с чувствительными данными (например, vars/secrets.yml).

Как это работает (магия в 3 команды):

Создаём зашифрованный файл: Вместо nano vars/secrets.yml вы пишете:

Bash
ansible-vault create vars/secrets.yml

Ansible попросит вас придумать пароль (vault password) и откроет редактор. Вы вводите свои секреты, сохраняете, и файл на диске оказывается полностью зашифрован.

Редактируем файл:

Bash
ansible-vault edit vars/secrets.yml

Снова вводите пароль, редактируете, сохраняете. Файл остается зашифрованным.

Запускаем плейбук: Ansible сам поймет, что файл зашифрован, и спросит пароль при запуске.

Bash
# Ansible спросит пароль в консоли
ansible-playbook site.yml

# ...или используем файл с паролем (для CI/CD)
ansible-playbook site.yml --vault-password-file ~/.vault_pass

Взгляд архитектора: Это и есть GitOps в действии. Ваши секреты хранятся вместе с кодом, они версионируются, но остаются в безопасности. Архитектор строит единый источник правды (Single Source of Truth). С ansible-vault ваш Git-репозиторий становится этим источником для всей инфраструктуры, включая пароли и ключи.

#linux #ansible #devops #security #iac #gitops #гайд
Ansible для Windows: Хватит "кликать". Управляем Windows-серверами из Linux

Для многих "Ansible" — это что-то про Linux. Но что, если я скажу, что вы можете управлять всем вашим парком Windows-серверов так же, как и Linux-машинами? Без RDP, без ручных кликов.

Это — Ansible for Windows. Он работает не через SSH, а через WinRM (Windows Remote Management), который уже встроен в вашу систему. Это мост между мирами.

План для "Full-stack админа":

На Windows-машинах (целях): Нужно один раз настроить WinRM. Проще всего — запустить официальный скрипт от Ansible.
https://github.com/ansible/ansible-documentation/blob/devel/examples/scripts/ConfigureRemotingForAnsible.ps1
PowerShell
# Запускаем PowerShell от имени администратора
.\ConfigureRemotingForAnsible.ps1

На Linux-машине (контроллере):
Устанавливаем pywinrm: pip install pywinrm
Настраиваем inventory (список хостов), указывая, что это Windows:
Ini, TOML
[windows]
web-srv01.corp.local

[windows:vars]
ansible_user = "CORP\Administrator"
ansible_password = "YourSecretPassword" # Временно! (Лучше использовать Vault)
ansible_connection = winrm
ansible_winrm_server_cert_validation = ignore # Для тестовой среды

Ваш первый плейбук (установить IIS):
YAML
---
- name: Configure Windows Web Server
hosts: windows
tasks:
- name: Install IIS (Web-Server)
ansible.windows.win_feature:
name: Web-Server
state: present

- name: Start IIS Service
ansible.windows.win_service:
name: W3Svc
state: startedhttps://chatgpt.com/backend-api/estuary/content?id=file_000000005a986246808fbe7208d0cb2f&ts=489227&p=fs&cid=1&sig=e9b5ebaf47d24352dc6bba33f22b0781df239f5f55614f6cd89fd856db308bb6&v=0
start_mode: auto

Запуск: ansible-playbook -i inventory setup_iis.yml

Взгляд архитектора: Это Infrastructure as Code (IaC) в чистом виде. Вы получаете идемпотентность (можно запускать 100 раз) и масштабируемость (на 1 или 1000 серверов). Вы начинаете управлять Windows-парком как DevOps-инженер, а не как "эникейщик".

#windows #linux #ansible #automation #devops #powershell #гайд
🔥2
Архитектура: Принцип Idempotency (Идемпотентность)

Если вы дважды (или сто раз) запустите одну и ту же операцию, результат всегда будет одинаковым.

Простой пример:

Неидемпотентно: команда_создать_пользователя_Вася (выдаст ошибку, если Вася уже есть).

Идемпотентно: команда_убедиться_что_пользователь_Вася_существует (создаст, если нет; ничего не сделает, если есть).

Взгляд архитектора: Это основа Infrastructure as Code (IaC). Ваш Ansible-плейбук или Terraform-конфиг должны быть идемпотентны. Вы не боитесь запустить их 10 раз — они просто убедятся, что система в нужном состоянии, без побочных эффектов.

#architect #devops #iac #ansible #terraform #принципы
👍1
🧠 Skills: IaC drift — молчаливый убийца стабильности и как его ловить автоматически

Коллеги, у вас есть Ansible или Terraform. Вы гордитесь тем что инфраструктура описана как код. Но когда последний раз вы проверяли — соответствует ли то что работает в продакшне тому что написано в репозитории?

Configuration drift — это когда кто-то "быстро поправил руками" в пятницу вечером, написал "потом зафиксирую в коде" и конечно не зафиксировал. Через месяц инфраструктура живёт своей жизнью, а код — своей.

Два подхода в зависимости от инструмента:


# ---- ANSIBLE: детекция дрейфа через --check --diff ----
# Запускаем playbook в режиме проверки без изменений
ansible-playbook site.yml \
-i inventories/production/hosts.yml \
--check \
--diff

# Вывод покажет ВСЕ расхождения между кодом и реальностью
# Строки с "-" = что есть сейчас, "+" = что должно быть по коду

# Автоматизируем: добавляем в cron или CI/CD pipeline
# crontab -e:
# 0 9 * * 1 ansible-playbook /opt/ansible/site.yml -i production --check --diff \
# 2>&1 | mail -s "Weekly drift report" admin@company.com

# ---- TERRAFORM: детекция дрейфа через plan ----
# Показывает расхождения между state и реальным состоянием ресурсов
terraform plan -detailed-exitcode
# Exit code: 0 = нет изменений, 1 = ошибка, 2 = есть изменения (drift!)

# В CI/CD (GitLab CI пример):
# drift_check:
# schedule: "0 8 * * *" # каждый день в 8:00
# script:
# - terraform init
# - terraform plan -detailed-exitcode
# allow_failure: false

# ---- ПРАВИЛО: что делать при обнаруженном дрейфе ----
# Вариант 1: исправить реальность под код (правильно)
# ansible-playbook site.yml -i production # применяем playbook
# terraform apply # применяем план

# Вариант 2: зафиксировать реальность в код (если изменение было намеренным)
# Обновить playbook/tf-файл, commit, PR, code review
# terraform import resource_type.name resource_id # импортируем в state


Зачем это нужно:
Drift detection для Ansible превращает идемпотентность в реальный механизм контроля: если ничего не меняется при запуске — системы соответствуют коду. Terraform использует state file для сравнения желаемого и реального состояния — это его главное преимущество перед Ansible в вопросе дрейфа.

Итог: IaC без регулярной проверки дрейфа — это как бэкап без тестирования восстановления. Выглядит серьёзно, но не работает в нужный момент. Настрой еженедельный отчёт сегодня — это 20 минут работы.

#skills #iac #ansible #terraform #drift #sysadmin #admin_future
🧠 Skills: Cattle vs Pets — принцип которому 15 лет, но половина инфраструктур его игнорирует

Коллеги, вторник — хороший момент для фундаментального разговора. Принцип «скот vs питомцы» (Cattle vs Pets) сформулировали ещё в 2011 году, но я до сих пор регулярно вижу инфраструктуры где каждый сервер — уникальный именованный питомец с историей ручных конфигураций.

Вместо питомцев у нас есть Cattle — стадо: серверы анонимны, взаимозаменяемы. Если узел № 154 ведёт себя нестабильно, его не лечат как любимого котика — его пристреливают как охромевшую лошадь. Удаляют и автоматически поднимают новый, идентичный, здоровый. Именно этот принцип породил Infrastructure as Code.

Как выглядят «питомцы» в реальной жизни:

ПРИЗНАКИ "ПИТОМЦА":
- У сервера есть имя собственное: "Старый-Файловый",
"Сервак-Богдана", "Этот-трогать-нельзя"
- Никто не знает что на нём запущено кроме одного человека
- Последний раз переустанавливали в 2019 году
- Конфиги правились руками, в git не попадали
- Апгрейд невозможен — "упадёт всё"

ПРИЗНАКИ "СКОТА":
- Серверы называются по роли + номер: web-01, db-03
- Любой сервер можно удалить и поднять заново за минуты
- Конфигурация полностью в Ansible/Terraform
- Нет уникальных ручных настроек которые нигде не записаны
- Новый член команды может задеплоить среду с нуля


Практический переход от питомцев к скоту — четыре шага:

# ШАГ 1: Аудит — какие серверы у нас "питомцы"?
# Признак: uptime больше года без переустановки
uptime -s # дата последнего старта
# Если дата 2023 и раньше на продакшн-сервере — питомец

# ШАГ 2: Документируем что реально запущено (chef-solo, ansible-pull)
# На подозрительном сервере:
ss -tlnp # что слушает
systemctl list-units --type=service --state=running
crontab -l; ls /etc/cron.d/ # кроны
find /etc -newer /etc/os-release -type f 2>/dev/null | head -20
# Последнее — файлы изменённые после установки ОС

# ШАГ 3: Описываем текущее состояние как Ansible playbook
# ansible-pull или ручное написание по результатам аудита
# Проверяем идемпотентность:
ansible-playbook site.yml --check --diff

# ШАГ 4: Blue/Green замена
# Поднимаем новый сервер по playbook
# Переключаем трафик (DNS, LB)
# Старый питомец умирает с почестями
# Держим его неделю на всякий случай


Почему это важно именно сейчас:
Copy Fail и Dirty Frag показали — сервера которые нельзя быстро пересоздать это не просто технический долг. Это риск. Если патч ломает питомца — нет возможности быстро откатиться на чистую конфигурацию. Если питомец умирает — нет возможности его воссоздать.

Infrastructure as Code: инфраструктура описывается в коде, воспроизводится автоматически, тестируется и версионируется как любой другой программный продукт.

Итог: посмотри на свой список серверов прямо сейчас. Посчитай сколько из них питомцы. Это твой список технического долга на следующий квартал.

#skills #iac #infrastructure #ansible #terraform #sysadmin #admin_future