Добавить в корзинуПозвонить
Найти в Дзене
P@ssw0rd1k

SysA DEM

На bash перед каждым блоком забиваем, это издержки производства так сказать ---------------------------------------------------------------------------------------------- bash # Имя устройства
hostnamectl set-hostname isp.au-team.irpo; exec bash
# enp0s8 → к HQ-RTR (ISP-HQ сеть)
nmcli con mod "Проводное соединение 2" \
connection.id enp0s8 \
ipv4.addresses 172.16.1.1/28 \
ipv4.method manual
nmcli con up enp0s8
# enp0s9 → к BR-RTR (ISP-BR сеть)
nmcli con mod "Проводное соединение 3" \
connection.id enp0s9 \
ipv4.addresses 172.16.2.1/28 \
ipv4.method manual
nmcli con up enp0s9
# Включить маршрутизацию
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p bash # Имя устройства
hostnamectl set-hostname hq-rtr.au-team.irpo; exec bash
# enp0s3 → к ISP
nmcli con mod "Проводное соединение 1" \
connection.id enp0s3 \
ipv4.addresses 172.16.1.2/28 \
ipv4.gateway 172.16.1.1 \
ipv4.method manual
nmcli con up enp0s3
# enp0s8 → к HQ-SW (физический интерфейс, без IP —
Оглавление

-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
config*
config*
config*
config*
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33

================================

Модуль 2

-34
-35
-36
-37
-38
-39
-40
-41
-42

-43
-44
-45
-46
-47
-48
-49
-50
sshpass, никаких портов
sshpass, никаких портов
-52
-53
-54
client*
client*
'::1');
'::1');
-57
-58
1-й порт 2026, 2-й - 80
1-й порт 2026, 2-й - 80
1-й порт 2026, 2-й - 8080
1-й порт 2026, 2-й - 8080
-61
-62
.conf
.conf
-64
-65
-66
-67
wget https://browser.yandex.ru/download/?partner=yabro_corp_full -O yandex-browser-corporate.rpm
wget https://browser.yandex.ru/download/?partner=yabro_corp_full -O yandex-browser-corporate.rpm
-69
-70

Текстовая версия этого безумия

На bash перед каждым блоком забиваем, это издержки производства так сказать

----------------------------------------------------------------------------------------------

Модуль 1

Задание 1. Базовая настройка устройств: имена, IP-адреса, пользователи

🖥️ ISP

bash

# Имя устройства
hostnamectl set-hostname isp.au-team.irpo; exec bash

# enp0s8 → к HQ-RTR (ISP-HQ сеть)
nmcli con mod "Проводное соединение 2" \
connection.id enp0s8 \
ipv4.addresses 172.16.1.1/28 \
ipv4.method manual
nmcli con up enp0s8

# enp0s9 → к BR-RTR (ISP-BR сеть)
nmcli con mod "Проводное соединение 3" \
connection.id enp0s9 \
ipv4.addresses 172.16.2.1/28 \
ipv4.method manual
nmcli con up enp0s9

# Включить маршрутизацию
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p

🖥️ HQ-RTR

bash

# Имя устройства
hostnamectl set-hostname hq-rtr.au-team.irpo; exec bash

# enp0s3 → к ISP
nmcli con mod "Проводное соединение 1" \
connection.id enp0s3 \
ipv4.addresses 172.16.1.2/28 \
ipv4.gateway 172.16.1.1 \
ipv4.method manual
nmcli con up enp0s3

# enp0s8 → к HQ-SW (физический интерфейс, без IP — будет trunk)
nmcli con mod "Проводное соединение 2" connection.id enp0s8 ipv4.method disabled
nmcli con up enp0s8

# Включить маршрутизацию
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p

# Создать пользователя net_admin
useradd -m -s /bin/bash net_admin
echo "net_admin:P@\$\$word" | chpasswd
echo "net_admin ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers

🖥️ BR-RTR

bash

# Имя устройства
hostnamectl set-hostname br-rtr.au-team.irpo; exec bash

# enp0s3 → к ISP-BR
nmcli con mod "Проводное соединение 1" \
connection.id enp0s3 \
ipv4.addresses 172.16.2.2/28 \
ipv4.gateway 172.16.2.1 \
ipv4.method manual
nmcli con up enp0s3

# enp0s8 → к BR-SRV
nmcli con mod "Проводное соединение 2" \
connection.id enp0s8 \
ipv4.addresses 192.168.4.1/28 \
ipv4.method manual
nmcli con up enp0s8

# Включить маршрутизацию
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p

# Создать пользователя net_admin
useradd -m -s /bin/bash net_admin
echo "net_admin:P@\$\$word" | chpasswd
echo "net_admin ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers

🖥️ HQ-SRV

bash

# Имя устройства
hostnamectl set-hostname hq-srv.au-team.irpo; exec bash

# enp0s3 → в VLAN100 (SRV-Net)
nmcli con mod "Проводное соединение 1" \
connection.id enp0s3 \
ipv4.addresses 192.168.1.2/27 \
ipv4.gateway 192.168.1.1 \
ipv4.dns 192.168.1.2 \
ipv4.method manual
nmcli con up enp0s3

# Создать пользователя sshuser (uid=1010)
useradd -m -u 1010 -s /bin/bash sshuser
echo "sshuser:P@ssw0rd" | chpasswd
echo "sshuser ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers

🖥️ HQ-CLI

bash

# Имя устройства
hostnamectl set-hostname hq-cli.au-team.irpo; exec bash

# Убеждаемся, что enp0s3 получает адрес по DHCP (настроим DHCP-сервер в Задании 6)
nmcli con mod "Проводное соединение 1" \
connection.id enp0s3 \
ipv4.method auto
nmcli con up enp0s3

🖥️ BR-SRV

bash

# Имя устройства
hostnamectl set-hostname br-srv.au-team.irpo; exec bash

