Есть условный свежеустановленный сервер с убунту 20.04 на борту. Там 2 сетевых интерфейса (на одном белый ip, на другом серый). Есть ssh доступ по белому ip по логину (root) + паролю. Серый ip не известен. Написать сценарий автоматизации, который сделает следующее: Добавит несколько (больше 2х) пользователей на сервер с их ключами Даст всем новым пользователям возможность повышения прав до root Добавит несколько стандартных пакетов в систему (vim, iotop, tcpdump) Отключит в ssh доступ по паролю (оставит доступ только по ключам) Сменит стандартный порт ssh Установит redis и запустит его на сером интерфейсе Настроит доступ на сервер и в редис только по серой сети Запретит любой доступ на сервер по белой сети, кроме ответов на ping
- При помощи
Vagrant
устанавливал 2 виртуалки Ubuntu 20.04, 1 - Master-ansible, 2 - Для тестов.Vagrantfile
- в репе есть. На виртуалке при старте 3 сетевухи, первуюnat
надо отключить + серая сеть через сетевуху на ПК + белая сеть через bridge intnet. - На Master-ansible установить необходимые пакеты
sudo apt install python3-pip -y
pip3 install ansible
Перезапускаем сессию source ~/.bashrc
- Получить репозиторий
git clone https://github.com/fil106/ansible-dev.git ansible
Для запуска сценария необходимо
vars/
переменные проверить/изменить, при необходимости добавляем сюда свои переменные. После вtemplates
используемplaybook.yml
раскомментировать необходимыеroles
inv.txt
добавить свои хостыansible.cfg
изменить пользовтеля (в данном случае пользователь vagrant т.к. виртуалки поднимаем через vagrant).vaultpass
создать свой, внутри plaintext парольdev_users.secret
создать на основе примераdev_users.secret.example
, где
- ssh-key - генерим ssh-key под нужным пользователем или под своим но копируем в /home/<имя пользователя>/.ssh. Генерируем при помощи
ssh-keygen
. И вставляем необходимый ключ в данное поле. - password - генерим пароль
mkpasswd --method=SHA-512
, чтоб не светить пароль. Можно и без шифрования. - Остальные параметры можно смотреть тут - https://github.com/ryandaniels/ansible-role-create-users
- Можно добавлять несколько пользователей, для этого просто по правилам yaml добавляем ещё один элемент через "-" соблюдая отступы.
В корневой папке запускаем:
- Если не хотим светить пароли и создавать файл
.vaultpass
и создавать переменнуюansible_sudo_pass
вansible.cfg
то:ansible-playbook playbook.yml -kK
, где
-k, --ask-pass - ask for connection password
-K, --ask-become-pass - ask for privilege escalation password
- Если создали
.vaultpass
и переменнуюansible_sudo_pass
, то:ansible-playbook playbook.yml
create-user:
Создаём пользователей из файлаvars/dev_users.secret
он зашифрован, чтобы правитьansible-vault edit vars/dev_users.secret
либо вводите пароль по требованию либо.vaulpass
с паролем. Использовал готовую роль отhttps://github.com/ryandaniels/ansible-role-create-users
sshd-config:
SSH логинимся только по ключу. Рольsshd-config
- при помощи jinja2 генерим стандартный шаблон, куда подставляем 2 переменные, копируем на сервер и делаем бэкап на всякий. Ребутим.install-packages:
Устанавливаем vim, iotop, tcpdump при помощи модуля aptcheck-ip:
https://github.com/ATolkachev/ansible/blob/master/library/get_ip_facts.py
- получаем какой интерфей с белой и серой ip. Без данной роли не будут изменены конфиги ssh, redis и iptables - конфиги будут по умолчанию. (Отказался от данного варианта в пользу пункта ниже)
check-ip:
- решил определять серую сеть след. образом, известно, что коннектимся по белой ip соответственноansible_all_ipv4_addresses
- знает все ip интерфейсов, иansible_host
- текущий host ip. Соответственно исключаем из ansible_all_ipv4_addresses ansible_host и получаем серую ip. Логика работает соответственно только если 2 интерфейса на машине.
docker-install:
Ставим dockerdocker-redis:
Запускаем контейнер с redis и нужными параметрамиredis:
Запускаем redis в докереiptables:
Настраиваем firewall, ВАЖНО, для корректной работы необходимо запускать с включенной рольюcheck-ip
т.к.private_ip
получаем оттуда