================================
Модуль 2
Текстовая версия этого безумия
На 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 &