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

IP-ForwardingOnAltLinuxZXC123

# Имя хоста # https://www.altlinux.org/Настройка_сети hostnamectl set-hostname isp.au-team.irpo; exec bash # Интерфейсы Это первая и очень важная строка, которая идентифицирует машину в сети. В ALT Linux сетевая конфигурация классически хранится не в одном файле, а в директориях для каждого интерфейса внутри /etc/net/ifaces/. cd /etc/net/ifaces mkdir enp7s2 enp7s3 echo TYPE=eth > enp7s2/options echo TYPE=eth > enp7s3/options echo 172.16.1.1/28 > enp7s2/ipv4address #ip по заданию echo 172.16.2.1/28 > enp7s3/ipv4address systemctl restart network Это самый критичный блок. Он позволяет внутренней сети с "серыми" адресами (172.16.x.x) выходить в интернет через внешний интерфейс. # NAT # https://habr.com/ru/sandbox/274318/ nano /etc/net/sysctl.conf net.ipv4.ip_forward = 1 sysctl -p /etc/net/sysctl.conf iptables -t nat -A POSTROUTING -o enp7s1 -j MASQUERADE iptables-save > /etc/sysconfig/iptables systemctl enable --now iptables Зачем это нужно: Обеспечить доступ в интернет для компьютеров из
Оглавление
Таблица данных адресов
Таблица данных адресов
-2

Модуль 1

ISP:

1. Назначение имени компьютера (Hostname)

# Имя хоста

# https://www.altlinux.org/Настройка_сети

hostnamectl set-hostname isp.au-team.irpo; exec bash

# Интерфейсы

Это первая и очень важная строка, которая идентифицирует машину в сети.

  • hostnamectl: Утилита из набора systemd, которая управляет именем хоста в современных дистрибутивах Linux. Она записывает красивое (pretty), статическое и transient-имена.
  • set-hostname isp.au-team.irpo: Устанавливает полное доменное имя (FQDN). Расшифровка имени, вероятно, соответствует заданию (ISP = провайдер, AU-TEAM — команда/организация, IRPO — полигон/домен).
  • exec bash: Эта часть хитрая. hostnamectl меняет имя системы, но текущая сессия терминала «помнит» старое имя в приглашении командной строки. Команда exec bash заменяет текущий процесс оболочки новым, мгновенно обновляя приглашение без необходимости перезаходить в систему.

Настройка сетевых интерфейсов в ALT Linux

В ALT Linux сетевая конфигурация классически хранится не в одном файле, а в директориях для каждого интерфейса внутри /etc/net/ifaces/.

cd /etc/net/ifaces
mkdir enp7s2 enp7s3
echo TYPE=eth > enp7s2/options
echo TYPE=eth > enp7s3/options
echo 172.16.1.1/28 > enp7s2/ipv4address #ip по заданию
echo 172.16.2.1/28 > enp7s3/ipv4address
systemctl restart network
  1. mkdir enp7s2 enp7s3: Создаются папки с именами, соответствующими сетевым адаптерам (enp7s2 и enp7s3). Названия вида enpXsY означают расположение устройства на шине PCI (Slot 7, Functions 2 и 3).
  2. options: В файле указывается тип интерфейса. TYPE=eth означает Ethernet.
  3. ipv4address: Файл содержит статический IP-адрес с префиксом маски подсети.
    172.16.1.1/28: Маска /28 означает 255.255.255.240. Это дает 14 полезных адресов для хостов. Адрес 1 назначен шлюзу.
    172.16.2.1/28: Аналогично для второй подсети.
  4. systemctl restart network: Перезапуск сетевой службы, чтобы применить новые настройки (поднимет созданные интерфейсы).

Настройка трансляции адресов (NAT) и Firewall

Это самый критичный блок. Он позволяет внутренней сети с "серыми" адресами (172.16.x.x) выходить в интернет через внешний интерфейс.

# NAT

# https://habr.com/ru/sandbox/274318/

nano /etc/net/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p /etc/net/sysctl.conf
iptables -t nat -A POSTROUTING -o enp7s1 -j MASQUERADE
iptables-save > /etc/sysconfig/iptables
systemctl enable --now iptables
  1. net.ipv4.ip_forward = 1: По умолчанию ядро Linux, получив пакет, предназначенный не ему, отбрасывает его. Параметр ip_forward превращает машину в маршрутизатор. Пакет, пришедший на enp7s2 и адресованный в интернет, будет отправлен на дальнейшую обработку, а не в корзину.
  2. iptables -t nat -A POSTROUTING -o enp7s1 -j MASQUERADE: Главное правило жизни сети.
    -t nat: Работаем с таблицей трансляции адресов.
    -A POSTROUTING: Добавляем правило в цепочку, которая обрабатывает пакеты непосредственно перед выходом из сетевой карты.
    -o enp7s1: Применяем правило только к пакетам, выходящим через интерфейс enp7s1 (вероятно, это внешний порт, смотрящий в сторону провайдера).
    -j MASQUERADE (Маскарадинг): Заменяет исходный IP-адрес пакета (например, 172.16.1.10) на адрес внешнего интерфейса шлюза (enp7s1). Когда ответ придет обратно, шлюз вспомнит, какому внутреннему компьютеру его переслать.
  3. iptables-save > /etc/sysconfig/iptables: Сохраняет все текущие правила файрвола в файл. Без этого после перезагрузки правило маскарадинга пропадет.
  4. systemctl enable --now iptables: Включает службу iptables в автозагрузку и запускает её прямо сейчас. Служба при старте как раз восстанавливает правила из сохраненного файла.