# enp0s3 → в сеть BR
nmcli con mod "Проводное соединение 1" \
connection.id enp0s3 \
ipv4.addresses 192.168.4.2/28 \
ipv4.gateway 192.168.4.1 \
ipv4.dns 192.168.1.2 \
ipv4.method manual
nmcli con up enp0s3

# Создать пользователя sshuser (uid=1010)
useradd -m -u 1010 -s /bin/bash sshuser
echo "sshuser:P@ssw0rd" | chpasswd
echo "sshuser ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers

Задание 2. Настройка VLAN (HQ-RTR + HQ-SW)

Сервер HQ-SRV → VLAN100, клиент HQ-CLI → VLAN200, управление → VLAN999.

🖥️ HQ-RTR — создание subinterfaces (router-on-a-stick)

bash

# VLAN100 — SRV-Net (192.168.1.0/27)
nmcli con add type vlan \
con-name enp0s8.100 \
dev enp0s8 \
id 100 \
ipv4.addresses 192.168.1.1/27 \
ipv4.method manual
nmcli con up enp0s8.100

# VLAN200 — CLI-Net (192.168.2.0/28)
nmcli con add type vlan \
con-name enp0s8.200 \
dev enp0s8 \
id 200 \
ipv4.addresses 192.168.2.1/28 \
ipv4.method manual
nmcli con up enp0s8.200

# VLAN999 — HQ-Net управление (192.168.3.0/29)
nmcli con add type vlan \
con-name enp0s8.999 \
dev enp0s8 \
id 999 \
ipv4.addresses 192.168.3.1/29 \
ipv4.method manual
nmcli con up enp0s8.999

🖥️ HQ-SW — настройка коммутатора (ALT Linux как bridge)

bash

hostnamectl set-hostname hq-sw.au-team.irpo; exec bash

# Устанавливаем необходимые утилиты
apt-get install -y bridge-utils

# Создаём bridge с поддержкой VLAN-фильтрации
ip link add name br0 type bridge
ip link set br0 type bridge vlan_filtering 1
ip link set br0 up

# Поднимаем физические интерфейсы и добавляем в bridge:
# enp0s3 — trunk к HQ-RTR
ip link set enp0s3 up
ip link set enp0s3 master br0

# enp0s4 — access к HQ-SRV (VLAN100)
ip link set enp0s4 up
ip link set enp0s4 master br0

# enp0s5 — access к HQ-CLI (VLAN200)
ip link set enp0s5 up
ip link set enp0s5 master br0

# Настраиваем trunk-порт (enp0s3 → HQ-RTR)
bridge vlan del dev enp0s3 vid 1
bridge vlan add dev enp0s3 vid 100
bridge vlan add dev enp0s3 vid 200
bridge vlan add dev enp0s3 vid 999

# Настраиваем access-порт для HQ-SRV (VLAN100)
bridge vlan del dev enp0s4 vid 1
bridge vlan add dev enp0s4 vid 100 pvid untagged

# Настраиваем access-порт для HQ-CLI (VLAN200)
bridge vlan del dev enp0s5 vid 1
bridge vlan add dev enp0s5 vid 200 pvid untagged

# Добавляем IP для управления коммутатором (VLAN999)
ip link add link br0 name br0.999 type vlan id 999
ip addr add 192.168.3.2/29 dev br0.999
ip link set br0.999 up
ip route add default via 192.168.3.1

# Сохраняем конфигурацию через rc.local или systemd
cat >> /etc/rc.local << 'EOF'
ip link add name br0 type bridge
ip link set br0 type bridge vlan_filtering 1
ip link set br0 up
ip link set enp0s3 up
ip link set enp0s3 master br0
ip link set enp0s4 up
ip link set enp0s4 master br0
ip link set enp0s5 up
ip link set enp0s5 master br0
bridge vlan del dev enp0s3 vid 1
bridge vlan add dev enp0s3 vid 100
bridge vlan add dev enp0s3 vid 200
bridge vlan add dev enp0s3 vid 999
bridge vlan del dev enp0s4 vid 1
bridge vlan add dev enp0s4 vid 100 pvid untagged
bridge vlan del dev enp0s5 vid 1
bridge vlan add dev enp0s5 vid 200 pvid untagged
ip link add link br0 name br0.999 type vlan id 999
ip addr add 192.168.3.2/29 dev br0.999
ip link set br0.999 up
EOF
chmod +x /etc/rc.local

Задание 3. Настройка GRE-туннеля между HQ-RTR и BR-RTR

Туннель: 10.10.10.0/30 — HQ-RTR: 10.10.10.1, BR-RTR: 10.10.10.2.

🖥️ HQ-RTR

bash

# Создаём GRE-туннель
ip tunnel add tun0 mode gre \
local 172.16.1.2 \
remote 172.16.2.2 \
ttl 64

ip link set tun0 up
ip addr add 10.10.10.1/30 dev tun0

# Делаем постоянным через файл конфигурации nmcli
nmcli con add type ip-tunnel \
con-name tun0 \
ifname tun0 \
tunnel.mode gre \
tunnel.local 172.16.1.2 \
tunnel.remote 172.16.2.2 \
ipv4.addresses 10.10.10.1/30 \
ipv4.method manual
nmcli con up tun0

🖥️ BR-RTR

bash

# Создаём GRE-туннель
ip tunnel add tun0 mode gre \
local 172.16.2.2 \
remote 172.16.1.2 \
ttl 64

ip link set tun0 up
ip addr add 10.10.10.2/30 dev tun0

# Делаем постоянным
nmcli con add type ip-tunnel \
con-name tun0 \
ifname tun0 \
tunnel.mode gre \
tunnel.local 172.16.2.2 \
tunnel.remote 172.16.1.2 \
ipv4.addresses 10.10.10.2/30 \
ipv4.method manual
nmcli con up tun0

# Проверка туннеля
ping -c 3 10.10.10.1

Задание 4. Динамическая маршрутизация OSPF (через FRR)

Выбор обоснован: OSPF — link-state протокол, масштабируемый, поддерживает разбиение на зоны. Маршруты передаются только через туннельный интерфейс, с парольной защитой.

