• 🚨 Ещё можно успеть на курс «OSINT: технология боевой разведки» от Академии Кодебай

    🔍 Изучите методы разведки с использованием открытых источников (OSINT) для проведения успешных атак.
    🛠️ Освойте ключевые инструменты, такие как Maltego, TheHarvester и другие.
    🧪 Пройдите практические лабораторные работы, имитирующие реальную разведку.
    🧠 Развивайте навыки, которые помогут вам стать экспертом в области информационной безопасности.

    Запись открыта до 23 мая Подробнее о курсе ...

Ansible - управляем сразу всем.

Runinterface

Green Team
24.10.2016
51
35
Доброго времени суток %username%.
Хотел рассказать о таком ПО как ansible. Ansible является отличным инструментом, для управления одного или нескольких серверов или выполнять на них определенных действий.
В примере у нас будет мой десктоп
PC1 = 192.168.1.1
И виртуальная машина, исполняющая роль "сервера".
VM1 = 192.168.1.2
Поехали:
1. Установка и первоначальная настройка:
1.1 Можно установить из репозитория вашей системы если есть:
sudo apt-get install ansible
1.2 По умолчанию ansible создает файлы конфигурации и файлы для исполнения в /etc/ansible
но вы можете разместить файлы исполнения где вам удобно.
1.3 cd /etc/ansible && ls -la
ansible.cfg - основной конфигурационный файл ansible.
hosts - файл в котором мы описываем хосты к которым мы будем подключаться (ansible ипользует ssh).
1.4 vim /etc/asnible/hosts
Там имеется закоментированное описание того как создавать хосты.
#[ ] в таких скобках указывается группа хостов.
# далее идут сами хосты ИМЯ ansible_....параметры.
Код:
        [VM]
        VM1 ansible_ssh_host=192.168.1.2 ansible_ssh_password=$SSHPASS ansible_sudo_pass=$SSHPASS
#Если у вас в /etc/hosts или в ~/.ssh/config не прописаны значения для VM1 то указываем их тут в файле hosts.
#$SSHPASS познакомьтесь это переменная окружения документация ansible не советует держать пароль а открытом виде в целях безопасности, но вы можете это делать.
#Заводим переменную окружения export SSHPASS=yourpassw0rd, так же можно использовать ssh ключи параметр: ansible_ssh_private_key_file=/path/to/file.
#Так как нам понадобится исполнять комманды от привелигированного пользователя, то нужно разрешить sudo без пароля на сервере, либо указать ansible_sudo_pass=$SSHPASS как это сделал я.
##Как делается sudo без пароля: vim /etc/sudoers.d/username с содержимым username ALL=(ALL:ALL) NOPASSWD:ALL

