vault backup: 2026-05-14 10:49:10

This commit is contained in:
Dmitry
2026-05-14 10:49:10 +03:00
parent 4bbc91d147
commit 7f34f1d9f5
217 changed files with 62 additions and 62 deletions
@@ -0,0 +1,46 @@
---
status: stable
type: concept
tags:
- devops
- ansible
created: 2026-02-13
updated: 2026-05-07
title: Ansible - Основы
---
# Ansible - Основы
**Ansible** - инструмент автоматизации развертывания и оркестрации инфраструктуры.
**Характеристики**
- **Безагентский**: не требует установки ПО на управляемых хостах (использует SSH).
- Язык описания задач — YAML: декларативный и простой в чтении (формат playbook).
- **Idempotency**: повторное выполнение не меняет результат, если всё уже настроено.
## Основные Понятия
|Term|Def|
|---|---|
|Playbook|Декларативное описание инфраструктуры, с которой работает в декларативном ключе|
|Inventory|Файл инвентаризации, призван отслеживать хосты, к которым мы <br>применяем свои команды и сценарии|
|Include|Конструкция, позволяющая переиспользовать уже написанные структуры кода (tasks, playbooks, handlers, vars)|
|Task|Единица работы, которая описывается в плейбуке и выполняется <br>во время запуска на исполнение|
|Handlers|Обработчики, которые позволяют выполнить некоторую описанную <br>задачу после выполнения другой задачи (вызов через _**notify**_)|
|Tags|Механизм тегирования (присвоения меток) задачам (Tasks) и ролям <br>(Roles), позволяющий запускать в плейбуке только те задачи и роли, которые <br>помечены определенной меткой (тегом)|
|Vars|Переменные могут быть заданы во время сбора фактов при запуске плейбука <br>или указаны вручную.|
|Role|Сборник плейбуков|
|Module|Минимальная единица действия - набор действий, встроенных в Ansible|
|Facts|Автоматически собираемая с машин информация|
## В этом разделе
- [[Playbooks - Ansible]] — структура плейбуков, синтаксис задач
- [[Inventory - Ansible]] — описание хостов и групп
- [[Modules - Ansible]] — встроенные модули
- [[Loops - Ansuble]] — циклы в задачах
- [[Fail2Ban - Ansible]] — пример роли для Fail2Ban
## Контекст
- [[IaC - основы]] — Ansible в контексте Infrastructure as Code
- [[DevOps - основы]] — место Ansible в DevOps-практиках
@@ -0,0 +1,57 @@
---
status: stable
type: concept
tags:
- devops
- ansible
created: 2025-12-17
updated: 2026-05-07
title: Fail2Ban - Ansible
---
# Fail2Ban - Ansible
**Fail2ban** — это система защиты от brute-force атак (например, перебора паролей по SSH, FTP, веб-панелям). Она анализирует лог-файлы и временно блокирует IP-адреса, с которых замечена подозрительная активность.
## Установка С Помощью Средств Ansible
Образец конфига `jail.local`
```text
[sshd]
enabled = true
port = ssh
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600
findtime = 600
```
```text
- name: Установка и настройка Fail2ban
hosts: all
become: true
tasks:
- name: Установить fail2ban
apt:
name: fail2ban
state: present
- name: Копировать конфиг jail.local
template:
src: jail.local.j2
dest: /etc/fail2ban/jail.local
owner: root
group: root
mode: 0644
- name: Перезапустить fail2ban
service:
name: fail2ban
state: restarted
enabled: true
```
## Связанные заметки
- [[DHCP-snooping]] — defence-in-depth: Fail2Ban блокирует атаки на L7 (SSH brute-force), DHCP Snooping — на L2 (rogue DHCP); разные уровни одной стратегии защиты
- [[Super-user]] — `become: true` в Ansible использует sudo для установки и управления Fail2Ban
@@ -0,0 +1,88 @@
---
status: stable
type: concept
tags:
- devops
- ansible
created: 2025-12-17
updated: 2026-05-07
title: Inventory - Ansible
---
# Inventory - Ansible
Особенности Ansible:
1. Подключение по SSH
2. Agentless - нет программ на клиентах
Структура файла `hosts.ini`
```text-xml
192.168.0.1
192.168.0.2
[web] # группа серверов
192.168.0.3
192.168.0.4
```
Можно использовать псевдонимы, вместо ip
```text
app ansible_host=ip_server1
db ansible_host=ip_server2
web ansible_host=ip_server3
```
Другие полезные параметры **inventory**:
- `ansible_connection: ssh/winrm/local/docker` - тип подключения к серверу
- `ansible_port: 22/5986` - порт подключения
- `ansible_user: root` - логин для входа по ssh (или др.)
- `ansible_ssh_pass: password` или `ansible_password: password` - пароль для входа по ssh.
Группы для объединения групп:
```text
[mail_internal]
mail1.serv
[mail_external]
mail2.serv
[mail_all:children]
mail_internal
mail_external
```
Помимо `ini`-формата, можно использовать YAML-файлы:
```yaml
all:
children:
webservers:
hosts:
web1.example.com:
ansible_host: 192.168.1.10
ansible_user: admin
web2.example.com:
ansible_host: 192.168.1.11
vars:
ansible_port: 22
ansible_python_interpreter: /usr/bin/python3
databases:
hosts:
db1.example.com:
db2.example.com:
production:
children:
webservers:
databases:
```
## Связанные заметки
- [[DHCP]] — если хосты получают IP динамически через DHCP, inventory должен использовать имена (DNS), а не IP-адреса
- [[DNS]] — `ansible_host: web1.example.com` требует DNS-резолвинга; `/etc/resolv.conf` определяет, где искать
@@ -0,0 +1,75 @@
---
status: stable
type: concept
tags:
- devops
- ansible
created: 2025-12-17
updated: 2026-05-07
title: Loops - Ansuble
---
# Loops - Ansuble
Для перебора значений в модулях Ansbible используются две конструкции:
1. `loop` - универсален, используется, когда перебираемые значения - это строки в словаре (`user = { name: Boris; age: 22 }`)
2. Директива `with_*` - где `*` - обозначение конкретного итератора
## Loop
```text
-
name: Цикл
hosts: all
tasks:
-
name: Цикл loop для создания пользователя
user:
name: '{{ item.name }}'
age: '{{ item.age }}'
uid: '{{ item.uid }}'
loop:
- name: Boris
age: 22
uid: 1011
- name: Anna
age: 23
uid: 1012
...
```
## with_
```text
-
name: Цикл
hosts: all
tasks:
-
name: Цикл with для создания пользователя
user:
name: '{{ item }}'
age: '{{ item }}'
uid: '{{ item }}'
with_items:
- name: Boris
- name: Anna
...
```
```text
-
name: 'Print list of fruits'
hosts: localhost
vars:
fruits:
- Apple
- Banana
- Grapes
- Orange
tasks:
-
command: 'echo "{{ item }}"'
with_items: '{{ fruits }}'
```
@@ -0,0 +1,94 @@
---
status: stable
type: concept
tags:
- devops
- ansible
created: 2025-12-17
updated: 2026-05-07
title: Modules - Ansible
---
# Modules - Ansible
## Module Command
Выполнение команды на удаленном узле.
```yaml
- name: Display home directory
command: ls ~/
```
У самих команд могут быть параметры, например
```yaml
command: cat resolv.conf chdir=/etc # ansible сначала убедится, что мы в директории /etc или перейдет в неё, а затем выполнит команду cat
command: mkdir /folder creates=/folder # ansible создаст папку только в том случае, если её не существует
```
# Module Script
Выполняет скрипт, находящийся на хост-контроллере
```yaml
-
name: Тестовый плейбук со скриптом
hosts: all
tasks:
- name: Запуск скрипта с хоста
script: /root/script.sh -arg1 -arg2
```
## Module LineInFile
Записывает указанную строку в конец указанного файла _если точнее, ansible убеждается в наличии такой строки, но если её нет, то записывает в конец_
```yaml
-
name: Тестовый плейбук
hosts: all
tasks:
- lineinfile:
path: /etc/resolv.conf
line: 'nameserver 10.1.250.10'
```
## Module Service
Работает с сервисами сервера (systemd)
```yaml
-
name: 'Execute a script on all web server nodes'
hosts: web_nodes
tasks:
-
name: 'Start httpd service on web server nodes'
service:
state: started
```
## User
> ansible.builtin.user
Работа с пользователями системы (linux)
```yaml
-
name: 'Create new user'
hosts: all
tasks:
-
name: 'Create user John'
user:
name: John
uid: 1040
group: dev
```
## Связанные заметки
- [[File Permissions]] — модуль `user` управляет uid/gid пользователей Linux; `lineinfile` редактирует системные файлы; все это работает поверх Linux-прав доступа
- [[Super-user]] — `become: true` использует sudo; модуль `user` создаёт пользователей без root-прав для следующих задач
@@ -0,0 +1,52 @@
---
status: stable
type: concept
tags:
- devops
- ansible
created: 2025-12-17
updated: 2026-05-07
title: Playbooks - Ansible
---
# Playbooks - Ansible
- Playbook - отдельный yml файл.
_Module_ - любое атомарное действие в Ansible.
Запуск playbook:
```text
ansible-playbook playbook.yml
```
Существует возможность запуска каких-то модулей без использования playbook Например, можно провести `ping` какой-то машины с хоста с помощью команды:
```text
ansible node1 -m ping
```
В общем случае, для любого модуля:
```text
ansible <hosts> -m <module>
```
Также можно на узле выполнить команду:
```text
ansible <hosts> -a <command>
```
Например
```text
ansible all -a "/sbin/reboot"
```
Если необходимо отладить сценарий можно добавить к команде `-vv`
```text
ansible-playbook playbook.yml -vv
```