🖥️ HQ-RTR

bash

# Устанавливаем FRR
apt-get install -y frr

# Включаем ospfd
sed -i 's/ospfd=no/ospfd=yes/' /etc/frr/daemons

systemctl enable --now frr

# Настраиваем OSPF
vtysh << 'EOF'
conf t
router ospf
passive-interface default
network 192.168.1.0/27 area 0
network 192.168.2.0/28 area 0
network 192.168.3.0/29 area 0
network 10.10.10.0/30 area 0
exit

interface tun0
no ip ospf passive
ip ospf authentication message-digest
ip ospf message-digest-key 1 md5 P@ssw0rd
ip ospf network point-to-point
exit

do write memory
exit
EOF

🖥️ BR-RTR

bash

# Устанавливаем FRR
apt-get install -y frr

# Включаем ospfd
sed -i 's/ospfd=no/ospfd=yes/' /etc/frr/daemons

systemctl enable --now frr

# Настраиваем OSPF
vtysh << 'EOF'
conf t
router ospf
passive-interface default
network 192.168.4.0/28 area 0
network 10.10.10.0/30 area 0
exit

interface tun0
no ip ospf passive
ip ospf authentication message-digest
ip ospf message-digest-key 1 md5 P@ssw0rd
ip ospf network point-to-point
exit

do write memory
exit
EOF

# Проверка
vtysh -c "show ip ospf neighbor"
vtysh -c "show ip route ospf"

Задание 5. NAT (Masquerade) — выход в интернет

🖥️ ISP — NAT для HQ-RTR и BR-RTR

bash

# Устанавливаем nftables
apt-get install -y nftables
systemctl enable --now nftables

# Создаём правила NAT
nft add table ip nat
nft add chain ip nat POSTROUTING '{ type nat hook postrouting priority 100; }'

# Masquerade для HQ-RTR (172.16.1.0/28 → интернет через enp0s3)
nft add rule ip nat POSTROUTING oif "enp0s3" ip saddr 172.16.1.0/28 masquerade

# Masquerade для BR-RTR (172.16.2.0/28 → интернет через enp0s3)
nft add rule ip nat POSTROUTING oif "enp0s3" ip saddr 172.16.2.0/28 masquerade

# Сохраняем
nft list ruleset > /etc/nftables/nftables.nft

🖥️ HQ-RTR — NAT для внутренних сетей HQ

bash

# NAT для выхода клиентов HQ в интернет через enp0s3
nft add table ip nat
nft add chain ip nat POSTROUTING '{ type nat hook postrouting priority 100; }'
nft add rule ip nat POSTROUTING oif "enp0s3" ip saddr 192.168.1.0/27 masquerade
nft add rule ip nat POSTROUTING oif "enp0s3" ip saddr 192.168.2.0/28 masquerade
nft add rule ip nat POSTROUTING oif "enp0s3" ip saddr 192.168.3.0/29 masquerade

systemctl enable --now nftables
nft list ruleset > /etc/nftables/nftables.nft

🖥️ BR-RTR — NAT для внутренней сети BR

bash

# NAT для выхода BR-SRV в интернет
nft add table ip nat
nft add chain ip nat POSTROUTING '{ type nat hook postrouting priority 100; }'
nft add rule ip nat POSTROUTING oif "enp0s3" ip saddr 192.168.4.0/28 masquerade

systemctl enable --now nftables
nft list ruleset > /etc/nftables/nftables.nft

Задание 6. DHCP-сервер на HQ-RTR (для HQ-CLI, VLAN200)

🖥️ HQ-RTR

bash

# Устанавливаем DHCP-сервер
apt-get install -y dhcp-server

# Редактируем конфигурацию DHCP
cat > /etc/dhcp/dhcpd.conf << 'EOF'
default-lease-time 600;
max-lease-time 7200;

subnet 192.168.2.0 netmask 255.255.255.240 {
range 192.168.2.2 192.168.2.14;
option routers 192.168.2.1;
option domain-name-servers 192.168.1.2;
option domain-name "au-team.irpo";
}
EOF

# Указываем интерфейс для DHCP (enp0s8.200 — VLAN200)
# В ALT Linux указывается в /etc/sysconfig/dhcpd
echo 'DHCPDARGS="enp0s8.200"' > /etc/sysconfig/dhcpd

systemctl enable --now dhcpd

# Проверка
systemctl status dhcpd

Задание 7. Настройка SSH на всех устройствах

На серверах SSH работает на порту 2026.

🖥️ HQ-SRV

bash

# Редактируем конфиг SSH
sed -i 's/#Port 22/Port 2026/' /etc/ssh/sshd_config
sed -i 's/#PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config
sed -i 's/#PubkeyAuthentication yes/PubkeyAuthentication yes/' /etc/ssh/sshd_config

systemctl enable --now sshd
systemctl restart sshd

# Проверка
ss -tlnp | grep 2026

🖥️ BR-SRV

bash

sed -i 's/#Port 22/Port 2026/' /etc/ssh/sshd_config
sed -i 's/#PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config

systemctl enable --now sshd
systemctl restart sshd

ss -tlnp | grep 2026

🖥️ HQ-RTR и BR-RTR (стандартный порт 22, только для net_admin)

bash

# Оба маршрутизатора — одинаковая настройка
sed -i 's/#PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config
# Оставляем порт 22 на маршрутизаторах
systemctl enable --now sshd
systemctl restart sshd

Задание 8. Синхронизация времени (Chrony)

HQ-RTR — NTP-сервер stratum 5. Клиенты: HQ-SRV, HQ-CLI, BR-RTR, BR-SRV.

🖥️ HQ-RTR — сервер chrony

bash

apt-get install -y chrony

cat > /etc/chrony.conf << 'EOF'
# Публичные NTP-серверы для синхронизации самого HQ-RTR
pool pool.ntp.org iburst

# Локальный stratum 5 (если нет внешнего времени)
local stratum 5