Зачем это нужно: Обеспечить доступ в интернет для компьютеров из подсетей 172.16.1.0/28 и 172.16.2.0/28, не имея "белых" IP-адресов на каждом из них.

4. Установка часового пояса

# Часовой пояс

apt-get install tzdata -y
timedatectl set-timezone Europe/Moscow
timedatectl status

Зачем это нужно: Чтобы логи записывались с правильным местным временем. Если время на сервере будет неверным, можно пропустить инцидент безопасности или запутаться при анализе логов (например, в 3 часа ночи по UTC, когда в Москве уже 6 утра).

HQ-RTR:

1. Имя хоста

# Имя хоста:

hostnamectl hostname hq-rtr.au-team.irpo; exec bash

# Интерфейсы:

2. Сетевые интерфейсы и VLAN

Это ключевой раздел, реализующий сегментацию сети.

cd /etc/net/ifaces
mkdir enp7s2 enp7s2.100 enp7s2.200 enp7s2.999 gre1 #vlan по заданию
  • enp7s2: Базовый физический интерфейс (trunk-порт).
  • enp7s2.100: Суб-интерфейс для VLAN 100 (сеть управления).
  • enp7s2.200: Суб-интерфейс для VLAN 200 (пользовательская сеть).
  • enp7s2.999: Суб-интерфейс для VLAN 999 (служебная сеть, часто для телефонии или WiFi).
  • gre1: Интерфейс для туннеля GRE.

Конфигурация интерфейсов:

echo TYPE=eth > enp7s1/options
echo TYPE=eth > enp7s2/options
echo TYPE=vlan HOST=enp7s2 VID=100 > enp7s2.100/options
echo TYPE=vlan HOST=enp7s2 VID=200 > enp7s2.200/options
echo TYPE=vlan HOST=enp7s2 VID=999 > enp7s2.999/options
  • TYPE=vlan: Указывает, что это виртуальный VLAN-интерфейс.
  • HOST=enp7s2: Привязка к родительскому физическому интерфейсу.
  • VID=100/200/999: Идентификатор VLAN (тег 802.1Q).
  • Замечание: В выводе ошибка — enp7s1/options создается для уже существующего интерфейса, но это не страшно.

Назначение IP-адресов:

echo 172.16.1.2/28 > enp7s1/ipv4address
echo 192.168.100.1/29 > enp7s2.100/ipv4address #маски по заданию
echo 192.168.200.1/24 > enp7s2.200/ipv4address
echo 192.168.99.1/29 > enp7s2.999/ipv4address

Маршрут по умолчанию и DNS:

echo default via 172.16.1.1 > enp7s1/ipv4route
echo nameserver 8.8.8.8 > enp7s1/resolv.conf
  • Весь трафик во внешние сети отправляется через шлюз провайдера 172.16.1.1 (ISP).
  • Временно используется публичный DNS Google 8.8.8.8, пока не поднимется локальный сервер

3. GRE-туннель (HQ-RTR ↔ BR-RTR)

# GRE-туннель

https://www.altlinux.org/Strongswan#Создание_GRE-интерфейса_(RTR-1)

echo "TYPE=iptun
TUNTYPE=gre
TUNLOCAL=172.16.1.2
TUNREMOTE=172.16.2.2
TUNTTL=64
TUNOPTIONS='ttl 64'" > gre1/options
echo 192.168.255.1/30 > gre1/ipv4address
systemctl restart network

Разбор параметров:

  • TYPE=iptun: IP-туннель.
  • TUNTYPE=gre: Generic Routing Encapsulation — простой протокол туннелирования (без шифрования).
  • TUNLOCAL=172.16.1.2: Локальная конечная точка туннеля (WAN-адрес HQ-RTR).
  • TUNREMOTE=172.16.2.2: Удаленная конечная точка (WAN-адрес роутера в филиале — BR-RTR).
  • TUNTTL=64: Time To Live для пакетов внутри туннеля.
  • 192.168.255.1/30: Адрес на туннельном интерфейсе (маска /30 дает 2 хоста: .1 для HQ-RTR, .2 для BR-RTR).

Зачем это нужно: GRE-туннель соединяет главный офис и филиал через "интернет", создавая виртуальную выделенную линию (VPN без шифрования). Поверх него будет работать OSPF.

4. NAT и пересылка пакетов

# Настройка NAT

nano /etc/net/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p /etc/net/sysctl.conf
iptables -t nat -A POSTROUTING -o enp7s1 -j MASQUERADE
iptables-save > /etc/sysconfig/iptables
systemctl enable --now iptables

Абсолютно идентично настройке на ISP. HQ-RTR также выпускает свои локальные сети (VLAN 100, 200, 999) в интернет через NAT.

5. Создание пользователя-администратора

# Пользователь net_admin

# https://stepik.org/lesson/2000243/step/1?unit=2028373

useradd -m net_admin #имя и пароль по заданию
passwd net_admin
usermod -aG wheel net_admin
echo "net_admin ALL=(ALL:ALL) NOPASSWD:ALL" >> /etc/sudoers
  • useradd -m: Создает пользователя и его домашнюю директорию /home/net_admin.
  • passwd: Задает пароль (интерактивно).
  • wheel: Группа администраторов в ALT Linux (аналог sudo).
  • NOPASSWD:ALL: Разрешает выполнять любые команды через sudo без запроса пароля (это удобно для скриптов, но менее безопасно).

6. SSH-сервер

# SSH-сервер

apt-get install -y openssh-server
systemctl enable --now sshd

Установка и немедленный запуск OpenSSH-сервера для удаленного управления.

