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: 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. 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. 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. Заходим в «Администрирование». Браузер будет ругаться на https и отсутствие сертификата — нажимаем «Дополнительно» и «Перейти на страницу». Если появится окно входа: логин root, пароль toor.
Страница «Администрирование» CUPS. Нажимаем «Добавить принтер» и выбираем CUPS-PDF (Virtual PDF Printer), затем «Продолжить».
Выбор CUPS-PDF (Virtual PDF Printer). Название: printer. Описание: Virtual PDF Printer. Продолжаем.
Название printer, описание Virtual PDF Printer, подключение cups-pdf:/. Выбираем любую модель и нажимаем «Добавить принтер».
Выбор модели принтера (например, Epson 9-Pin Series). Принтер printer успешно добавлен. Подключение принтера на HQ-CLI В меню «Пуск» ищем «Настройки принтера».
Поиск «принт» в меню: «Настройки принтера». Окно «Настройки принтера»: нет настроенных принтеров (localhost). Наводим курсор на сервер, нажимаем «Добавить» / «Подключиться» и вводим IP сервера CUPS: 192.168.0.2, затем «Подключиться».
Подключение к серверу CUPS: 192.168.0.2 → Подключиться. Появился принтер printer (подключён к 192.168.0.2). ПКМ по принтеру → «Использовать по умолчанию» → подтверждаем.
Диалог «Назначить по умолчанию»: назначить общесистемным по умолчанию. Нажимаем ОК. Появится окно входа: логин sysadmin, пароль P@ssw0rd.
Принтер 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