# Разрешаем клиентам из внутренних сетей
allow 192.168.1.0/27
allow 192.168.2.0/28
allow 192.168.3.0/29
allow 192.168.4.0/28
allow 10.10.10.0/30

makestep 1.0 3
rtcsync
EOF

systemctl enable --now chronyd
systemctl restart chronyd

# Проверка
chronyc tracking
chronyc sources

🖥️ HQ-SRV — клиент chrony

bash

apt-get install -y chrony

cat > /etc/chrony.conf << 'EOF'
server 192.168.1.1 iburst
makestep 1.0 3
rtcsync
EOF

systemctl enable --now chronyd
systemctl restart chronyd
chronyc sources

🖥️ HQ-CLI — клиент chrony

bash

apt-get install -y chrony

cat > /etc/chrony.conf << 'EOF'
server 192.168.2.1 iburst
makestep 1.0 3
rtcsync
EOF

systemctl enable --now chronyd
systemctl restart chronyd

🖥️ BR-RTR — клиент chrony (через туннель)

bash

apt-get install -y chrony

cat > /etc/chrony.conf << 'EOF'
server 10.10.10.1 iburst
makestep 1.0 3
rtcsync
EOF

systemctl enable --now chronyd
systemctl restart chronyd
chronyc sources

🖥️ BR-SRV — клиент chrony

bash

apt-get install -y chrony

cat > /etc/chrony.conf << 'EOF'
server 192.168.4.1 iburst
makestep 1.0 3
rtcsync
EOF

systemctl enable --now chronyd
systemctl restart chronyd

Задание 9. Настройка DNS-сервера на HQ-SRV (bind9)

DNS-сервер для зоны au-team.irpo, обратное разрешение, пересылка на 8.8.8.8.

🖥️ HQ-SRV

bash

apt-get install -y bind bind-utils

# Основной конфиг named.conf
cat > /etc/bind/named.conf << 'EOF'
options {
directory "/var/bind";
forwarders { 8.8.8.8; };
listen-on { any; };
allow-query { any; };
recursion yes;
};

zone "au-team.irpo" IN {
type master;
file "/etc/bind/au-team.irpo.zone";
};

zone "1.168.192.in-addr.arpa" IN {
type master;
file "/etc/bind/192.168.1.rev";
};

zone "2.168.192.in-addr.arpa" IN {
type master;
file "/etc/bind/192.168.2.rev";
};

zone "4.168.192.in-addr.arpa" IN {
type master;
file "/etc/bind/192.168.4.rev";
};
EOF

# Прямая зона au-team.irpo
cat > /etc/bind/au-team.irpo.zone << 'EOF'
$TTL 86400
@ IN SOA hq-srv.au-team.irpo. admin.au-team.irpo. (
2026041701 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ) ; Minimum TTL

@ IN NS hq-srv.au-team.irpo.

isp IN A 172.16.1.1
hq-rtr IN A 172.16.1.2
hq-srv IN A 192.168.1.2
hq-cli IN A 192.168.2.2
br-rtr IN A 172.16.2.2
br-srv IN A 192.168.4.2
EOF

# Обратная зона для сети 192.168.1.0/27
cat > /etc/bind/192.168.1.rev << 'EOF'
$TTL 86400
@ IN SOA hq-srv.au-team.irpo. admin.au-team.irpo. (
2026041701
3600
1800
604800
86400 )

@ IN NS hq-srv.au-team.irpo.
1 IN PTR hq-rtr.au-team.irpo.
2 IN PTR hq-srv.au-team.irpo.
EOF

# Обратная зона для сети 192.168.2.0/28
cat > /etc/bind/192.168.2.rev << 'EOF'
$TTL 86400
@ IN SOA hq-srv.au-team.irpo. admin.au-team.irpo. (
2026041701
3600
1800
604800
86400 )

@ IN NS hq-srv.au-team.irpo.
1 IN PTR hq-rtr.au-team.irpo.
2 IN PTR hq-cli.au-team.irpo.
EOF

# Обратная зона для сети 192.168.4.0/28
cat > /etc/bind/192.168.4.rev << 'EOF'
$TTL 86400
@ IN SOA hq-srv.au-team.irpo. admin.au-team.irpo. (
2026041701
3600
1800
604800
86400 )

@ IN NS hq-srv.au-team.irpo.
1 IN PTR br-rtr.au-team.irpo.
2 IN PTR br-srv.au-team.irpo.
EOF

# Проверяем конфигурацию и запускаем
named-checkconf /etc/bind/named.conf
named-checkzone au-team.irpo /etc/bind/au-team.irpo.zone
named-checkzone 1.168.192.in-addr.arpa /etc/bind/192.168.1.rev

systemctl enable --now named
systemctl restart named

# Проверка
nslookup hq-srv.au-team.irpo 127.0.0.1
nslookup 192.168.1.2 127.0.0.1

Задание 10. Настройка брандмауэра (nftables) — ограничение доступа по SSH

Доступ к HQ-SRV по SSH (порт 2026) — только с разрешённых адресов, не с HQ-CLI.

🖥️ HQ-SRV

bash

apt-get install -y nftables
systemctl enable --now nftables

# Создаём таблицу фильтрации
nft add table inet filter
nft add chain inet filter INPUT '{ type filter hook input priority 0; policy accept; }'

# Запрещаем SSH к HQ-SRV с HQ-CLI (сеть 192.168.2.0/28)
nft add rule inet filter INPUT \
ip saddr 192.168.2.0/28 tcp dport 2026 counter drop

# Разрешаем SSH со всех остальных
nft add rule inet filter INPUT \
tcp dport 2026 counter accept

# Разрешаем ICMP (ping)
nft add rule inet filter INPUT icmp type echo-request counter accept

# Разрешаем установленные соединения
nft add rule inet filter INPUT ct state established,related counter accept

# Сохраняем
nft list ruleset > /etc/nftables/nftables.nft
systemctl restart nftables

# Проверка
nft list ruleset

Задание 11. Статическая трансляция портов (DNAT) на маршрутизаторах