7. DHCP-сервер (ISC DHCP)

# DHCP-сервер

# https://www.altlinux.org/DhcpBinda

cd /etc/dhcp
cp dhcpd.conf.sample dhcpd.conf
nano dhcpd.conf

Анализ конфигурации:

ddns-update-style none;
subnet 192.168.200.0 netmask 255.255.255.0 {
option routers 192.168.200.1;
option subnet-mask 255.255.255.0;
option nis-domain "au-team.irpo";
option domain-name "au-team.irpo";
option domain-name-servers 192.168.100.2;
range dynamic-bootp 192.168.200.2 192.168.200.2;
default-lease-time 21600;
max-lease-time 43200;
}

Принимаем изменения

systemctl enable --now dhcpd
  • Важная особенность: Диапазон 192.168.200.2 — 192.168.200.2. Это пул ровно на один адрес. По заданию, вероятно, требуется выдать адрес конкретной машине (например, для тестового клиента).
  • DNS-сервер находится в VLAN 100 (192.168.100.2).

8. Часовой пояс

# Часовой пояс

apt-get install -y tzdata
timedatectl set-timezone Europe/Moscow
timedatectl status

Синхронизация времени с Москвой (UTC+3).

9. Динамическая маршрутизация (FRRouting / OSPF)

Это "мозг" сети. Вместо ручной прописывать статические маршруты в филиалы, HQ-RTR будет обмениваться маршрутами с другими роутерами автоматически.

# Динамическая маршрутизация OSPF

nano /etc/frr/daemons
ospfd=yes
systemctl enable --now frr
vtysh

Заходим в консоль управления FRR (аналог Cisco IOS):

conf t
router ospf
passive-interface default
network 192.168.100.0/29 area 0
network 192.168.200.0/24 area 0
network 192.168.99.0/29 area 0
network 192.168.255.0/30 area 0
exit

Также прописываем

interface gre1
no ip ospf passive
ip ospf authentication-key 1234
end
wr mem
exit

Разбор логики:

  1. passive-interface default: Мера безопасности. OSPF-приветствия не улетят в пользовательские порты, где могут сидеть посторонние.
  2. network: Говорим OSPF, какие сети анонсировать соседям.
  3. interface gre1: Включаем OSPF именно на туннеле в филиал.
  4. authentication-key 1234: Простой пароль, чтобы с нами по OSPF не подружился левый роутер.

10. Замена DNS на локальный

# Замена адреса DNS на локальный

cd /etc/net/ifaces
echo nameserver 192.168.100.2 > enp7s1/resolv.conf
echo nameserver 192.168.100.2 > enp7s2.100/resolv.conf
echo nameserver 192.168.100.2 > enp7s2.200/resolv.conf
echo nameserver 192.168.100.2 > enp7s2.999/resolv.conf
systemctl restart network

Перенаправляем все DNS-запросы с публичного 8.8.8.8 на внутренний сервер 192.168.100.2 (вероятно, это SRV-DNS в сети управления). После перезапуска сети роутер сам начнет ходить в локальный DNS.

HQ-SRV:

Это третья часть настройки сетевой инфраструктуры. Теперь мы конфигурируем HQ-SRV — центральный сервер штаб-квартиры, который будет выполнять роль DNS-сервера для всей организации.

Ниже — подробный разбор каждого блока команд.

# Имя хоста:

hostnamectl hostname hq-srv.au-team.irpo
exec bash
  • hq-srv: Headquarters Server — сервер главного офиса.
  • au-team.irpo: Домен организации.
  • exec bash: Обновляет приглашение командной строки.

2. Сетевые интерфейсы

# Интерфейсы:

cd /etc/net/ifaces
mkdir enp7s1 enp7s1.100
echo TYPE=eth > enp7s1/options
echo TYPE=vlan HOST=enp7s1 VID=100 > enp7s1.100/options
echo 192.168.100.2/29 > enp7s1.100/ipv4address
echo default via 192.168.100.1 > enp7s1.100/ipv4route
echo nameserver 8.8.8.8 > enp7s1.100/resolv.conf
systemctl restart network

Разбор конфигурации:

  1. mkdir enp7s1 enp7s1.100: Создаются две директории:
    enp7s1 — физический интерфейс.
    enp7s1.100 — виртуальный VLAN-интерфейс с тегом 100.
  2. TYPE=eth: Физический интерфейс работает как обычный Ethernet (trunk-порт).
  3. TYPE=vlan HOST=enp7s1 VID=100: Суб-интерфейс принадлежит VLAN 100 (сеть управления).
  4. 192.168.100.2/29: IP-адрес сервера в сети управления.
    Маска /29 (255.255.255.248) — доступно 6 адресов для хостов.
    .1 — шлюз (HQ-RTR).
    .2 — этот сервер (HQ-SRV).
    .3-.6 — резерв для других устройств управления.
  5. default via 192.168.100.1: Весь трафик во внешние сети идет через HQ-RTR.
  6. nameserver 8.8.8.8: Временно используется Google DNS (пока свой DNS-сервер не настроен).

Зачем серверу VLAN: Сервер находится в изолированной сети управления (VLAN 100), отдельно от пользователей (VLAN 200) и служебных устройств (VLAN 999). Это повышает безопасность.

3. Настройка DNS-сервера (Dnsmasq)

Вместо тяжелого BIND используется легковесный Dnsmasq — идеальный выбор для небольшой организации.

# DNS-сервер

# https://www.altlinux.org/DhcpBind

nano /etc/dnsmasq.conf

Прописываем

