Демо-экзамен · 2027

Гайд для крутых братков

Пошаговая инструкция по всем трём модулям: сеть, Samba AD, NFS, NTP, Nginx, CUPS и защита.

3 модуляЛинукс + EcoRouterau-team.irpo
Обложка гайда
00

Общая таблица адресов

Сетевая конфигурация устройств: таблица адресов для всех узлов (HQ-SRV, BR-SRV, HQ-CLI, HQ-RTR, BR-RTR, ISP).
Сетевая конфигурация устройств: таблица адресов для всех узлов (HQ-SRV, BR-SRV, HQ-CLI, HQ-RTR, BR-RTR, ISP).
01

Первый модуль

Задание 1

По заданию можно использовать везде маску /29.

Vlan100 = 192.168.0.0/29 Vlan200 = 192.168.0.8/29 Vlan999 = 192.168.0.16/29

Задание 2

Ваши интерфейсы могут быть другими.

IP-адреса

  • ISP ens3: 172.16.1.1/28
  • ISP ens4: 172.16.2.1/28
  • HQ-RTR wan (ge0): 172.16.1.2/28
  • BR-RTR wan (ge0): 172.16.2.2/28

Настройка NAT и форвардинга на ISP

Команда NAT:

iptables -t nat -A POSTROUTING -o ens5 -j MASQUERADE

В /etc/sysctl.conf написать:

net.ipv4.ip_forward=1

Применить настройки:

sysctl -p

Настройка адресов на ISP (через nmtui)

Настройка ecorouter: HQ-RTR

hq-rtr(config)#interface wan hq-rtr(config-if)#ip address 172.16.1.2/28 hq-rtr(config-if)#ip nat outside hq-rtr(config)#port ge0 hq-rtr(config-port)#service-instance wan hq-rtr(config-service-instance)#encapsulation untagged hq-rtr(config-service-instance)#connect ip interface wan hq-rtr(config)#ip route 0.0.0.0/0 172.16.1.1

Настройка ecorouter: BR-RTR

br-rtr(config)#interface wan br-rtr(config-if)#ip address 172.16.2.2/28 br-rtr(config-if)#ip nat outside br-rtr(config)#port ge0 br-rtr(config-port)#service-instance wan br-rtr(config-service-instance)#encapsulation untagged br-rtr(config-service-instance)#connect ip interface wan br-rtr(config)#ip route 0.0.0.0/0 172.16.2.1

Локальные интерфейсы HQ-RTR

hq-rtr(config)#interface v100 hq-rtr(config-if)#ip address 192.168.0.1/29 hq-rtr(config-if)#ip nat inside hq-rtr(config)#interface v200 hq-rtr(config-if)#ip address 192.168.0.9/29 hq-rtr(config-if)#ip nat inside hq-rtr(config)#interface v999 hq-rtr(config-if)#ip address 192.168.0.17/29 hq-rtr(config-if)#ip nat inside hq-rtr(config)#port ge1 hq-rtr(config-port)#service-instance v100 hq-rtr(config-service-instance)#encapsulation dot1q 100 exact hq-rtr(config-service-instance)#rewrite pop 1 hq-rtr(config-service-instance)#connect ip interface v100 hq-rtr(config-port)#service-instance v200 hq-rtr(config-service-instance)#encapsulation dot1q 200 exact hq-rtr(config-service-instance)#rewrite pop 1 hq-rtr(config-service-instance)#connect ip interface v200 hq-rtr(config-port)#service-instance v999 hq-rtr(config-service-instance)#encapsulation dot1q 999 exact hq-rtr(config-service-instance)#rewrite pop 1 hq-rtr(config-service-instance)#connect ip interface v999

Локальные интерфейсы BR-RTR

Сеть 172.168.0.0/29 (так написано в исходнике).

br-rtr(config)#interface lan br-rtr(config-if)#ip address 172.168.0.1/29 br-rtr(config-if)#ip nat inside br-rtr(config)#port ge1 br-rtr(config-port)#service-instance lan br-rtr(config-service-instance)#encapsulation untagged br-rtr(config-service-instance)#connect ip interface lan