🖥️ HQ-RTR — проброс портов к HQ-SRV

Порт 2026 → 2026 (SSH) и 8080 → 80 (веб).

bash

# Создаём таблицу NAT если ещё нет
nft add table ip nat
nft add chain ip nat PREROUTING '{ type nat hook prerouting priority 0; }'

# Проброс SSH: внешний 172.16.1.2:2026 → HQ-SRV 192.168.1.2:2026
nft add rule ip nat PREROUTING \
ip daddr 172.16.1.2 tcp dport 2026 dnat to 192.168.1.2:2026

# Проброс веб-приложения: внешний 172.16.1.2:8080 → HQ-SRV 192.168.1.2:80
nft add rule ip nat PREROUTING \
ip daddr 172.16.1.2 tcp dport 8080 dnat to 192.168.1.2:80

# Сохраняем
nft list ruleset > /etc/nftables/nftables.nft
systemctl restart nftables

# Проверка
nft list ruleset

🖥️ BR-RTR — проброс портов к BR-SRV

Порт 2026 → 2026 (SSH) и 8080 → 8080 (testapp).

bash

# Создаём таблицу NAT
nft add table ip nat
nft add chain ip nat PREROUTING '{ type nat hook prerouting priority 0; }'

# Проброс SSH: внешний 172.16.2.2:2026 → BR-SRV 192.168.4.2:2026
nft add rule ip nat PREROUTING \
ip daddr 172.16.2.2 tcp dport 2026 dnat to 192.168.4.2:2026

# Проброс testapp: внешний 172.16.2.2:8080 → BR-SRV 192.168.4.2:8080
nft add rule ip nat PREROUTING \
ip daddr 172.16.2.2 tcp dport 8080 dnat to 192.168.4.2:8080

# Сохраняем
nft list ruleset > /etc/nftables/nftables.nft
systemctl restart nftables

======================================================

Модуль 2

Задание 1. Контроллер домена Samba DC на сервере BR-SRV

Настраиваем домен au-team.irpo, вводим в него HQ-CLI, создаём 5 пользователей hquser1–hquser5, группу hq, настраиваем привилегии sudo только для команд cat, grep, id.

🖥️ BR-SRV

bash

# Устанавливаем пакеты Samba DC
apt-get install -y task-samba-dc

# Останавливаем службы, которые будут мешать
systemctl stop samba smb nmb winbind
systemctl disable samba smb nmb winbind