listen-address=192.168.100.2
server=8.8.8.8
# HQ-RTR
address=/hq-rtr.au-team.irpo/172.16.1.2
ptr-record=2.1.16.172.in-addr.arpa,hq-rtr.au-team.irpo
# BR-RTR
address=/br-rtr.au-team.irpo/172.16.2.2
# HQ-SRV
address=/hq-srv.au-team.irpo/192.168.100.2
ptr-record=2.100.168.192.in-addr.arpa,hq-srv.au-team.irpo
# HQ-CLI
address=/hq-cli.au-team.irpo/192.168.200.2
ptr-record=2.200.168.192.in-addr.arpa,hq-cli.au-team.irpo
# BR-SRV
address=/br-srv.au-team.irpo/192.168.3.2
# ISP
address=/docker.au-team.irpo/172.16.1.1
address=/web.au-team.irpo/172.16.2.1

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

systemctl enable --now dnsmasq
systemctl restart network

1. Создание пользователя sshuser

# Пользователь sshuser

# https://stepik.org/lesson/2000243/step/1?unit=2028373

useradd -u 2026 -m sshuser #имя и пароль по заданию
passwd sshuser
usermod -aG wheel sshuser
echo "sshuser ALL=(ALL:ALL) NOPASSWD:ALL" >> /etc/sudoers

Разбор каждой команды:

  1. useradd -u 2026 -m sshuser:
    -u 2026: Принудительно устанавливает
    UID (User ID) равным 2026. Обычно UID присваиваются автоматически по порядку (1000, 1001...), но конкретное значение часто требуется заданием для унификации на всех хостах. В ALT Linux первая тысяча ID зарезервирована за системными пользователями.
    -m: Создать домашнюю директорию /home/sshuser и скопировать туда шаблонные файлы окружения из /etc/skel/ (например, .bashrc, .profile).
    sshuser: Логин, под которым администратор будет заходить удаленно.
  2. passwd sshuser: Задание пароля. Команда выполнится интерактивно и попросит ввести пароль дважды. Важно не перепутать раскладку клавиатуры.
  3. usermod -aG wheel sshuser:
    -aG wheel: Добавляет (append) пользователя в группу wheel, не удаляя его из основных групп. В ALT Linux группа wheel по умолчанию имеет право выполнять команды через sudo (это прописано в /etc/sudoers).
  4. echo "sshuser ALL=(ALL:ALL) NOPASSWD:ALL" >> /etc/sudoers:
    sshuser: Правило действует на этого пользователя.
    ALL=(ALL:ALL): Может выполнять команды от любого пользователя и любой группы.
    NOPASSWD:ALL: Самое главное — не будет запрашивать пароль при использовании sudo. Это удобно для скриптов автоматизации, но
    снижает безопасность (если злоумышленник попадет в sshuser, он сразу получит root).

2. Усиление безопасности SSH (Hardening)

Чтобы сервер не взломали подбором паролей, настройки OpenSSH меняются с дефолтных на более строгие.

# SSH-сервер

nano /etc/openssh/sshd_config

Прописываем

Port 2026
AllowUsers sshuser
MaxAuthTries 2
Banner /etc/openssh/banner.txt

3. Создание баннера

echo Authorized access only > /etc/openssh/banner.txt
systemctl enable --now sshd

Это юридическое предостережение. При попытке подключения злоумышленник увидит:

Authorized access only

С юридической точки зрения, после этого сообщения злоумышленник не может сказать "я не знал, что сюда нельзя". Дальнейшие попытки подбора пароля трактуются как несанкционированный доступ.

5. Часовой пояс

# Часовой пояс

timedatectl set-timezone Europe/Moscow
timedatectl status

Повторная проверка и установка часового пояса (стандартно для всех машин). Логи SSH будут писаться с правильной временной меткой.

Итоговая конфигурация безопасности HQ-SRV

ПараметрЗначениеЦельSSH Port2026Скрыться от массовых сканеровРазрешенный пользовательsshuser (UID 2026)Только одна точка входаПопыток входа2Защита от подбора пароляПароль sudoОтключенУдобство администрированияБаннерAuthorized access onlyЮридическая защита

Теперь HQ-SRV полностью настроен: находится в сети управления (VLAN 100), обслуживает DNS-запросы и готов принимать безопасные подключения от администратора.

HQ-CLI:

Это пятая часть настройки инфраструктуры. Теперь мы конфигурируем HQ-CLI — клиентскую машину штаб-квартиры, которая находится в пользовательской сети (VLAN 200) и получает настройки автоматически.

1. Имя хоста

# Имя хоста:

hostnamectl hostname hq-cli.au-team.irpo; exec bash

# Интерфейсы:

2. Настройка сетевых интерфейсов через графический интерфейс

Сетевые подключения –> параметры подключений –> Добавить –> Тип «VLAN»

- Родительский интерфейс enp7s1

- Идентификатор VLAN 200

- Имя интерфейса enp7s1.200

Выключить / включить поддержку сети

3. Настройка часового пояса

# Часовой пояс

apt-get install tzdata -y
timedatectl set-timezone Europe/Moscow
timedatectl status

Стандартный блок синхронизации времени с Москвой (UTC+3), идентичный на всех хостах. На клиенте это особенно важно для корректного отображения времени в трее и правильных меток у создаваемых документов.

BR-RTR:

Это шестая часть настройки — конфигурируем BR-RTR (Branch Router), маршрутизатор удаленного филиала. Этот сервер является "близнецом" HQ-RTR, но находится в другой площадке и соединяется с главным офисом через GRE-туннель.

1. Имя хоста

# Имя хоста

hostnamectl hostname br-rtr.au-team.irpo; exec bash