Задание 3

На HQ-SRV и BR-SRV

Создаём пользователя sshuser с UID 2027:

useradd sshuser -u 2027 passwd sshuser

В файле /etc/sudoers в записи пользователя sshuser добавляем:

sshuser ALL=(ALL) NOPASSWD: ALL

Это нужно, чтобы при sudo не запрашивался пароль.

На HQ-RTR и BR-RTR

username net_admin role admin password P@ssw0rd

Задание 4

Настройка коммутатора (Open vSwitch) на Linux-коммутаторе.

ovs-vsctl add-br br0 ovs-vsctl add-port br0 eth0 trunk=100,200,999 ovs-vsctl add-port br0 eth1 tag=100 ovs-vsctl add-port br0 eth2 tag=200
  • eth0 — интерфейс, который смотрит на роутер (транк 100, 200, 999).
  • eth1 — интерфейс на сервер (VLAN 100).
  • eth2 — интерфейс на клиента CLI (VLAN 200).

Задание 5

На BR-SRV и HQ-SRV

Открываем конфиг SSH:

nano /etc/ssh/sshd_config

В этом файле прописать:

Port 2027 AllowUsers sshuser banner /etc/banner MaxAuthTries 2

В файле баннера /etc/banner прописать:

Authorized access only!

Применить:

setenforce 0 systemctl restart sshd

Задание 6

Туннель GRE на HQ-RTR

hq-rtr(config)#interface tunnel.0 hq-rtr(config-if-tunnel)#ip address 10.10.10.1/30 hq-rtr(config-if-tunnel)#ip tunnel 172.16.1.2 172.16.2.2 mode gre

Туннель GRE на BR-RTR

br-rtr(config)#interface tunnel.0 br-rtr(config-if-tunnel)#ip address 10.10.10.2/30 br-rtr(config-if-tunnel)#ip tunnel 172.16.2.2 172.16.1.2 mode gre

Задание 7 — OSPF

Настройка OSPF на HQ-RTR

hq-rtr(config)#router ospf 1 hq-rtr(config-router)#network 10.10.10.0/30 area 0 hq-rtr(config-router)#network 192.168.0.0/24 area 0 hq-rtr(config-router)#passive-interface default hq-rtr(config-router)#no passive-interface tunnel.0 hq-rtr(config)#interface tunnel.0 hq-rtr(config-if-tunnel)#ip ospf authentication message-digest hq-rtr(config-if-tunnel)#ip ospf message-digest-key 1 md5 P@ssw0rd

Настройка OSPF на BR-RTR

br-rtr(config)#router ospf 1 br-rtr(config-router)#network 10.10.10.0/30 area 0 br-rtr(config-router)#network 172.168.0.0/29 area 0 br-rtr(config-router)#passive-interface default br-rtr(config-router)#no passive-interface tunnel.0 br-rtr(config)#interface tunnel.0 br-rtr(config-if-tunnel)#ip ospf authentication message-digest br-rtr(config-if-tunnel)#ip ospf message-digest-key 1 md5 P@ssw0rd

Задание 8 — NAT

НА HQ-RTR

hq-rtr(config)#ip nat pool nat 192.168.0.1-192.168.0.23 hq-rtr(config)#ip nat source dynamic inside-to-outside pool nat overload interface wan

НА BR-RTR

br-rtr(config)#ip nat pool nat 172.168.0.1-172.168.0.23 br-rtr(config)#ip nat source dynamic inside-to-outside pool nat overload interface wan

Задание 9 — DHCP

На HQ-RTR настраиваем DHCP-сервер:

hq-rtr(config)#ip pool lan 192.168.0.10 hq-rtr(config)#dhcp-server 1 hq-rtr(config-dhcp-server)#pool lan 1 hq-rtr(config-dhcp-server-pool)#mask 29 hq-rtr(config-dhcp-server-pool)#gateway 192.168.0.9 hq-rtr(config-dhcp-server-pool)#dns 192.168.0.2 hq-rtr(config-dhcp-server-pool)#domain-search au-team.irpo hq-rtr(config)#interface v200 # интерфейс, который для HQ-CLI hq-rtr(config-if)#dhcp-server 1

Задание 10 — DNS (dnsmasq)

Нужно настроить DNS в локальной сети — используем dnsmasq.

На HQ-SRV временно поставьте какой-нибудь DNS-сервер, чтобы можно было скачать пакет. В файле /etc/resolv.conf пропишите любой рабочий DNS-сервер:

dnf install dnsmasq -y

Настраиваем dnsmasq:

interface=ens3 no-resolv server=8.8.8.8 host-record=hq-rtr.au-team.irpo,172.16.1.2 host-record=br-rtr.au-team.irpo,172.16.2.2 host-record=hq-srv.au-team.irpo,192.168.0.2 host-record=br-srv.au-team.irpo,172.168.0.2 host-record=web.au-team.irpo,172.16.2.1 host-record=docker.au-team.irpo,172.16.1.1 host-record=hq-cli.au-team.irpo,192.168.0.10
systemctl enable --now dnsmasq

Задание 11 — Часовой пояс

Linux должен автоматически определять часовой пояс через интернет. Если часовой пояс настроен неправильно, установите московское время вручную:

timedatectl set-timezone Europe/Moscow

Проверить текущие настройки:

timedatectl

Ecorouter

hq-rtr(config)#ntp timezone utc+3 hq-rtr(config)#do show ntp date

На двух роутерах (HQ-RTR и BR-RTR) сделать так же.

Первый модуль полностью сделан!

02

Второй модуль

Задание 1 — Samba AD

На BR-SRV

Качаем Samba и Kerberos:

dnf install samba* krb5* -y

Файл /etc/krb5.conf привести к такому виду:

Содержимое /etc/krb5.conf
Содержимое /etc/krb5.conf: default_realm = AU-TEAM.IRPO, блоки [realms] и [domain_realm].

Выходим из файла и пишем команду:

rm -f /etc/samba/smb.conf

Поднимаем домен:

samba-tool domain provision

Пароль вводим: P@ssw0rd

После того как всё сделалось, включаем Samba:

systemctl enable --now samba

Политика паролей

  • Минимальная длина пароля — 8 символов:
  • Блокировка учётки после 5 неудачных попыток:
samba-tool domain passwordsettings set --min-pwd-length=8 samba-tool domain passwordsettings set --account-lockout-threshold=5

Пользователи и группа

Создаём 5 пользователей и группу hq, добавляем пользователей в группу. Создаём скрипт:

nano user.sh
#!/bin/bash samba-tool group add hq for i in range {1..5} do samba-tool user add hquser$i P@ssw0rd samba-tool group addmembers hq hquser$i done

Запускаем:

bash user.sh

На HQ-CLI

В /etc/resolv.conf пока ставим nameserver 172.168.0.2, чтобы вступить в домен. После перезагрузки IP поменяется обратно на адрес HQ-SRV.

nameserver 172.168.0.2

Заходим в домен. Имя — Administrator, пароль — P@ssw0rd.

sudo -i join-to-domain.sh

В конце перезагрузите HQ-CLI.

Ограничение sudo для группы hq

Для группы hq ограничиваем sudo только командами cat, grep и id. В /etc/sudoers пишем:

%hq ALL=(root) /usr/bin/cat, /usr/bin/grep, /usr/bin/id

Задание 2 — RAID и монтирование

Через lsblk смотрим, какие диски есть:

lsblk

Создаём RAID 0 через mdadm:

mdadm -C /dev/md0 -l 0 -n 2 /dev/sdb /dev/sdc

Форматируем:

mkfs.ext4 /dev/md0

В /etc/fstab добавляем строку для /raid:

/dev/md0 /raid ext4 defaults 0 0