# Удаляем старые конфиги
rm -f /etc/samba/smb.conf
rm -rf /var/lib/samba/*
rm -rf /var/cache/samba/*
mkdir -p /var/lib/samba/sysvol

# Настраиваем hostname с FQDN
hostnamectl set-hostname br-srv.au-team.irpo; exec bash

bash

# Редактируем /etc/hosts
cat > /etc/hosts << 'EOF'
127.0.0.1 localhost
192.168.4.2 br-srv.au-team.irpo br-srv
EOF

# Настройка DNS — указываем себя
cat > /etc/resolv.conf << 'EOF'
search au-team.irpo
nameserver 192.168.4.2
EOF

# Запрещаем NetworkManager перезаписывать resolv.conf
chattr +i /etc/resolv.conf

bash

# Провижинг домена
samba-tool domain provision \
--realm=AU-TEAM.IRPO \
--domain=AU-TEAM \
--adminpass='P@ssw0rd' \
--server-role=dc \
--dns-backend=SAMBA_INTERNAL \
--use-rfc2307

# Копируем Kerberos-конфиг
cp /var/lib/samba/private/krb5.conf /etc/krb5.conf

# Включаем автозапуск
systemctl enable --now samba
systemctl status samba

bash

# Создаём 5 пользователей hquser1...hquser5
for i in 1 2 3 4 5; do
samba-tool user create hquser$i P@ssw0rd --given-name="HQ User $i"
done

# Создаём группу hq
samba-tool group add hq

# Добавляем пользователей в группу
for i in 1 2 3 4 5; do
samba-tool group addmembers hq hquser$i
done

# Проверка
samba-tool user list
samba-tool group listmembers hq

bash

# Проверка DNS
host -t SRV _kerberos._udp.au-team.irpo 127.0.0.1
host -t SRV _ldap._tcp.au-team.irpo 127.0.0.1
host -t A br-srv.au-team.irpo 127.0.0.1

🖥️ HQ-CLI — ввод в домен

bash

# Устанавливаем пакеты клиента
apt-get install -y task-auth-ad-sssd admc samba-client

# Редактируем /etc/hosts
cat > /etc/hosts << 'EOF'
127.0.0.1 localhost
192.168.4.2 br-srv.au-team.irpo br-srv
EOF

# Указываем DNS-сервер домена
cat > /etc/resolv.conf << 'EOF'
search au-team.irpo
nameserver 192.168.4.2
EOF
chattr +i /etc/resolv.conf

# Настройка hostname
hostnamectl set-hostname hq-cli.au-team.irpo; exec bash

bash

# Присоединение к домену
system-auth write ad au-team.irpo hq-cli au-team 'Administrator' 'P@ssw0rd'

# Включаем автомонтирование домашних папок и создание директории
control system-auth sss
systemctl enable --now sssd

bash

# Проверяем, что пользователь домена виден
getent passwd hquser1@au-team.irpo
id hquser1@au-team.irpo

bash

# Настраиваем sudoers для группы hq — только cat, grep, id
cat > /etc/sudoers.d/hq-group << 'EOF'
%hq@au-team.irpo ALL=(ALL) NOPASSWD: /usr/bin/cat, /usr/bin/grep, /usr/bin/id
EOF
chmod 440 /etc/sudoers.d/hq-group

Задание 2. Файловое хранилище RAID 0 на сервере HQ-SRV

Из двух дисков по 1 Гб собираем массив RAID 0, имя устройства md0, файловая система ext4, автомонтирование в /raid.

🖥️ HQ-SRV

bash

# Устанавливаем утилиту mdadm
apt-get install -y mdadm

# Смотрим доступные диски
lsblk
fdisk -l

bash

# Создаём RAID 0 массив из дисков /dev/sdb и /dev/sdc
mdadm --create --verbose /dev/md0 \
--level=0 \
--raid-devices=2 \
/dev/sdb /dev/sdc

# Проверяем статус
cat /proc/mdstat
mdadm --detail /dev/md0

bash

# Сохраняем конфигурацию массива
mdadm --detail --scan >> /etc/mdadm.conf
cat /etc/mdadm.conf

bash

# Создаём раздел на md0
parted /dev/md0 --script mklabel gpt
parted /dev/md0 --script mkpart primary ext4 0% 100%

# Форматируем в ext4
mkfs.ext4 /dev/md0p1

bash

# Создаём точку монтирования
mkdir -p /raid

# Добавляем в /etc/fstab для автомонтирования
echo "/dev/md0p1 /raid ext4 defaults 0 0" >> /etc/fstab

# Монтируем
mount -a
df -h /raid

Задание 3. NFS-сервер на HQ-SRV

Папка общего доступа /raid/nfs, доступ только для сети HQ-CLI (VLAN200 — 192.168.2.0/28), на HQ-CLI автомонтирование в /mnt/nfs.

🖥️ HQ-SRV — сервер NFS

bash

# Устанавливаем пакеты NFS
apt-get install -y nfs-server nfs-utils

# Создаём каталог общего доступа
mkdir -p /raid/nfs
chmod 777 /raid/nfs
chown nobody:nobody /raid/nfs

bash

# Настраиваем /etc/exports
cat > /etc/exports << 'EOF'
/raid/nfs 192.168.2.0/28(rw,sync,no_subtree_check,no_root_squash)
EOF

# Применяем экспорты
exportfs -arv

# Запускаем сервер
systemctl enable --now nfs-server
systemctl enable --now rpcbind

# Проверка
showmount -e localhost

bash

# Разрешаем NFS в firewall (если нужно)
nft add rule inet filter INPUT ip saddr 192.168.2.0/28 tcp dport {111,2049} accept
nft add rule inet filter INPUT ip saddr 192.168.2.0/28 udp dport {111,2049} accept
nft list ruleset > /etc/nftables/nftables.nft

🖥️ HQ-CLI — клиент NFS (автомонтирование)

bash

# Устанавливаем пакеты клиента
apt-get install -y nfs-clients autofs

# Создаём точку монтирования
mkdir -p /mnt/nfs

bash

# Настраиваем autofs
cat >> /etc/auto.master << 'EOF'
/mnt /etc/auto.nfs --timeout=60
EOF

cat > /etc/auto.nfs << 'EOF'
nfs -fstype=nfs,rw,soft,intr 192.168.1.2:/raid/nfs
EOF

# Перезапускаем autofs
systemctl enable --now autofs
systemctl restart autofs

# Проверка — доступ к каталогу инициирует автомонтирование
ls /mnt/nfs
mount | grep nfs

Задание 4. DNS-сервер на HQ-SRV — дополнительные зоны

Настраиваем DNS для домена au-team.irpo с записями о веб-сервисах (web, docker, moodle).

🖥️ HQ-SRV

bash

# Устанавливаем BIND
apt-get install -y bind bind-utils

# Настраиваем options.conf
cat > /etc/bind/options.conf << 'EOF'
options {
directory "/var/lib/bind/zone";
forwarders { 8.8.8.8; 1.1.1.1; };
listen-on { any; };
allow-query { any; };
recursion yes;
dnssec-validation no;
allow-transfer { none; };
};
EOF

bash

# Описываем зоны
cat > /etc/bind/local.conf << 'EOF'
zone "au-team.irpo" IN {
type master;
file "au-team.irpo.zone";
allow-update { none; };
};

zone "1.168.192.in-addr.arpa" IN {
type master;
file "192.168.1.rev";
};
EOF

bash

# Прямая зона
cat > /var/lib/bind/zone/au-team.irpo.zone << 'EOF'
$TTL 86400
@ IN SOA hq-srv.au-team.irpo. admin.au-team.irpo. (
2026041701 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ) ; Minimum

@ IN NS hq-srv.au-team.irpo.

isp IN A 172.16.1.1
hq-rtr IN A 192.168.1.1
hq-srv IN A 192.168.1.2
hq-cli IN A 192.168.2.2
br-rtr IN A 192.168.4.1
br-srv IN A 192.168.4.2

; Веб-сервисы
web IN A 172.16.1.1
docker IN A 172.16.1.1
moodle IN CNAME hq-srv.au-team.irpo.
wiki IN CNAME br-srv.au-team.irpo.
EOF

bash

# Обратная зона
cat > /var/lib/bind/zone/192.168.1.rev << 'EOF'
$TTL 86400
@ IN SOA hq-srv.au-team.irpo. admin.au-team.irpo. (
2026041701 3600 1800 604800 86400 )
@ IN NS hq-srv.au-team.irpo.
1 IN PTR hq-rtr.au-team.irpo.
2 IN PTR hq-srv.au-team.irpo.
EOF

bash

# Меняем владельца и запускаем службу
chown -R named:named /var/lib/bind/zone

named-checkconf
named-checkzone au-team.irpo /var/lib/bind/zone/au-team.irpo.zone

systemctl enable --now bind
systemctl restart bind

# Проверка
nslookup hq-srv.au-team.irpo 127.0.0.1
nslookup web.au-team.irpo 127.0.0.1

Задание 5. Ansible на сервере BR-SRV

Инвентарь: HQ-SRV, HQ-CLI, HQ-RTR, BR-RTR. Рабочий каталог /etc/ansible. Проверка: ansible all -m ping → pong от всех машин.

🖥️ BR-SRV — установка и настройка Ansible

bash

# Устанавливаем Ansible
apt-get install -y ansible sshpass

# Генерируем SSH-ключ (если ещё нет)
ssh-keygen -t rsa -b 2048 -N "" -f /root/.ssh/id_rsa

bash

# Создаём рабочий каталог
mkdir -p /etc/ansible

# Формируем файл инвентаря
cat > /etc/ansible/hosts << 'EOF'
[HQ]
hq-srv ansible_host=192.168.1.2 ansible_user=sshuser ansible_ssh_pass=P@ssw0rd ansible_become=yes ansible_become_pass=P@ssw0rd ansible_port=2026
hq-cli ansible_host=192.168.2.2 ansible_user=user ansible_ssh_pass=P@ssw0rd

[RTR]
hq-rtr ansible_host=10.10.10.1 ansible_user=net_admin ansible_ssh_pass=P@$$word ansible_become=yes ansible_become_pass=P@$$word
br-rtr ansible_host=10.10.10.2 ansible_user=net_admin ansible_ssh_pass=P@$$word ansible_become=yes ansible_become_pass=P@$$word

[all:vars]
ansible_python_interpreter=/usr/bin/python3
ansible_ssh_common_args='-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null'
EOF

bash

# Конфигурация ansible.cfg
cat > /etc/ansible/ansible.cfg << 'EOF'
[defaults]
inventory = /etc/ansible/hosts
host_key_checking = False
retry_files_enabled = False
deprecation_warnings = False
command_warnings = False

[ssh_connection]
pipelining = True
EOF

bash

# Копируем SSH-ключ на целевые хосты (чтобы не вводить пароль каждый раз)
sshpass -p 'P@ssw0rd' ssh-copy-id -o StrictHostKeyChecking=no -p 2026 sshuser@192.168.1.2
sshpass -p 'P@$$word' ssh-copy-id -o StrictHostKeyChecking=no net_admin@10.10.10.1
sshpass -p 'P@$$word' ssh-copy-id -o StrictHostKeyChecking=no net_admin@10.10.10.2

bash

# Проверка
ansible all -m ping

Результат должен выглядеть так:

hq-srv | SUCCESS => { "ping": "pong" }
hq-rtr | SUCCESS => { "ping": "pong" }
br-rtr | SUCCESS => { "ping": "pong" }
hq-cli | SUCCESS => { "ping": "pong" }

Задание 6. Docker: стек контейнеров на BR-SRV

Стек из двух контейнеров: testapp (веб-приложение, site_latest) и db (mariadb_latest). БД testdb, пользователь test с паролем Passw0rd, порт приложения 8080.

🖥️ BR-SRV

bash

# Устанавливаем Docker и docker-compose
apt-get install -y docker-engine docker-compose
systemctl enable --now docker

bash

# Монтируем Additional.iso
mkdir -p /mnt/iso
mount -o loop /root/Additional.iso /mnt/iso
ls /mnt/iso/docker

bash

# Импортируем образы в Docker
docker load < /mnt/iso/docker/site_latest.tar
docker load < /mnt/iso/docker/mariadb_latest.tar

# Смотрим список образов
docker images

bash

# Создаём рабочий каталог
mkdir -p /opt/testapp
cd /opt/testapp

# Формируем docker-compose.yml
cat > docker-compose.yml << 'EOF'
version: '3.8'

services:
testapp:
image: site_latest:latest
container_name: testapp
ports:
- "8080:8080"
environment:
- DB_HOST=db
- DB_NAME=testdb
- DB_USER=test
- DB_PASSWORD=Passw0rd
depends_on:
- db
restart: unless-stopped

db:
image: mariadb_latest:latest
container_name: db
environment:
- MYSQL_ROOT_PASSWORD=Passw0rd
- MYSQL_DATABASE=testdb
- MYSQL_USER=test
- MYSQL_PASSWORD=Passw0rd
volumes:
- db_data:/var/lib/mysql
restart: unless-stopped

volumes:
db_data:
EOF

bash

# Запускаем стек
docker-compose up -d

# Проверка
docker ps
docker-compose logs testapp
curl http://localhost:8080

Задание 7. Веб-приложение на HQ-SRV (Apache + MariaDB)

Apache + MariaDB, импорт dump.sql в базу webdb, пользователь web с паролем P@ssw0rd.

🖥️ HQ-SRV

bash

# Устанавливаем Apache, PHP, MariaDB
apt-get install -y apache2 apache2-mod_php7 php7 php7-mysqli mariadb-server mariadb-client

# Запускаем службы
systemctl enable --now httpd2
systemctl enable --now mariadb

bash

# Безопасная настройка MariaDB
mysql -u root << 'EOF'
UPDATE mysql.user SET Password=PASSWORD('P@ssw0rd') WHERE User='root';
DELETE FROM mysql.user WHERE User='';
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
FLUSH PRIVILEGES;
EOF

bash

# Монтируем образ Additional.iso
mkdir -p /mnt/iso
mount -o loop /root/Additional.iso /mnt/iso
ls /mnt/iso/web

bash

# Создаём БД и пользователя web
mysql -u root -p'P@ssw0rd' << 'EOF'
CREATE DATABASE webdb CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'web'@'localhost' IDENTIFIED BY 'P@ssw0rd';
GRANT ALL PRIVILEGES ON webdb.* TO 'web'@'localhost';
FLUSH PRIVILEGES;
EOF

# Импортируем дамп
mysql -u web -p'P@ssw0rd' webdb < /mnt/iso/web/dump.sql

bash

# Копируем файлы веб-приложения
cp /mnt/iso/web/index.php /var/www/html/
cp -r /mnt/iso/web/images /var/www/html/
chown -R apache:apache /var/www/html/
chmod -R 755 /var/www/html/

bash

# Корректируем учётные данные в index.php
sed -i "s/\$db_user.*/\$db_user = 'web';/" /var/www/html/index.php
sed -i "s/\$db_pass.*/\$db_pass = 'P@ssw0rd';/" /var/www/html/index.php
sed -i "s/\$db_name.*/\$db_name = 'webdb';/" /var/www/html/index.php
sed -i "s/\$db_host.*/\$db_host = 'localhost';/" /var/www/html/index.php