2. Playbook и как это работает:
Playbook`s пишется в формате .yml с соответствующему убогости синтаксиса YAML.
Напишем простенький "плейбук" vim test.yml (в YAML запрещена табуляция, только пробелы)
Код:
  - hosts: VM1
        tasks:
        - name: LISTDIR
          command: ls -la
2.1 Стартуем:
ansible-playbook test.yml
1.png
3. Заключение:
Возможности Ansible безграничны, он имеет огромное количество модулей для выполнения каких то определенных задач, но никто не отменял обычный shell. Всего что есть в Ansible не расскажешь и не покажешь, настолько много всего. Я взял этот инструмент на вооружение, и избавился от рутины добавлений пользователей на сервере, теперь задачи которые занимали 10 минут, могут занимать до минуты и выполнены они будет одно-двумя командами. Особенно подойдет тем у кого есть пул серверов, более 10.
По мимо чего то простого как в моем примере, так же можно реализовать что-то по сложнее:
Автоматизация процесса деплоев.
Автоматизация процесса разворачивания окружений, притом любых.
И т.д....
За дополнительной информацией если вам таковая интересна можете посетить официальную документацию:

Playbook:
Modules:
YAML:

Всем спасибо.
Добро пожаловать в мир, где вы сделали все, что бы ничего не делать.
 
  • Нравится
Реакции: Valet и Vertigo
Код:
---------------------------------------ISP-----------------------------------------------------
root@isp:~# cat /etc/network/interfaces
source /etc/network/interfaces.d/*
auto ens18
iface ens18 inet dhcp
    post-up iptables -t nat -I POSTROUTING -o ens18 -j MASQUERADE
    post-down iptables -t nat -F
auto ens19
iface ens19 inet static
    address 172.16.4.1/28
auto ens20
iface ens20 inet static
    address 172.16.5.1/28
systemctl restart networking
apt install iptables
hostnamectl set-hostname isp.au-team.irpo
timedatectl set-timezone Europe/Moscow
nano /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
reboot
---------------------------------------HQ-RTR-----------------------------------------------------
root@hq-rtr:~# cat /etc/network/interfaces
source /etc/network/interfaces.d/*
auto ens18
iface ens18 inet static
        address 172.16.4.2/28
        gateway 172.16.4.1
        post-up iptables -t nat -I POSTROUTING -o ens18 -j MASQUERADE
        post-down iptables -t nat -F
#auto ens19
#iface ens19 inet manual
auto ens19.100
iface ens19.100 inet static
        address 192.168.100.1/29
        vlan-raw-device ens19
auto ens19.200
iface ens19.200 inet static
        address 192.168.200.1/29
        vlan-raw-device ens19
auto ens19.999
iface ens19.999 inet static
        address 192.168.99.1/30
        vlan-raw-device ens19
auto gre1
iface gre1 inet static
    address 192.168.255.1
    netmask 255.255.255.252
    pre-up ip tunnel add gre1 mode gre remote 172.16.5.2 local 172.16.4.2 ttl 64 dev ens18
    up ip link set gre1 up
    post-down ip tunnel del gre1
    post-up /bin/systemctl restart frr
systemctl restart networking
apt install iptables sudo frr dnsmasq
hostnamectl set-hostname hq-rtr.au-team.irpo
timedatectl set-timezone Europe/Moscow
nano /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
reboot
useradd -m -s /bin/bash net_admin
echo net_admin:P@$$word | chpasswd   (echo 'net_admin:P@$$word' | chpasswd)
nano /etc/sudoers
net_admin ALL=(ALL) NOPASSWD: ALL
nano /etc/frr/daemons
ospfd=yes
systemctl restart frr.service
vtysh
conf t
interface gre1
ip ospf authentication message-digest
ip ospf message-digest-key 1 md5 P@ssw0rd
ip ospf network point-to-point
exit
router ospf
passive-interface default
no passive-interface gre1
network 192.168.100.0/29 area 0
network 192.168.200.0/29 area 0
network 192.168.99.0/30 area 0
network 192.168.255.0/30 area 0
area 0 authentication message-digest
exit
do wr
exit
nano /etc/dnsmasq.conf
domain=au-team.irpo
interface=ens19.200
dhcp-range=192.168.200.2,192.168.200.6,24h
dhcp-option=1,255.255.255.248
dhcp-option=3,192.168.200.1
dhcp-option=6,192.168.100.2
dhcp-host=bc:24:11:84:40:b2,192.168.200.6
systemctl restart dnsmasq
nano /etc/systemd/resolved.conf
DNS=192.168.100.2 8.8.8.8
systemctl restart systemd-resolved
systemctl enable frr dnsmasq
---------------------------------------BR-RTR-----------------------------------------------------
root@br-rtr:~# cat /etc/network/interfaces
source /etc/network/interfaces.d/*
auto ens18
iface ens18 inet static
        address 172.16.5.2/28
        gateway 172.16.5.1
        post-up iptables -t nat -I POSTROUTING -o ens18 -j MASQUERADE
        post-down iptables -t nat -F
auto ens19
iface ens19 inet static
        address 192.168.3.1/29
auto gre1
iface gre1 inet static
    address 192.168.255.2
    netmask 255.255.255.252
    pre-up ip tunnel add gre1 mode gre remote 172.16.4.2 local 172.16.5.2 ttl 64 dev ens18
    up ip link set gre1 up
    post-down ip tunnel del gre1
    post-up /bin/systemctl restart frr
systemctl restart networking
apt install iptables sudo frr
hostnamectl set-hostname br-rtr.au-team.irpo
timedatectl set-timezone Europe/Moscow
nano /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
reboot
useradd -m -s /bin/bash net_admin
echo net_admin:P@$$word | chpasswd
nano /etc/sudoers
net_admin ALL=(ALL) NOPASSWD: ALL
nano /etc/frr/daemons
ospfd=yes
systemctl restart frr.service
vtysh
conf t
interface gre1
ip ospf authentication message-digest
ip ospf message-digest-key 1 md5 P@ssw0rd
ip ospf network point-to-point
exit
router ospf
passive-interface default
no passive-interface gre1
network 192.168.3.0/29 area 0
network 192.168.255.0/30 area 0
area 0 authentication message-digest
exit
do wr
exit
nano /etc/systemd/resolved.conf
DNS=192.168.100.2 8.8.8.8
systemctl restart systemd-resolved
systemctl enable frr
---------------------------------------HQ_SRV-----------------------------------------------------
root@hq-srv:~# cat /etc/network/interfaces
source /etc/network/interfaces.d/*
auto ens18
iface ens18 inet static
        address 192.168.100.2/29
        gateway 192.168.100.1
systemctl restart networking
apt install sudo ssh bind9
hostnamectl set-hostname hq-srv.au-team.irpo
timedatectl set-timezone Europe/Moscow
reboot
useradd -u 1010 -m -s /bin/bash sshuser
echo sshuser:P@ssw0rd | chpasswd
nano /etc/sudoers
sshuser ALL=(ALL) NOPASSWD: ALL
cat << EOF > /etc/ssh/banner.txt
Authorized access only
EOF
cat << EOF > /etc/ssh/sshd_config.d/demo.conf
Port 2024
AllowUsers sshuser
MaxAuthTries 2
Banner /etc/ssh/banner.txt
EOF
systemctl restart sshd.service
cat << EOF > /etc/bind/named.conf.options
options {
        directory "/var/cache/bind";
        allow-recursion { any; };
        forwarders { 8.8.8.8; };
        dnssec-validation auto;
        listen-on { 127.0.0.1; 192.168.100.2; };
};
EOF
cat << EOF > /etc/bind/named.conf.local
zone "au-team.irpo" {
        type master;
        file "/etc/bind/db.au-team.irpo";
};
zone "168.192.in-addr.arpa" {
        type master;
        file "/etc/bind/db.168.192";
};
EOF
nano /etc/bind/db.au-team.irpo
$TTL    1d
$ORIGIN au-team.irpo.
@       IN      SOA     ns      admin (
        2025010100      ; Serial
        1h              ; Refresh
        1m              ; Retry
        1d              ; Expire
        1d              ; TTL
)
@       IN      NS      ns
ns      IN      A       192.168.100.2
hq-srv  IN      CNAME   ns
hq-rtr  IN      A       192.168.100.1
hq-rtr  IN      A       192.168.200.1
hq-rtr  IN      A       192.168.99.1
br-rtr  IN      A       192.168.3.1
hq-cli  IN      A       192.168.200.6
br-srv  IN      A       192.168.3.2
moodle  IN      CNAME   hq-rtr
wiki    IN      CNAME   hq-rtr
nano /etc/bind/db.168.192
$TTL    2d
$ORIGIN 168.192.in-addr.arpa.
@       IN      SOA     ns.au-team.irpo admin.au-team.irpo. (
                        2025020820      ; Serial
                        1d              ; Refresh
                        1h              ; Retry
                        1d              ; Expire
                        1d )            ; Negative Cache TTL
;
@       IN      NS      ns.au-team.irpo.
6.200   IN      PTR     hq-cli.au-team.irpo.
2.100   IN      PTR     hq-srv.au-team.irpo.
1.100   IN      PTR     hq-rtr.au-team.irpo.
1.200   IN      PTR     hq-rtr.au-team.irpo.
1.99    IN      PTR     hq-rtr.au-team.irpo.
named-checkconf
named-checkzone au-team.irpo /etc/bind/db.au-team.irpo
named-checkzone 168.192.in-addr.arpa /etc/bind/db.168.192
systemctl restart bind9 (named)
nano /etc/systemd/resolved.conf
DNS=192.168.100.2 8.8.8.8
systemctl restart systemd-resolved
systemctl enable ssh named
---------------------------------------BR-SRV-----------------------------------------------------
root@br-srv:~# cat /etc/network/interfaces
source /etc/network/interfaces.d/*
auto ens18
iface ens18 inet static
        address 192.168.3.2/29
        gateway 192.168.3.1
systemctl restart networking
apt install sudo ssh
hostnamectl set-hostname br-srv.au-team.irpo
timedatectl set-timezone Europe/Moscow
reboot
useradd -u 1010 -m -s /bin/bash sshuser
echo sshuser:P@ssw0rd | chpasswd
nano /etc/sudoers
sshuser ALL=(ALL) NOPASSWD: ALL
cat << EOF > /etc/ssh/banner.txt
Authorized access only
EOF
cat << EOF > /etc/ssh/sshd_config.d/demo.conf
Port 2024
AllowUsers sshuser
MaxAuthTries 2
Banner /etc/ssh/banner.txt
EOF
systemctl restart sshd.service (ssh)
nano /etc/systemd/resolved.conf
DNS=192.168.100.2 8.8.8.8
systemctl restart systemd-resolved
systemctl enable ssh
---------------------------------------HQ-CLI-----------------------------------------------------
root@br-srv:~# cat /etc/network/interfaces
source /etc/network/interfaces.d/*
auto ens18
iface ens18 inet dhcp
systemctl restart networking
hostnamectl set-hostname hq-cli.au-team.irpo
timedatectl set-timezone Europe/Moscow
reboot
nano /etc/systemd/resolved.conf
DNS=192.168.100.2 8.8.8.8
systemctl restart systemd-resolved
-----------------------------------------Файловое хранилище----------------------------------------
Убедиться, что диски есть и посмотреть их имена:
lsblk
Создать raid:
mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd
Посмотреть информацию о raid:
root@hq-srv:~# mdadm --detail /dev/md0
/dev/md0:
...
        Raid Level : raid5
      Raid Devices : 3
              UUID : 9eee4466:2a562fe4:f0a4cea5:ab814e87
...
Сохранить конфигурацию в файл:
root@hq-srv:~# mdadm --detail --scan | tee /etc/mdadm/mdadm.conf
ARRAY /dev/md0 metadata=1.2 name=hq-srv.au-team.irpo:0 UUID=9eee4466:2a562fe4:f0a4cea5:ab814e87
root@hq-srv:~# cat /etc/mdadm.conf
ARRAY /dev/md0 metadata=1.2 name=hq-srv.au-team.irpo:0 UUID=9eee4466:2a562fe4:f0a4cea5:ab814e87
cp /etc/mdadm/mdadm.conf /etc/mdadm.conf
update-initramfs -u
Создание файловой системы:
mkfs.ext4 /dev/md0
Поиск UUID для fstab:
root@hq-srv:~# blkid
...
/dev/md0: UUID="fcbd9e71-1d2b-4c67-b2bb-36a53add0b91" BLOCK_SIZE="4096" TYPE="ext4"
...
echo "UUID=fcbd9e71-1d2b-4c67-b2bb-36a53add0b91 /raid ext4 defaults 0 0" >> /etc/fstab
root@hq-srv:~# mount -a
mount: /raid: mount point does not exist.
root@hq-srv:~# mkdir /raid
root@hq-srv:~# mount -a
root@hq-srv:~# ls /raid/
lost+found
root@hq-srv:~# df -h /raid/
Filesystem      Size  Used Avail Use% Mounted on
/dev/md0        2.0G   24K  1.9G   1% /raid
Удалить raid (не по заданию, а на всякий случай):
mdadm --stop /dev/md0
mdadm --zero-superblock /dev/md0
update-initramfs -u
# удалить из fstab
Настройте сервер сетевой файловой системы(nfs), в качестве папки общего доступа выберите /raid5/nfs, доступ для чтения и записи для всей сети в сторону HQ-CLI.
HQ-SRV
mkdir /raid/nfs
echo "/raid/nfs 192.168.200.0/29(rw,sync,crossmnt,fsid=0,no_subtree_check,wdelay,all_squash)" >> /etc/exports
systemctl restart nfs-server.service
На HQ-CLI настройте автомонтирование в папку /mnt/nfs.
HQ-CLI
mkdir /mnt/nfs
echo "192.168.100.2:/nfs /mnt/nfs nfs4 defaults 0 0" >> /etc/fstab
mount -a
-----------------------------------------CHRONY----------------------------------------
!)HQ-RTR
apt install chrony
systemctl enable chrony
nano /etc/chrony/chrony.conf
- pool 2.debian....
local stratum 5
allow 0/0
systemctl restart chronyd
!) На всех кроме ISP
apt install chrony
systemctl enable chrony
nano /etc/chrony/chrony.conf
Находим и меняем pool на pool hq-rtr iburst
systemctl restart chrony
chronyc tracking
-----------------------------------------ANSIBLE----------------------------------------
apt install python3-pip sshpass
pip install ansible-core
# или
python3 -m pip install ansible-core
ansible --version
nano /etc/ansible/hosts
hq-srv.au-team.irpo ansible_port=2024 ansible_user=sshuser ansible_password=P@ssw0rd
hq-cli.au-team.irpo ansible_user=user ansible_password=user
hq-rtr.au-team.irpo ansible_user=user ansible_password=user
br-rtr.au-team.irpo ansible_user=user ansible_password=user
nano /etc/ansible/ansible.cfg
[defaults]
interpreter_python = auto_silent
host_key_checking = False
ansible all -m ping
Доп:
открыть 22 порт на роутерах и на кли
на роутерах:
echo 'net_admin:P@$$word' | chpasswd
-----------------------------------------DockerMediaWiki----------------------------------------
apt-get install -y docker-engine docker-compose
systemctl enable --now docker
usermod root -aG docker
cd /home/user
nano wiki.yml
services:
  wiki:
    image: mediawiki
    restart: always
    ports:
      - 8080:80
    links:
      - database
    container_name: wiki
    volumes:
      - images:/var/www/html/images
#      - ./LocalSettings.php:/var/www/html/LocalSettings.php
  database:
    image: mariadb
    container_name: mariadb
    restart: always
    environment:
      MYSQL_DATABASE: mediawiki
      MYSQL_USER: wiki
      MYSQL_PASSWORD: WikiP@ssw0rd
      MYSQL_RANDOM_ROOT_PASSWORD: 'yes'
      TZ: Europe/Moscow
    volumes:
      - db:/var/lib/mysql
volumes:
  images:
  db:
docker compose -f wiki.yml up -d
На HQ-CLI
Настроить и
scp -P 2024 /home/user/Загрузки/LocalSettings.php sshuser@10.2.2.1:/home/sshuser
nano wiki.yml
раскомментировать строку
docker compose -f wiki.yml up -d
-----------------------------------------ПРОБРОС-----------------------------------------------------------
BR-RTR
iptables -t nat -A PREROUTING -p tcp -i ens18 --dport 80 -j DNAT --to-destination 192.168.3.2:8080
iptables-save > /etc/sysconfig/iptables
systemctl restart iptables
BR-SRV
iptables -t nat -A PREROUTING -p tcp -i ens18 --dport 2024 -j DNAT --to-destination 192.168.100.2:2024
iptables -t nat -A PREROUTING -p tcp -i ens18 --dport 2024 -j DNAT --to-destination 192.168.3.2:2024
iptables-save > /etc/sysconfig/iptables
systemctl restart iptables
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!

Курс AD