2. Сетевые интерфейсы

# Интерфейсы

cd /etc/net/ifaces
mkdir enp7s1 enp7s2
echo TYPE=eth > enp7s1/options
echo TYPE=eth > enp7s2/options
echo 172.16.2.2/28 > enp7s1/ipv4address
echo 192.168.3.1/29 > enp7s2/ipv4address
echo default via 172.16.2.1 > enp7s1/ipv4route
echo nameserver 8.8.8.8 > enp7s1/resolv.conf
echo nameserver 8.8.8.8 > enp7s2/resolv.conf
systemctl restart network

Архитектура интерфейсов филиала:

ИнтерфейсIP-адресНазначениеenp7s1172.16.2.2/28WAN — связь с ISP (через подсеть 172.16.2.0/28)enp7s2192.168.3.1/29LAN — локальная сеть филиала

Разбор параметров:

  1. 172.16.2.2/28: WAN-адрес филиала.
    На ISP ранее был настроен интерфейс enp7s3 с адресом 172.16.2.1/28.
    Таким образом, ISP является шлюзом по умолчанию для BR-RTR.
  2. 192.168.3.1/29: Локальная сеть филиала.
    Маска /29 (255.255.255.248) дает 6 адресов для хостов (.2 — .6).
    Адрес .1 занят маршрутизатором.
  3. default via 172.16.2.1: Весь внешний трафик уходит на ISP.
  4. nameserver 8.8.8.8: Временно Google DNS (позже будет заменен на центральный 192.168.100.2).

3. Настройка NAT

# Настройка NAT

nano /etc/net/sysctl.conf

Прописываем

net.ipv4.ip_forward = 1

Далее

sysctl -p /etc/net/sysctl.conf
iptables -t nat -A POSTROUTING -o enp7s1 -j MASQUERADE
iptables-save > /etc/sysconfig/iptables
systemctl enable --now iptables

Зачем нужен NAT в филиале:

  • Локальная сеть 192.168.3.0/29 имеет "серые" адреса.
  • Для выхода в интернет (напрямую, а не через туннель) нужен маскарадинг.
  • Трафик от 192.168.3.x будет выходить в WAN с подменой на 172.16.2.2.

Важное замечание по маршрутизации:

  • Если трафик идет в главный офис (сети 192.168.100.0/29, 192.168.200.0/24, 192.168.99.0/29), он НЕ должен проходить через NAT.
  • OSPF (настроенный позже) автоматически направит такой трафик через GRE-туннель, минуя NAT.
  • Правило MASQUERADE применяется только к пакетам, уходящим через физический WAN-интерфейс (enp7s1), что корректно.

4. Пользователь net_admin

# Пользователь net_admin

# https://stepik.org/lesson/2000243/step/1?unit=2028373

useradd -m net_admin
passwd net_admin
usermod -aG wheel net_admin
echo "net_admin ALL=(ALL:ALL) NOPASSWD:ALL" >> /etc/sudoers

Создание административной учетной записи, идентичной той, что была создана на HQ-RTR:

  • -m: Создает домашнюю директорию /home/net_admin.
  • wheel: Группа администраторов с правами sudo.
  • NOPASSWD:ALL: Выполнение команд без пароля.

Зачем одинаковый пользователь: Унификация учетных записей в организации. Администратор использует один логин/пароль для доступа ко всем роутерам.

5. SSH-сервер

# SSH-сервер

apt-get install -y openssh-server
systemctl enable --now sshd

Стандартная установка SSH-сервера для удаленного управления. В отличие от HQ-SRV, здесь не применяется hardening (порт по умолчанию 22, нет ограничения AllowUsers). В реальной среде следовало бы применить те же настройки безопасности.

6. Часовой пояс

# Часовой пояс

apt-get update
apt-get install tzdata -y
timedatectl set-timezone Europe/Moscow
timedatectl status

Синхронизация времени. Единый часовой пояс критически важен для:

  • Корректной работы логов на всех устройствах.
  • Работы OSPF (расхождения во времени могут вызвать проблемы с аутентификацией).
  • Анализа инцидентов безопасности (четкая хронология).

7. GRE-туннель (BR-RTR → HQ-RTR)

# GRE-туннель

https://www.altlinux.org/Strongswan#Создание_GRE-интерфейса_(RTR-1)

cd /etc/net/ifaces
mkdir gre1
echo "TYPE=iptun
TUNTYPE=gre
TUNLOCAL=172.16.2.2
TUNREMOTE=172.16.1.2
TUNTTL=64
TUNOPTIONS='ttl 64'" > gre1/options
echo "192.168.255.2/30" > gre1/ipv4address
systemctl restart network

Как работает GRE:

  1. Пакет из локальной сети BR (192.168.3.x) хочет попасть в сеть HQ (192.168.200.x).
  2. Маршрутизатор BR "заворачивает" этот пакет в GRE-заголовок.
  3. Снаружи ставится обычный IP-заголовок: От: 172.16.2.2 → Кому: 172.16.1.2.
  4. Пакет летит через ISP как обычный интернет-трафик.
  5. HQ-RTR "разворачивает" GRE и достает оригинальный пакет.

Важно: GRE не шифрует трафик. Для защиты данных в реальной среде используют IPsec поверх GRE.

8. Динамическая маршрутизация OSPF

# Динамическая маршрутизация OSPF

apt-get install frr -y
nano /etc/frr/daemons

Прописываем

ospfd=yes

Далее

systemctl enable --now frr.service
vtysh

Далее

conf t
router ospf
passive-interface default
network 192.168.3.0/29 area 0
network 192.168.255.0/30 area 0
exit