# Перезапускаем Apache
systemctl restart httpd2

# Проверка
curl http://localhost/

Задание 8. Статическая трансляция портов (DNAT) на маршрутизаторах

🖥️ HQ-RTR — проброс к HQ-SRV

Порт 2026 → 2026 (SSH на HQ-SRV) и 8080 → 80 (веб-приложение).

bash

# Создаём таблицу NAT и цепочку PREROUTING
nft add table ip nat
nft add chain ip nat PREROUTING '{ type nat hook prerouting priority -100 ; }'

# Проброс SSH: 172.16.1.2:2026 → HQ-SRV 192.168.1.2:2026
nft add rule ip nat PREROUTING ip daddr 172.16.1.2 tcp dport 2026 dnat to 192.168.1.2:2026

# Проброс веб-приложения: 172.16.1.2:8080 → HQ-SRV 192.168.1.2:80
nft add rule ip nat PREROUTING ip daddr 172.16.1.2 tcp dport 8080 dnat to 192.168.1.2:80

# Сохраняем
nft list ruleset > /etc/nftables/nftables.nft
systemctl restart nftables
nft list ruleset

🖥️ BR-RTR — проброс к BR-SRV

Порт 2026 → 2026 (SSH на BR-SRV) и 8080 → 8080 (testapp Docker).