Монтируем и смотрим, что он примонтировался:

mount -a df -h

Задание 3 — NFS

Настройка NFS на HQ-SRV

Качаем nfs-utils:

dnf install nfs-utils

Создаём каталог и выставляем права:

mkdir -p /raid/nfs chmod 777 -R /raid/nfs

В файле /etc/exports:

/raid/nfs 192.168.0.10(rw)

Запускаем:

systemctl enable --now nfs-server

На HQ-CLI

Качаем nfs-utils:

dnf install nfs-utils

Создаём каталог:

mkdir -p /mnt/nfs

В файле /etc/fstab:

192.168.0.2:/raid/nfs /mnt/nfs nfs defaults 0 0

Проверяем:

mount -a df -h

Задание 4 — NTP (chrony)

На ISP

Открываем конфиг:

Пишем upstream-сервер с minstratum 4:

server ntp4.vniiftri.ru iburst minstratum 4 prefer

Разрешаем клиентов из сети 172.16.0.0/16:

allow 172.16.0.0/16

Перезапускаем и проверяем:

systemctl restart chronyd.service chronyc tracking

Подключаем HQ-SRV, HQ-CLI и BR-SRV к NTP

server 172.16.1.1 iburst
systemctl restart chronyd.service chronyc tracking

Подключаем роутеры

br-rtr(config)#ntp server 172.16.1.1 br-rtr(config)#ntp synchronize

Проверяем:

br-rtr(config)#do show ntp status

Задание 5 — Ansible

На BR-SRV качаем ansible и sshpass:

dnf install ansible sshpass

В файле /etc/ansible/ansible.cfg:

[defaults] interpreter_python = auto_silent host_key_checking = False

В файле /etc/ansible/hosts:

[client] hq-srv ansible_host=192.168.0.2 ansible_user=sshuser ansible_password=P@ssw0rd ansible_port=2027 hq-cli ansible_host=192.168.0.10 ansible_user=sysadmin ansible_password=P@ssw0rd br-rtr ansible_host=172.16.2.2 ansible_user=admin ansible_password=admin ansible_connection=ansible.netcommon.network_cli ansible_network_os=ios hq-rtr ansible_host=172.16.1.2 ansible_user=admin ansible_password=admin ansible_connection=ansible.netcommon.network_cli ansible_network_os=ios

Проверяем:

Результат:

[root@br-srv ansible]# ansible -m ping all br-rtr | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3.8" }, "changed": false, "ping": "pong" } hq-rtr | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3.8" }, "changed": false, "ping": "pong" } hq-srv | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3.8" }, "changed": false, "ping": "pong" } hq-cli | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3.8" }, "changed": false, "ping": "pong" } [root@br-srv ansible]#

Задание 6 и 7

Задание 8 — Проброс портов

На BR-RTR

br-rtr(config)#ip nat source static tcp 172.168.0.2 8080 172.16.2.2 8080 br-rtr(config)#ip nat source static tcp 172.168.0.2 2027 172.16.2.2 2027

На HQ-RTR

hq-rtr(config)#ip nat source static tcp 192.168.0.2 2027 172.16.1.2 2027 hq-rtr(config)#ip nat source static tcp 192.168.0.2 8080 172.16.1.2 8080
hq-rtr(config)#ip nat destination static tcp 172.16.1.2 8080 192.168.0.2 8080 hairpin

Задание 9 — Браузер

Устанавливаем Yandex Browser на HQ-CLI:

dnf install yandex-browser-release -y

Второй модуль полностью сделан!

03

Третий модуль

Задание 1

Задание 2 — Nginx reverse proxy

На ISP качаем nginx:

dnf install nginx -y

В файле /etc/nginx/conf.d/site.conf пишем:

server { server_name web.au-team.irpo; location / { proxy_pass http://172.16.1.2:8080; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $host; } } server { server_name docker.au-team.irpo; location / { proxy_pass http://172.16.2.2:8080; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $host; } }

Отключаем SELinux или разрешаем сетевое соединение для httpd (после перезагрузки сохраняется):

setenforce 0 # либо setsebool -P httpd_can_network_connect 1 systemctl enable --now nginx

Задание 3 — Basic-аутентификация

На ISP качаем httpd-tools:

dnf install httpd-tools -y

Создаём пользователя WEB с паролем P@ssw0rd:

htpasswd -c /etc/nginx/.htpasswd WEB

В конфиг site.conf для web.au-team.irpo добавляем:

auth_basic "CLOSED"; auth_basic_user_file /etc/nginx/.htpasswd;

Перезагружаем nginx:

systemctl restart nginx

Задание 4 — Центр сертификации и HTTPS

На HQ-SRV: создаём CA и сертификаты

Делаем центр сертификации и выпускаем сертификаты:

mkdir -p /ssl cd /ssl openssl genrsa -out ca.key openssl genrsa -out site.key openssl req -new -days 365 -x509 -key ca.key -out ca.crt -subj "/CN=hq-srv" openssl req -new -key site.key -out site.csr -subj "/CN=hq-srv"

Создаём файл site.ext со следующим содержимым:

subjectAltName = @alt_names [alt_names] DNS.1 = web.au-team.irpo DNS.2 = docker.au-team.irpo

Подписываем сертификат:

openssl x509 -req -days 30 -CA ca.crt -CAkey ca.key -CAcreateserial -in site.csr -out site.crt -extfile site.ext

На ISP через scp передаём site.crt и site.key:

scp site.crt site.key sysadmin@172.16.1.1:~

На HQ-CLI через scp передаём ca.crt:

scp ca.crt sysadmin@hq-cli:~

На ISP: HTTPS в site.conf

В файле site.conf добавляем HTTPS (редирект с 80 на 443 и блоки ssl):

server { server_name web.au-team.irpo; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name web.au-team.irpo; ssl_certificate /home/sysadmin/site.crt; ssl_certificate_key /home/sysadmin/site.key; auth_basic "CLOSED"; auth_basic_user_file /etc/nginx/.htpasswd; location / { proxy_pass http://172.16.2.2:8080; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $host; } } server { server_name docker.au-team.irpo; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name docker.au-team.irpo; ssl_certificate /home/sysadmin/site.crt; ssl_certificate_key /home/sysadmin/site.key; location / { proxy_pass http://172.16.1.2:8080; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $host; } }
systemctl restart nginx

На HQ-CLI: доверяем сертификату CA

sudo mv ca.crt /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust

Теперь при заходе на web.au-team.irpo и docker.au-team.irpo будет https, если всё сделано правильно.

Задание 5 — Atop

Качаем atop на HQ-SRV:

dnf install atop

Настраиваем конфиг /etc/sysconfig/atop:

LOGINTERVAL=420
systemctl enable --now atop systemctl status atop

Задание 6 — CUPS (печать)

Установка и настройка на HQ-SRV

Качаем CUPS:

dnf install cups cups-pdf -y

В файле /etc/cups/cups-files.conf удаляем printadmin из строки SystemGroup:

Файл cups-files.conf до изменения: SystemGroup sys root wheel printadmin.
Файл cups-files.conf до изменения: SystemGroup sys root wheel printadmin.
Файл cups-files.conf после изменения: SystemGroup sys root wheel.
Файл cups-files.conf после изменения: SystemGroup sys root wheel.
SystemGroup sys root wheel

В /etc/cups/cupsd.conf добавляем Allow all и listen 192.168.0.2:

Файл /etc/cups/cupsd.conf: Listen 192.168.0.2:631 и блоки Location с Allow all.
Файл /etc/cups/cupsd.conf: Listen 192.168.0.2:631 и блоки Location с Allow all.
Listen 192.168.0.2:631 # в блоках <Location> добавить: Allow all
systemctl enable --now cups

Настройка с HQ-CLI

На HQ-CLI заходим в браузер на адрес http://192.168.0.2:631

Веб-интерфейс CUPS 2.4.7 на 192.168.0.2:631.
Веб-интерфейс CUPS 2.4.7 на 192.168.0.2:631.

Заходим в «Администрирование». Браузер будет ругаться на https и отсутствие сертификата — нажимаем «Дополнительно» и «Перейти на страницу». Если появится окно входа: логин root, пароль toor.

Страница «Администрирование» CUPS.
Страница «Администрирование» CUPS.

Нажимаем «Добавить принтер» и выбираем CUPS-PDF (Virtual PDF Printer), затем «Продолжить».

Выбор CUPS-PDF (Virtual PDF Printer).
Выбор CUPS-PDF (Virtual PDF Printer).

Название: printer. Описание: Virtual PDF Printer. Продолжаем.

Название printer, описание Virtual PDF Printer, подключение cups-pdf:/.
Название printer, описание Virtual PDF Printer, подключение cups-pdf:/.

Выбираем любую модель и нажимаем «Добавить принтер».

Выбор модели принтера (например, Epson 9-Pin Series).
Выбор модели принтера (например, Epson 9-Pin Series).
Принтер printer успешно добавлен.
Принтер printer успешно добавлен.

Подключение принтера на HQ-CLI

В меню «Пуск» ищем «Настройки принтера».

Поиск «принт» в меню: «Настройки принтера».
Поиск «принт» в меню: «Настройки принтера».
Окно «Настройки принтера»: нет настроенных принтеров (localhost).
Окно «Настройки принтера»: нет настроенных принтеров (localhost).

Наводим курсор на сервер, нажимаем «Добавить» / «Подключиться» и вводим IP сервера CUPS: 192.168.0.2, затем «Подключиться».

Подключение к серверу CUPS: 192.168.0.2 → Подключиться.
Подключение к серверу CUPS: 192.168.0.2 → Подключиться.
Появился принтер printer (подключён к 192.168.0.2).
Появился принтер printer (подключён к 192.168.0.2).

ПКМ по принтеру → «Использовать по умолчанию» → подтверждаем.

Диалог «Назначить по умолчанию»: назначить общесистемным по умолчанию.
Диалог «Назначить по умолчанию»: назначить общесистемным по умолчанию.

Нажимаем ОК. Появится окно входа: логин sysadmin, пароль P@ssw0rd.

Принтер printer назначен по умолчанию.
Принтер printer назначен по умолчанию.

Теперь этот принтер по умолчанию.

Задание 7

Создаём каталог для файлов с информацией о ПК:

mkdir -p /etc/ansible/PC-INFO

Создаём файл плейбука:

nano /etc/ansible/inventory.yml

Содержимое файла:

- hosts: hq-srv hq-cli gather_facts: yes tasks: - name: Saved pc copy: content: | hostname: {{ inventory_hostname }} ip_address: {{ ansible_default_ipv4.address }} dest: /etc/ansible/PC-INFO/{{ inventory_hostname }}.yml delegate_to: localhost

Запускаем плейбук:

ansible-playbook /etc/ansible/inventory.yml

После выполнения плейбука создадутся файлы hq-srv.yml и hq-cli.yml. Проверяем:

ls /etc/ansible/PC-INFO/

Содержимое файлов:

Смотрим содержимое файла hq-srv.yml:

cat /etc/ansible/PC-INFO/hq-srv.yml

Результат:

hostname: hq-srv ip_address: 192.168.0.2

Задание 8 — Fail2ban

Качаем fail2ban на HQ-SRV:

dnf install fail2ban -y

Создаём и заполняем /etc/fail2ban/jail.local:

nano /etc/fail2ban/jail.local
[sshd] enabled = true port = 2027 logpath = /var/log/secure backend = auto maxretry = 3 bantime = 1m
systemctl enable --now fail2ban

Показать забаненные IP:

fail2ban-client status sshd
Шрек

Спасибо за просмотр!

Удачи на экзамене 💪