И в конце

interface gre1
no ip ospf passive
ip ospf authentication-key 1234
end
wr mem
exit

9. Замена DNS на центральный

# Замена адреса DNS на локальный

cd /etc/net/ifaces
echo nameserver 192.168.100.2 > enp7s1/resolv.conf
echo nameserver 192.168.100.2 > enp7s2/resolv.conf
systemctl restart network

Маршрут до центрального DNS:

  1. BR-RTR отправляет DNS-запрос к 192.168.100.2.
  2. Таблица маршрутизации (благодаря OSPF) знает, что 192.168.100.0/29 доступна через GRE-туннель.
  3. Пакет уходит в туннель, доходит до HQ-RTR, а оттуда — в VLAN 100 к HQ-SRV.
  4. HQ-SRV (dnsmasq) отвечает.

Преимущества центрального DNS:

  • Единая точка управления именами.
  • BR-RTR может разрешать имена hq-srv.au-team.irpo, hq-rtr.au-team.irpo и другие.
  • Кэширование ускоряет работу.

BR-SRV:

Это седьмая часть настройки корпоративной сети. Конфигурируем BR-SRV — сервер филиала, который является "близнецом" HQ-SRV, но с упрощенной ролью (без DNS-сервера, только как целевой сервер для проверки связности и удаленного управления).

1. Имя хоста

# Имя хоста

hostnamectl hostname br-srv.au-team.irpo; exec bash

# Интерфейсы

2. Сетевые интерфейсы

cd /etc/net/ifaces
echo TYPE=eth > enp7s1/options
echo 192.168.3.2/29 > enp7s1/ipv4address
echo default via 192.168.3.1 > enp7s1/ipv4route
echo nameserver 8.8.8.8 > enp7s1/resolv.conf
systemctl restart network

Почему без VLAN: В небольших филиалах часто используют плоскую сеть (одна подсеть для всех устройств), в то время как в главном офисе сети сегментированы по назначению.

3. Пользователь sshuser

# Пользователь sshuser

# https://stepik.org/lesson/2000243/step/1?unit=2028373

useradd -u 2026 -m sshuser
passwd sshuser
usermod -aG wheel sshuser
echo "sshuser ALL=(ALL:ALL) NOPASSWD:ALL" >> /etc/sudoers

Зеркальная настройка с HQ-SRV:

  • -u 2026: Тот же UID, что и на HQ-SRV. Это важно для:
    Унификации прав доступа.
    Корректной работы NFS (если будет настроен).
    Синхронизации при миграции данных.
  • sshuser: Единая учетная запись администратора для всех серверов организации.
  • wheel: Группа администраторов.
  • NOPASSWD:ALL: Выполнение sudo без пароля.

4. SSH-сервер с hardening

# SSH-сервер

apt-get install -y openssh-server
nano /etc/openssh/sshd_config

Параметры безопасности (аналогично HQ-SRV):

Port 2026
AllowUsers sshuser
MaxAuthTries 2
Banner /etc/openssh/banner.txt

Детальный разбор hardening'а:

  1. Port 2026: Нестандартный порт.
    Снижает количество автоматических атак.
    Совпадает с UID пользователя (2026) — легко запомнить.
  2. AllowUsers sshuser: Белый список.
    Только sshuser может подключиться по SSH.
    Пользователь net_admin (созданный на BR-RTR) не сможет подключиться к BR-SRV.
  3. MaxAuthTries 2: Максимум 2 попытки ввода пароля.
    Защита от brute-force атак.
  4. Banner /etc/openssh/banner.txt: Юридическое предупреждение.

Создание баннера и запуск служб:

echo Authorized access only > /etc/openssh/banner.txt
systemctl enable --now sshd

5. Часовой пояс

# Часовой пояс

apt-get install tzdata -y
timedatectl set-timezone Europe/Moscow
timedatectl status

Стандартная синхронизация времени с Москвой (UTC+3). Единый часовой пояс критичен для:

  • Корректного логирования событий.
  • Синхронизации логов между площадками.
  • Работы служб, чувствительных ко времени.

6. Замена DNS на центральный

# Замена адреса DNS на локальный

cd /etc/net/ifaces
echo nameserver 192.168.100.2 > enp7s1/resolv.conf
systemctl restart network

Модуль 2

ISP:

1. NTP-сервер времени (Chrony)

# NTP сервер времени

nano /etc/chrony.conf

Конфигурация:

pool ru.pool.ntp.org iburst
allow all
local stratum 5

Уровни стратума (stratum):

  • Stratum 0: Атомные часы, GPS-приемники (источник времени).
  • Stratum 1: Серверы, напрямую подключенные к Stratum 0.
  • Stratum 5: Локальный сервер, раздающий время внутри организации.

Запуск службы:

systemctl enable --now chronyd
systemctl restart chronyd

2. Обратный прокси-сервер (Nginx Reverse Proxy)

# Обратный прокси

# https://www.8host.com/blog/nastrojka-obratnogo-proksi-nginx-v-ubuntu/

nano /etc/nginx/sites-available.d/web.conf

Начальная конфигурация:

server {
$$$$listen 80;
$$$$server_name web.au-team.irpo;
$$$$location / {
$$$$$$$$proxy_pass http://172.16.1.10:8080;
$$$$}
}
Server {
$$$$listen 80;
$$$$server_name docker.au-team.irpo;
$$$$location / {
$$$$$$$$proxy_pass http://172.16.2.10:8080;
$$$$}
}

Активация конфигурации:

ln -s /etc/nginx/sites-available.d/web.conf /etc/nginx/sites-enabled.d/
systemctl enable --now nginx