bash

nft add table ip nat
nft add chain ip nat PREROUTING '{ type nat hook prerouting priority -100 ; }'

# Проброс SSH: 172.16.2.2:2026 → BR-SRV 192.168.4.2:2026
nft add rule ip nat PREROUTING ip daddr 172.16.2.2 tcp dport 2026 dnat to 192.168.4.2:2026

# Проброс testapp: 172.16.2.2:8080 → BR-SRV 192.168.4.2:8080
nft add rule ip nat PREROUTING ip daddr 172.16.2.2 tcp dport 8080 dnat to 192.168.4.2:8080

# Сохраняем
nft list ruleset > /etc/nftables/nftables.nft
systemctl restart nftables
nft list ruleset

Задание 9. Nginx как обратный прокси-сервер на ISP

  • web.au-team.irpo → веб-приложение на HQ-SRV (через HQ-RTR)
  • docker.au-team.irpo → testapp на BR-SRV (через BR-RTR)

🖥️ ISP

bash

# Устанавливаем nginx
apt-get install -y nginx

# Создаём директорию для конфигов сайтов, если её ещё нет
mkdir -p /etc/nginx/sites-available
mkdir -p /etc/nginx/sites-enabled

bash

# Конфиг для web.au-team.irpo
cat > /etc/nginx/sites-available/web.conf << 'EOF'
server {
listen 80;
server_name web.au-team.irpo;

location / {
proxy_pass http://172.16.1.2:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
EOF

bash

# Конфиг для docker.au-team.irpo
cat > /etc/nginx/sites-available/docker.conf << 'EOF'
server {
listen 80;
server_name docker.au-team.irpo;

location / {
proxy_pass http://172.16.2.2:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
EOF

bash

# Активируем сайты (создаём симлинки)
ln -sf /etc/nginx/sites-available/web.conf /etc/nginx/sites-enabled/
ln -sf /etc/nginx/sites-available/docker.conf /etc/nginx/sites-enabled/

# Проверяем, что в /etc/nginx/nginx.conf есть подключение sites-enabled
grep -q "sites-enabled" /etc/nginx/nginx.conf || \
sed -i '/http {/a \ include /etc/nginx/sites-enabled/*.conf;' /etc/nginx/nginx.conf

# Проверяем конфиг и запускаем
nginx -t
systemctl enable --now nginx
systemctl restart nginx

bash

# Проверка
curl -H "Host: web.au-team.irpo" http://localhost/
curl -H "Host: docker.au-team.irpo" http://localhost/

Задание 10. Web-based аутентификация на ISP

При обращении к web.au-team.irpo — запрос логина/пароля: WEB / P@ssw0rd. Файл паролей: /etc/nginx/.htpasswd.

🖥️ ISP

bash

# Устанавливаем утилиту для создания .htpasswd
apt-get install -y apache2-htpasswd

# Создаём файл учёток (флаг -c создаёт файл, -b — пароль в командной строке)
htpasswd -b -c /etc/nginx/.htpasswd WEB P@ssw0rd

# Проверяем
cat /etc/nginx/.htpasswd

bash

# Обновляем конфиг web.au-team.irpo, добавив basic auth
cat > /etc/nginx/sites-available/web.conf << 'EOF'
server {
listen 80;
server_name web.au-team.irpo;

auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/.htpasswd;

location / {
proxy_pass http://172.16.1.2:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
EOF

# Проверяем и перезапускаем nginx
nginx -t
systemctl restart nginx

bash

# Проверка — без авторизации должно вернуть 401
curl -H "Host: web.au-team.irpo" http://localhost/

# С авторизацией
curl -H "Host: web.au-team.irpo" -u WEB:P@ssw0rd http://localhost/

Задание 11. Установка Яндекс Браузера для организаций на HQ-CLI

🖥️ HQ-CLI

bash

# Создаём временный каталог
mkdir -p /tmp/yandex
cd /tmp/yandex

# Скачиваем deb-пакет Яндекс Браузера для организаций
wget https://browser.yandex.ru/download/?partner=yabro_corp_full -O yandex-browser-corporate.rpm

# Либо — конвертация из deb в rpm через alien (для ALT Linux)
apt-get install -y alien rpm-build

# Если скачан deb:
# alien --to-rpm yandex-browser-corporate.deb
# rpm -ivh yandex-browser-corporate.rpm

# Установка rpm-пакета
rpm -ivh --nodeps yandex-browser-corporate.rpm

# Либо установка через epm (если доступно)
epm -i yandex-browser-corporate.rpm

bash

# Проверка установки
which yandex-browser
yandex-browser --version

# Запуск браузера от имени пользователя (не от root)
sudo -u user yandex-browser &