3. Web-based аутентификация

# Настройка web-based аутентификации

# https://www.8host.com/blog/nastrojka-parolnoj-autentifikacii-cherez-nginx/

apt-get install htpasswd -y
mini_htpasswd -c /etc/nginx/.htpasswd WEB

После выполнения команды будет запрошен пароль для пользователя WEB.

Обновленная конфигурация Nginx:

nano /etc/nginx/sites-available.d/web.conf

Прописываем

server {
$$$$listen 80;
$$$$server_name$web.au-team.irpo;
$$$$location / {
$$$$$$$$proxy_pass http://172.16.1.10:8080;
$$$$$$$$auth_basic "Restricted Content";
$$$$$$$$auth_basic_user_file /etc/nginx/.htpasswd;
$$$$}
}

Перезапуск Nginx:

systemctl restart nginx

Как это работает:

  1. Пользователь заходит на http://web.au-team.irpo.
  2. Браузер показывает диалог: "Restricted Content" с полями логин/пароль.
  3. Пользователь вводит: WEB / P@ssw0rd (пароль, заданный при создании).
  4. Nginx сверяет хэш пароля с файлом .htpasswd.
  5. Если совпало — проксирует запрос на внутренний сервер.
  6. Если нет — возвращает ошибку 401 Unauthorized.

HQ-RTR:

1. SSH-сервер

# SSH сервер

systemctl enable --now sshd

Разбор команды:

  • enable: Добавляет службу SSH в автозагрузку (запустится при старте системы).
  • --now: Немедленно запускает службу, не дожидаясь перезагрузки.

Зачем SSH на маршрутизаторе:

  • Удаленное администрирование без физического доступа к консоли.
  • Пользователь net_admin (созданный ранее) может управлять роутером удаленно.
  • Возможность настройки без прерывания работы сети.

2. Проброс портов (DNAT — Destination NAT)

# Проброс портов

# https://losst.pro/probros-portov-iptables-v-linux

iptables -t nat -A PREROUTING -d 172.16.1.10 -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.10:80
iptables -t nat -A PREROUTING -d 172.16.1.10 -p tcp --dport 2026 -j DNAT --to-destination 192.168.1.10:2026
iptables-save > /etc/sysconfig/iptables
systemctl enable --now iptables

HQ-SRV:

# NTP сервер времени

echo server 172.16.1.1 iburst > /etc/chrony.conf
systemctl enable --now chronyd
systemctl restart chronyd

# SSH сервер

systemctl enable --now sshd

# RAID 0

lsblk
mdadm --create --level=0 --raid-devices=2 /dev/md/md0 /dev/sdb /dev/sdc
mkfs.ext4 /dev/md/md0
mkdir /raid
blkid /dev/md/md0

скопировать UUID

nano /etc/fstab
UUID=d3fbac4b-46fb-4514-9d22-c4cf6874307e /raid ext4 defaults 0 0
mount -a
lsblk

NFS Сервер

# NFS файловый сервер

# https://www.altlinux.org/NFS_start

mkdir /raid/nfs
nano /etc/exports

Создаёте каталог для экспорта. Убедитесь, что он существует, а главное — что /raid смонтирован (видимо, это тот самый RAID-массив, который мы обсуждали ранее — /dev/md/md0).

Прописываем

/raid/nfs 192.168.2.0/28 -rw,no_subtree_check

Всё верно. Экспортируете каталог для подсети 192.168.2.0/28 (маска 255.255.255.240, диапазон адресов .1 – .14).

Далее

systemctl enable --now nfs
systemctl enable --now nfs-server.service
touch /raid/nfs/123

Замечание: Служба может называться nfs-server или nfs-kernel-server в зависимости от дистрибутива. Второй вызов nfs-server.service — правильный. Первый nfs может не сработать, это нормально.

2. Веб-сервер (LAMP)

# Веб-сервер

apt-get install lamp-server -y
systemctl enable --now mariadb
systemctl enable --now httpd2
mount /dev/cdrom /mnt
cp /mnt/web/index.php /var/www/html/
cp /mnt/web/logo.png /var/www/html/
nano /var/www/html/index.php

Прописываем

$servername = "localhost"; #по заданию
$username = "webc";
$password = "P@ssw0rd";
$dbname = "webdb";

Далее

mariadb
create database webdb;
create user 'webc'@'localhost' identified by 'P@ssw0rd';
grant all privileges on webdb.* to 'webc'@'localhost' with grant option;
exit

Далее

mariadb -D webdb < /mnt/web/dump.sql

С машины HQ-CLI открыть 192.168.1.10

BR-RTR:

1. NTP-клиент (синхронизация времени)

# NTP сервер времени

echo server 172.16.1.1 iburst > /etc/chrony.conf
systemctl enable --now chronyd
systemctl restart chronyd
chronyc sources -v

2. SSH-сервер

# SSH сервер

systemctl enable --now sshd

Запуск SSH для удаленного управления. На HQ-SRV ранее уже был настроен SSH с hardening (порт 2026, AllowUsers sshuser). Эта команда либо запускает его, либо выдает ошибку, если он уже работает.

# Проброс портов

# https://losst.pro/probros-portov-iptables-v-linux

iptables -t nat -A PREROUTING -d 172.16.2.10 -p tcp --dport 8080 -j DNAT --to-destination 192.168.3.10:8080
iptables -t nat -A PREROUTING -d 172.16.2.10 -p tcp --dport 2026 -j DNAT --to-destination 192.168.3.10:2026
iptables-save > /etc/sysconfig/iptables
systemctl enable --now iptables

BR-SRV:

# NTP сервер времени

echo server 172.16.1.1 iburst > /etc/chrony.conf
systemctl enable --now chronyd
systemctl restart chronyd
chronyc sources -v

# Samba

nano /etc/net/ifaces/enp7s1/resolv.conf

Прописываем

nameserver 127.0.0.1
search au-team.irpo
systemctl restart network
cd /etc/samba/
mv smb.conf smb.conf.bak
samba-tool domain provision

DNS forwarder IP address: 192.168.1.10

cp /var/lib/samba/private/krb5.conf /etc/krb5.conf
systemctl enable --now samba
kinit administrator@AU-TEAM.IRPO
samba-tool group add hq #имена по заданию
samba-tool user add hquser1 P@ssw0rd
samba-tool user add hquser2 P@ssw0rd
samba-tool user add hquser3 P@ssw0rd
samba-tool user add hquser4 P@ssw0rd
samba-tool user add hquser5 P@ssw0rd
samba-tool group addmembers "hq" hquser1
samba-tool group addmembers "hq" hquser2
samba-tool group addmembers "hq" hquser3
samba-tool group addmembers "hq" hquser4
samba-tool group addmembers "hq" hquser5
samba-tool dns add br-srv au-team.irpo docker A 172.16.1.1
samba-tool dns add br-srv au-team.irpo web A 172.16.2.1
samba-tool dns add br-srv au-team.irpo hq-rtr A 172.16.1.10
samba-tool dns add br-srv au-team.irpo br-rtr A 172.16.2.10
samba-tool dns add br-srv au-team.irpo hq-srv A 192.168.1.10
samba-tool dns add br-srv au-team.irpo hq-cli A 192.168.2.10

# Ansible

ssh-keygen -t rsa
ssh-copy-id -p 22 user@hq-cli.au-team.irpo
ssh-copy-id -p 22 net_admin@hq-rtr.au-team.irpo
ssh-copy-id -p 22 net_admin@br-rtr.au-team.irpo
ssh-copy-id -p 2026 sshuser@hq-srv.au-team.irpo

Далее

nano /etc/ansible/ansible.cfg

Прописываем

[defaults]
interpreter_python = auto_silent
host_key_checking = False
nano /etc/ansible/hosts
[cli:vars]
ansible_user=user
ansible_password=resu
ansible_port=22
[srv:vars]
ansible_user=sshuser
ansible_password=P@ssw0rd
ansible_port=2026
[rtr:vars]
ansible_user=net_admin
ansible_password=P@ssw0rd
ansible_port=22
[cli]
hq-cli.au-team.irpo
[srv]
hq-srv.au-team.irpo
[rtr]
hq-rtr.au-team.irpo
br-rtr.au-team.irpo

Пингуем машины

ansible -m ping all

# Веб-приложение Docker

systemctl enable --now docker
mount /dev/cdrom /mnt
docker load -i /mnt/docker/site_latest.tar
docker load -i /mnt/docker/mariadb_latest.tar
docker image ls
cd
nano docker-compose.yaml

Прописываем

services:
$$db:
$$$$container_name: db
$$$$image: mariadb:10.11
$$$$environment:
$$$$$$MARIADB_DATABASE: "testdb"
$$$$$$MARIADB_USER: "test"
$$$$$$MARIADB_PASSWORD: "P@ssw0rd"
$$$$$$MARIADB_ROOT_PASSWORD: "toor"
$$app:
$$$$container_name: tespapp
$$$$image: site:latest
$$$$restart: always
$$$$ports:
$$$$$$- "8080:8000"
$$$$depends_on:
$$$$$$- db
$$$$environment:
$$$$$$DB_TYPE: "maria"
$$$$$$DB_HOST: "db"
$$$$$$DB_NAME: "testdb"
$$$$$$DB_PORT: "3306"
$$$$$$DB_USER: "test"
$$$$$$DB_PASS: "P@ssw0rd"

Далее

docker compose up -d

На HQ-CLI открыть http://br-srv.au-team.irpo:8080

HQ-CLI:

1. NTP-клиент (синхронизация времени)

# NTP сервер времени

apt-get update
apt-get install nano chrony -y
echo server 172.16.1.1 iburst > /etc/chrony.conf
systemctl enable --now chronyd
systemctl restart chronyd
chronyc sources -v

# SSH сервер

apt-get install openssh-server -y
systemctl enable --now sshd

# Яндекс Браузер

apt-get install yandex-browser -y

# Ввод в домен

apt-get install task-auth-ad-sssd -y

Графический интерфейс:

Настройки сети:

Метод статический

IP 192.168.2.10

Маска 28

Шлюз 192.168.2.1

DNS 192.168.3.10

Поисковый домен au-team.irpo

su -
acc

Пользователи >> Аутентификация

Выбрать точку напротив «Домен Active Directory»

Домен: AU-TEAM.IRPO

Рабочая группа: AU-TEAM

Имя компьютера: HQ-CLI

reboot
su -
roleadd hq wheel
nano /etc/sudoers

Прописываем

%wheel ALL=(ALL:ALL) /bin/cat, /bin/grep, /usr/bin/id

Залогиниться под hquser1 P@ssw0rd

sudo id

Должно сработать

# Монтирование сетевой папки от hq-srv

systemctl enable --now rpcbind
systemctl enable --now nfs-blkmap.service
systemctl enable --now nfs-client.target
mkdir /mnt/nfs
nano /etc/fstab

Прописываем

192.168.1.10:/raid/nfs /mnt/nfs nfs defaults 0 0

Далее

mount -a
ls /mnt/nfs/