Документация: README, QUESTIONS, MANUAL, TROUBLESHOOT

This commit is contained in:
parent 14b5b2ee95
commit 6f0908b615
4 changed files with 462 additions and 0 deletions

114
MANUAL.md Normal file
View file

@ -0,0 +1,114 @@
# MANUAL.md — шаги, которые нельзя (или не нужно) автоматизировать
Пополняется по мере работы над заданиями 2 и 3.
## Задание 1
### BR-FW — если оказался НЕ Linux
1. Смотрим, какая система стоит на ВМ BR-FW (например EcoRouter или другой МСЭ).
2. Настраиваем по логике из zadanie1/br-fw.sh:
- имя br-fw.au-team.irpo;
- интерфейс к BR-RTR: адрес из сети /30 (адресация — из таблицы 2);
- маршрут по умолчанию через адрес BR-RTR (в сети /30);
- интерфейс к BR-SRV: адрес BR-FW в сети ≤16 адресов;
- OSPF: соседство с BR-RTR, рекламируем сети линка и сети BR-SRV;
- протокол OSPF разрешаем ТОЛЬКО на интерфейсе к BR-RTR;
- часовой пояс по месту экзамена.
3. Отчёт: заполняем раздел «коммутация/маршрутизация офиса BR».
### Таблица 2 и таблица 3
- Заполняются вручную из вывода tools/subnet-calc.sh и из ip -4 -br address
на машинах (см. README.md, порядок запуска).
## Задание 2
### HQ-CLI: ввод в домен samba-DC
Команде join нужен пароль администратора домена, нельзя автоматизировать
без секрета в файле. Делается вручную:
1. Проверить DNS: адрес BR-SRV должен резолвиться (DNS BR-SRV в /etc/resolv.conf).
Проверка: `realm discover au-team.irpo` (если используется realmd) либо
`smbclient -L //br-srv.au-team.irpo -U administrator`.
2. Ввести в домен одним из способов (уточнить на стенде, какой стек стоит
на HQ-CLI: realmd+sssd или winbind):
- realmd: `realm join au-team.irpo -U administrator` (пароль спросит);
- sssd/winbind вручную: настроить krb5.conf, затем
`net ads join -U administrator`.
3. Включить вход доменных пользователей: pam/winbind/sss настроить
(`/etc/nsswitch` и sssd.conf), перезапустить службы, проверить:
`getent passwd hquser1`.
4. Проверяем: `getent passwd hquser1`, затем `su - hquser1` — вход работает.
5. Проверить правило sudo (файл /etc/sudoers.d/hq_group от hq-cli.sh):
`su - hquser1 -c 'sudo cat /etc/hostname'` и убедиться, что другие команды
(например `sudo vim`) под пользователем группы hq НЕ работают.
## Задание 2: Ansible — ключи на машины
После br-srv.sh ключ сгенерирован, его надо раскидать вручную (пароль
запрашивается интерактивно, автоматизации по ТЗ нет):
```
ssh-copy-id sshuser@<адрес HQ-SRV>
ssh-copy-id sshuser@<адрес HQ-CLI>
ssh-copy-id net_admin@<адрес HQ-RTR>
ssh-copy-id net_admin@<адрес BR-RTR>
```
Затем на BR-SRV: `ansible all -m ping` — все четыре машины должны ответить
`pong`. Если машина отвечает, а модуль не находит python — установить
python3: `dnf install -y python3`.
### HQ-CLI: Яндекс Браузер
- Если пакет есть в репозитории РЕД ОС 8: `dnf install -y yandex-browser`
(уточнить точное имя пакета).
- Если нет — скачать rpm из Образца/Additional.iso/локальной сети и
`dnf localinstall`. Отметить в отчёте действие установки.
## Задание 3
### Кибер Бэкап (HQ-SRV и агент на HQ-CLI)
Графический продукт, автоматизации через конфиги нет:
1. Устанавливаем сервер управления на HQ-SRV (пакет с ISO/сети — уточнить
источник, где именно дистрибутив).
2. В веб-интерфейсе создаём подразделение `irpo`, пользователя
`irpoadmin` с паролем `P@ssw0rd` (значения берём из задания 3 п. 9).
3. На HQ-CLI ставим агент с функциями узла хранилища, подключаем к серверу.
4. На HQ-CLI создаём директорию /backup, выбираем её устройством хранения.
5. Создаём план «копирование /etc и всех поддиректорий» для HQ-SRV.
6. Запускаем план, показываем результат, снимаем скриншоты для отчёта.
## Задание 3
### HQ-SRV: HTTPS на реверс-прокси (доставка сертификатов)
Сертификаты выпущены hq-srv.sh (zadanie3) в /etc/CA. Их надо вручную доставить:
1. На ISP скопировать сертификат web/docker-домена и ключ:
`scp /etc/CA/веб_домен.crt root@<адрес ISP>:/etc/nginx/`
(аналогично ключ .key).
2. На ISP поправить пути в zadanie3/isp.sh (TLS_CERT_FILE/TLS_KEY_FILE)
и запустить скрипт повторно — он перенастроит прокси на 443.
3. На HQ-CLI скопировать root.crt и запустить zadanie3/hq-cli.sh
(укажите CA_ROOT_FILE) — доверие установится, браузер без предупреждений.
4. Проверить в браузере HQ-CLI (если GUI есть) либо curl: `curl -v https://...`
### HQ-SRV: Кибер Бэкап 18 (или аналог)
1. Установить сервер управления (источник — Additional.iso/локальный
репозиторий, точка задания 3 п. 9; ПрИл_6 содержит точные шаги).
2. В веб-интерфейсе создать подразделение «irpo», пользователя
«irpoadmin» с паролем P@ssw0rd.
3. На HQ-CLI установить агент с функциями узла хранилища, подключить
агент к серверу HQ-SRV.
4. На узел HQ-CLI выбрать/создать директорию /backup как устройство
хранения в консоли сервера.
5. Создать план резервного копирования: HQ-SRV, директория /etc со всеми
поддиректориями, целевой узел хранения — HQ-CLI /backup.
6. Запустить план, проверить архив в хранилище. Отметить шаги в отчёте.
### HQ-CLI: подключение pdf-принтера (если CLI без CUPS)
lpadmin/lpoptions из zadanie3/hq-cli.sh должны работать в консоли. Если
на стенде требуется GUI-подключение (GUI может отсутствовать) — сделать
через system-config-printer или настройки окружения, отметить в отчёте способ.
### Импорт пользователей через import.sh (задание 3, п. 1)
1. Монтируем Additional.iso в каталог (переменная ISO_DIR=/mnt/iso в
скриптах задания 3).
2. Запускаем файл с образа: `bash /mnt/iso/import.sh` — скрипт сам запросит
путь к источнику, вводим `/mnt/iso/users.csv`. Импорт идёт со всеми
атрибутами. Повторно допустимо (см. задание 3 п. 1).
3. Проверка: `samba-tool user list` на BR-SRV; пользователи должны
логиниться на HQ-CLI вручную (`su - имя_пользователя`). Результат в отчёт.

104
QUESTIONS.md Normal file
View file

@ -0,0 +1,104 @@
# QUESTIONS.md — что нужно уточнить на стенде / у экзаменатора
Список пополняется по мере работы с заданиями 2 и 3.
## HQ-SW (задание 1)
- По tasks.md HQ-SW — виртуальный коммутатор; кто и чем его настраивает (это
отдельная ВМ? EcoRouter? встроенный коммутатор гипервизора?) — уточнить.
- Что от него требуется по заданию 1 (что тренировать руками):
- порт в сторону HQ-SRV — access VLAN 100;
- порт в сторону HQ-CLI — access VLAN 200;
- порт в сторону HQ-RTR — trunk с VLAN 100, 200 и 999 (HQ-RTR маршрутизирует
все VLAN через ОДИН адаптер, п. 4 задания 1);
- управление в VLAN 999: IP управления HQ-SW должен быть из сети VLAN 999
(не более 8 адресов по заданию).
- Часовой пояс на HQ-SW НЕ настраивается (п. 11 задания 1).
## РЕД ОС 8 — менеджер сети и имена пакетов/служб (ПРОВЕРИТЬ на стенде)
- Сетевой менеджер: NetworkManager с keyfiles
(/etc/NetworkManager/system-connections/*.nmconnection)? Или
netplan/ifup? Все скрипты задания 1 написаны под NetworkManager.
- Пакет/служба для сохранения iptables: iptables (пакет iptables-services,
служба iptables)? Если используется firewalld или nftables — обсудить
с экзаменатором, поменять подход NAT.
- OSPF-демон: frr (пакет frr, конфиг /etc/frr/frr.conf, служба frr) или
quagga? В скриптах — frr, файл /etc/frr/daemons правится sed'ом
(zebra=yes, ospfd=yes) — проверить, что файл такой существует.
- Пакет DHCP-сервера: dhcp-server (служба dhcpd, конфиг /etc/dhcp/dhcpd.conf)?
Или kea/dnsmasq? В zadanie1/hq-rtr.sh — dhcp.
- DNS-сервер на HQ-SRV выбран dnsmasq (простой, A-записи через hosts-файл).
PTR-записи: dnsmasq должен отдавать обратные записи по записям hosts —
ПРОВЕРИТЬ на стенде (dig -x адрес). Если экзаменатор требует полноценный
bind — переделать hq-srv.sh.
- SELinux на РЕД ОС 8: если Enforcing, для порта SSH 2027 нужен
semanage (пакет policycoreutils-python-utils) — проверено в скриптах,
но имена пакетов ПРОВЕРИТЬ.
## BR-FW
- Тип системы неизвестен (УТОЧНИТЬ). zadanie1/br-fw.sh написан под Linux.
Если это не Linux (EcoRouter/другой МСЭ) — настройки OSPF-соседа и
интерфейсов делаются по-своему, взять логику из скрипта как чек-лист.
## HQ-CLI
- Графика: по предварительным данным HQ-CLI — только терминал. Пункты
задания 2 (Яндекс Браузер) и задания 3 (Кибер Бэкап GUI, принтер в GUI)
делаем через консоль где возможно, остальное — MANUAL.md/вручную.
- Установлен ли на РЕД ОС 8 репозиторий с Яндекс Браузером (dnf)? Если нет —
rpm-пакет с флешки/ISO — уточнить, откуда брать пакет.
## Задание 2 (уточнения по ходу)
- chrony: путь конфига (/etc/chrony.conf?) и имя службы (chronyd?) на РЕД ОС 8.
- NFS: имя пакета (nfs-utils) и службы (nfs-server) на РЕД ОС 8.
- mdadm: имя файла конфигурации (/etc/mdadm.conf по заданию; RHEL-вариант
/etc/mdadm.conf может дополняться переменными mdadm.conf.d).
- Веб-приложение: пользователь службы apache на РЕД ОС 8 (apache или httpd?),
также формат данных для подключения БД в index.php — смотреть файл из ISO.
- Samba: точное имя пакета samba-dc и путь samba-tool; команда для порога
блокировки (--lockout-attempt / --lockout-threshold, зависит от версии);
имя администратора домена (administrator?).
- Ansible: пакет ansible-core vs ansible; пользователи SSH для каждой машины
(из задания 1: sshuser на серверах, net_admin на роутерах).
- Docker: пакет (docker-engine / docker-ce / podman?), имена файлов образов
в Additional.iso (site_latest, mariadb_latest — тары или директории?),
содержимое compose.yaml (маппинг портов на 8080?).
- Autofs: пакет autofs, служба autofs на РЕД ОС 8.
- Ввод HQ-CLI в домен: realmd+sssd или winbind — заранее выяснить стек.
- Подтверждение «пользователи группы hq имеют право аутентифицироваться на
HQ-CLI»: как проверять (sssd getent / su - hquser1).
- Яндекс Браузер: имя пакета в репозитории РЕД ОС 8 (yandex-browser-stable?)
или источник rpm.
- Проброс 8080 наружу: на какую сеть идут DNAT-правила (интерфейс ISP), и что
разрешён прохождение пакетов в цепочке FORWARD (политика ACCEPT).
## Проверки (папка check/)
- chrony: имя службы (chronyd?), формат вывода `samba-tool domain passwordsettings show`
(точные строки "minimum password length" и "bad password count/lockout") —
если на стенде слова другие, поправить grep в check/zadanie2/br-srv.sh.
- Лизинг DHCP у NM: /var/lib/NetworkManager/*.lease — файлы есть на РЕД ОС 8?
(check/zadanie1/hq-cli.sh).
- `trust list` (p11-kit) доступен на РЕД ОС 8 для проверки CA (check/zadanie3/hq-cli.sh).
- atop: параметр интервала (INTERVAL/LOGINTERVAL) и путь конфига — в check/zadanie3/hq-srv.sh это переменная.
- Кибер Бэкап: имя service unit на стенде (переменная BACKUP_SERVICE_PATTERN).
- curl на ISP: если nginx уже в https-режиме, HTTP-запрос вернёт 301 (норма);
подробности в check/zadanie3/isp.sh.
## Задание 3 (уточнения по ходу)
- ЦС «отечественные алгоритмы»: обычный openssl RSA/EC — гост-подписи не умеет.
Уточнить у экзаменатора, оправдывает ли RSA критерий (или требуется
ГОСТ-пакет, например crypto-pro/ViPNet — что доступно на стенде?).
- nginx: пакет и наличие рестаров ok (ПРОВЕРИТЬ на РЕД ОС 8).
- Обратный прокси: HQ-SRV/BR-SRV резолвятся с ISP только через статические
маршруты (office nets за маршрутизаторами) — с ISP curl пробовать до запуска.
- atop: какой конфиг-файл читает служба на РЕД ОС 8 (/etc/sysconfig/atop?
/etc/atop/atop.conf?) и как называется параметр интервала.
- cups-pdf: есть ли пакет в репозитории РЕД ОС 8; имя pdf-принтера по умолчанию
(обычно pdf); доступность порта 631 извне (файрвол/SELinux).
- fail2ban: доступен ли пакет на РЕД ОС 8 (нужен EPEL?), формат порта в jail
(2027) и backend systemd.
- Кибер Бэкап 18: откуда брать дистрибутив на стенде (ISO/файл-сервер).
- Плейбук из Additional.iso/playbook: какие переменные/инвентарь ожидает,
где создаёт отчёты PC-INFO (path в плейбуке может отличаться).
- import.sh: точно интерактивен? Если использует свой механизм вопросов —
подготовить ответы заранее (cat answers | import.sh) — изучить на стенде.
- HQ-CLI: update-ca-trust на РЕД ОС 8; есть ли поддержка ipp-подключения
принтера без GUI (lpadmin/lpoptions).

109
README.md Normal file
View file

@ -0,0 +1,109 @@
# exam-net — скрипты подготовки к ДЭ 09.02.06 (Сетевое и системное администрирование)
Автоматизация настройки стенда по заданиям 1–3 (источник — `tasks.md`).
Скрипты запускаются на соответствующих машинах (ISP, HQ-RTR, BR-RTR, BR-FW,
HQ-SRV, BR-SRV, HQ-CLI), все решения по адресации вынесены в переменные
в начале каждого скрипта.
Структура:
```
tools/subnet-calc.sh калькулятор подсетей (python3)
zadanie1/ скрипты задания 1 (сетевая инфраструктура)
zadanie2/ скрипты задания 2 (администрирование ОС)
zadanie3/ скрипты задания 3 (эксплуатация инфраструктуры)
QUESTIONS.md что проверить на стенде (имена пакетов/служб и т.д.)
MANUAL.md шаги, которые выполняются вручную
```
## 1. Как скопировать репозиторий на машину
На любой Linux-машине стенда (РЕД ОС 8):
```bash
dnf install -y git # если git ещё нет
git clone https://git.belmpk.ru/kioroglo2410/net.git
cd net
```
## 2. Калькулятор подсетей
```bash
bash tools/subnet-calc.sh 172.16.0.0/16 hq_srv=32 hq_cli=16 mgmt=8 br_srv=16 br_link=2h tunnel=2h
```
- Числа — это АДРЕСА (включая адрес сети и broadcast). Суффикс `h` — число хостов
(`br_link=2h` → маска /30 для линка и туннеля).
- Вывод: минимальный префикс, адрес сети, маска, первый/последний адрес хоста,
broadcast — таблицей для отчёта и для заполнения переменных скриптов.
## 3. Порядок запуска скриптов
Задание 1:
```
isp.sh -> HQ-RTR -> BR-RTR -> BR-FW -> HQ-SRV -> BR-SRV -> HQ-CLI
```
**Перед каждым запуском:**
1. Откройте скрипт (`vim zadanie1/isp.sh`) — заполните блок «ПЕРЕМЕННЫЕ»
в начале файла (адреса, интерфейсы, имена пакетов по заданиям).
2. Скрипт сам проверит заполнение и перечислит пустые переменные.
3. Запускайте от root: `sudo bash zadanie1/hq-rtr.sh` (или bash от root).
4. Все скрипты можно запускать повторно — конфиги перезаписываются,
строки не дублируются.
Порядок в заданиях 2 и 3 зависит от связей; ориентировочно:
- задание 2: `br-srv.sh` (samba/policy) -> `hq-srv.sh` (RAID/NFS/web) ->
`hq-cli.sh` (NFS/chrony) -> `isp.sh` (chrony-сервер) -> роутеры (DNAT).
Перед этим вручную — ввод HQ-CLI в домен (MANUAL.md) и ssh-copy-id для ansible.
- задание 3: `hq-srv.sh` (ЦС, atop, cups, fail2ban) -> доставка сертификатов
(MANUAL.md) -> `isp.sh` (реверс-прокси, HTTPS после доставки cert) ->
`hq-cli.sh` (доверие CA, принтер) -> `br-srv.sh` (import.sh, плейбук).
## 4. Какие переменные обязательны
Каждый скрипт в начале содержит блок переменных с комментариями. Пустые
(`""`) при запуске приведут к сообщению «Заполните переменные...» и exit 1.
Универсальные, которые заполняются на почти всех машинах:
- `*_IF` — имя сетевого интерфейса (`ip -br link` чтобы посмотреть);
- `*_ADDR`, `*_NET` — адреса из вашего расчёта (формат `адрес/префикс`);
- `*_GW` — шлюзы (адреса соседних роутеров);
- в задании 3 в `isp.sh` — `TLS_CERT_FILE`/`TLS_KEY_FILE` после доставки
сертификатов (MANUAL.md).
Порядок заполнения адресов: сначала `tools/subnet-calc.sh`, потом скрипты
в порядке раздела 3.
## 5. Скрипты проверки (check/)
После каждого задания запускайте на соответствующей машине проверку:
```
check/zadanie1/hq-rtr.sh # и т.п. — имя машины == машина, где запускаем
```
- Скрипт только читает состояние (искл. — временный файл в NFS в одной
проверке). Вывод `[OK]/[FAIL]/[ПРОПУЩЕНО]` сохраняется в
`check_<машина>_<задание>.txt` рядом — приложите к отчёту.
- Заполните переменные в начале (адреса/интерфейсы); пустая переменная →
пункт `[ПРОПУЩЕНО]`, скрипт не падает.
- Код возврата не 0, если есть FAIL.
- Отдельные пункты требуют root (sshd -T, iptables, vtysh, samba-tool) —
видят `[ПРОПУЩЕНО (нужен root)]` без него.
## 6. Что собой представляет ручной шаг
Не всё автоматизируется честно (пароль админа домена, интерактивные установщики,
GUI). Такие места помечены в скриптах `ДЕЛАЕТСЯ ВРУЧНУЮ` и подробно описаны
в `MANUAL.md`. Порядок сохраняется вручную, а команды самопроверки — в конце
каждого скрипта.
## 7. Проверка результата
- Каждый скрипт заканчивает блоком «=== Самопроверка ... ===» — там и в
интерактиве печатаются команды проверки (ping, dig, chronyc, lpstat,
fail2ban-client status, docker ps и т.д.).
- `bash -n <скрипт>` — проверка синтаксиса правок, которую вы делаете
при заполнении переменных.
## 8. Проверить частые неточности
- РЕД ОС 8: имена пакетов/служб могут отличаться от указанных по умолчанию
(dnsmasq? frr? dhcp? nfs-utils?) — по пунктам смотри QUESTIONS.md;
соответствующие значения вынесены в переменные.
- Часовой пояс — везде переменная `EXAM_TZ`, поставь пояс места экзамена.

135
TROUBLESHOOT.md Normal file
View file

@ -0,0 +1,135 @@
# TROUBLESHOOT.md — шпаргалка: частые проблемы и решения
Правило работы: сначала запустите check-скрипт своей машины (он скажет, ЧТО
сломано), затем откройте соответствующий раздел ниже. Все команды безопасны,
кроме отмеченных ОСТОРОЖНО.
## 0. Универсальная диагностика (всегда начинать с этого)
```
ip -4 -br a && ip route # адреса и маршруты
ping -c2 <адрес соседа> # линк жив?
ss -tlnp # что слушает по TCP (нужен root)
ss -ulnp # что слушает по UDP (нужен root)
systemctl status <служба> --no-pager # прямая сводка о службе
journalctl -eu <служба> --no-pager | tail -30 # почему служба упала
```
## 1. Сеть / NetworkManager
| Симптом | Причина | Решение |
|---|---|---|
| «Connection activation failed» | нет кабеля, пустой блок [connection], конфликт профилей | `nmcli con show`, `nmcli dev status`; перезаписать профиль и `nmcli con up <имя>` |
| NM не видит файл .nmconnection | права файла не 600 | `chmod 600 <файл>`, затем `nmcli con reload` |
| Адрес есть, пингов нет | не туда воткнуто; нет маршрута по умолчанию; VLAN-порт не в trunk | проверять `ip route`; на HQ-SW порт к роутеру должен быть trunk с VLAN 100/200/999 |
| Резолвинг не работает | пустой resolv.conf / недоступен DNS | `cat /etc/resolv.conf`, `ping <DNS>`; `systemctl restart NetworkManager` после смены |
## 2. GRE
| Симптом | Причина | Решение |
|---|---|---|
| Туннель есть, пинга нет | в remote указан не тот адрес (нужен адрес роутера в сети ISP) | на ОБЕИХ сторонах `ip tunnel show`; сверить remote/local |
| Пинг от роутера к роутеру есть, от сервера нет | нет маршрутов к офисным сетям | пропишите офисные сети в OSPF (network + passive-interface) или статикой |
| Не переживает перезагрузку | профиль без autoconnect | `nmcli con modify gre1 connection.autoconnect yes` |
## 3. OSPF (frr)
| Симптом | Причина | Решение |
|---|---|---|
| Сосед есть, но офиса не видны | забыли `network <офисная_сеть> area 0` | `vtysh -c 'show running-config'` — сравнить со списком сетей |
| Сосед в 2WAY, не Full | обычной broadcast-сети DR/BDR; в point-to-point туннеле | проще на gre: `ip ospf network point-to-point` на обеих сторонах |
| Соседей нет совсем | network-предложение не совпадает с реальной сетью; интерфейс в passive | проверить network-записи; `passive-interface default` НЕ должен включать туннель |
| MD5 не работает | другой пароль/номер ключа/нет ip ospf authentication | на обоих: `ip ospf authentication message-digest` и ОДИНАКОВЫЙ ключ+пароль |
| OSPF не слушает frr | не включены демоны | ПРОВЕРИТЬ /etc/frr/daemons: zebra=yes, ospfd=yes, `systemctl restart frr` |
## 4. NAT / Интернет
| Симптом | Причина | Решение |
|---|---|---|
| Пинг IP 77.88.8.7 не идёт из офиса | нет MASQUERADE; ip_forward=0 | `iptables -t nat -L POSTROUTING -nv`; `cat /proc/sys/net/ipv4/ip_forward` |
| После reboot правила NAT пропали | iptables не сохранён | `iptables-save > /etc/sysconfig/iptables`, `systemctl enable iptables` (ПРОВЕРИТЬ имя) |
| Пинг IP есть, имена не резолвятся | нет DNS / NAT-адресации | `ping ya.ru`; проверка DNS-конфигурации (раздел 7) |
## 5. DHCP
| Симптом | Причина | Решение |
|---|---|---|
| Клиент не получает адрес | служба dhcpd не активна; client не в нужной сети; range заполнен | `systemctl status dhcpd` (ПРОВЕРИТЬ имя), `nmcli con up <интерфейс>` снова |
| dhcpd не стартует | ошибка конфига (range вне сети, нет subnet) | `dhcpd -t`; `journalctl -eu dhcpd` |
## 6. SSH (порт 2027)
| Симптом | Причина | Решение |
|---|---|---|
| Connection refused | sshd не перезапущен после смены порта; SELinux; firewall | `ss -tlnp \| grep 2027`; `getenforce` → `semanage port -a -t ssh_port_t -p tcp 2027`; `firewall-cmd --add-port=2027/tcp --permanent && firewall-cmd --reload` |
| Permission denied | AllowUsers не содержит пользователя; MaxAuthTries? | `sudo sshd -T | grep -E 'port|allowusers|maxauthtries|banner'` |
| Баннер не показывается | баннер-файл не существует/путь другой | путь в `sshd -T` должен существовать с текстом |
## 7. DNS (dnsmasq)
| Симптом | Причина | Решение |
|---|---|---|
| dig пустой / REFUSED | служба/ports/listen-address | `systemctl status dnsmasq`; `ss -ulnp \| grep 53`; listen-address должен включать 127.0.0.1 и адрес сервера |
| A есть, PTR нет | dnsmasq не выдаёт reverse по hosts | `dig -x <IP>`; при необходимости добавить reverse-зону явно (см. QUESTIONS.md) |
| Внешние имена не резолвятся | нет `server=<адрес>` (форвардер) | `dig +short ya.ru @127.0.0.1`; добавить server-строку, рестарт |
## 8. RAID/mdadm
| Симптом | Причина | Решение |
|---|---|---|
| после reboot нет md0 | нет ARRAY-строки в /etc/mdadm.conf; initramfs старый | строка ARRAY по UUID, затем `dracut -f` |
| mdadm: device busy | диски смонтированы/грязные | размонтировать; `wipefs -a /dev/vdX` ОСТОРОЖНО (только array-диски!) |
| /raid не монтируется | неверный UUID в fstab | `blkid /dev/md0`; сверить с fstab; `mount -a` покажет ошибку |
## 9. NFS
| Симптом | Причина | Решение |
|---|---|---|
| mount: access denied | сеть клиента не в exports | `exportfs -v`; поправить строку; `exportfs -ra` |
| mount: connection refused | службы rpcbind/nfs-server не активны | `systemctl enable --now rpcbind nfs-server` (ПРОВЕРИТЬ имена); `ss -tlnp \| grep 2049` |
| Permission denied при записи | права ФС каталога | `ls -l /raid/nfs`, выставить владельца/права |
## 10. chrony
| Симптом | Причина | Решение |
|---|---|---|
| Stratum 10 | нет синхронизации с upstream | `chronyc sources -v`; доступен ли upstream; порт 123/udp |
| Клиенты не синхронизируются | нет allow <сеть> на сервере; firewall | добавить `allow <a.b.c.d/prefix>`, рестарт chronyd |
## 11. Docker
| Симптом | Причина | Решение |
|---|---|---|
| docker: command not found | пакет не установлен (или podman alias) | `dnf list installed \| grep -i dock`; соответствие пакету РЕД ОС 8 (ПРОВЕРИТЬ) |
| permission denied | docker требует root | `sudo docker ...` |
| compose: no such image | образ не загружен | `docker load -i <tar>`, затем `docker compose up -d` |
| 8080 не отвечает | контейнер упал | `docker ps -a`, `docker logs <id>`, `ss -tlnp | grep 8080` |
## 12. Nginx / apache / mariadb
| Симптом | Причина | Решение |
|---|---|---|
| nginx -t: [emerg] ... строка X | ошибка в exam-proxy.conf | поправить строку X; после правки `systemctl reload nginx` |
| 502 Bad Gateway | бэкенд недоступен с ISP (маршруты!) | `curl -v <бэкенд-IP:порт>` с ISP; если нет — статические маршруты или OSPF |
| 401 всё время | битый htpasswd | `printf "%s:%s\n" WEB "$(openssl passwd -apr1 'P@ssw0rd')" > файл` |
| виртуальный хост показывает дефолт | нет Host-маршрутизации | проверять server_name и какой блок ловит (nginx -t покажет; curl -H "Host: ...") |
| страница 500 | ошибки PHP/подключения к БД | `tail /var/log/httpd/error_log` (ПРОВЕРИТЬ путь на РЕД ОС 8); сверить учётные данные БД в index.php |
## 13. Samba DC
| Симптом | Причина | Решение |
|---|---|---|
| user create: password policy | пароль короче/проще политики | `samba-tool domain passwordsettings show`; ИСПОЛЬЗОВАТЬ пароль под политику |
| realm join fails | DNS BR-SRV не прописан на клиенте | `echo "nameserver <BR-SRV>" > /etc/resolv.conf`; тест `dig <домен>` |
| getent passwd hquser1 пусто | sssd/winbind не настроен/внизу | `systemctl status sssd`; логи; соглашение о формате имён группы ('hq' vs 'hq@домен') |
| sudo файл игнорируется | права не 440 / неверное имя группы | `chmod 440 /etc/sudoers.d/...`; имя группы сверить с getent |
## 14. fail2ban
| Симптом | Причина | Решение |
|---|---|---|
| не запускается | backend не видит журнал | в jail: `backend = systemd` (если используете journald) |
| IP не банится | maxretry/bantime не применились, jail не active | `sudo fail2ban-client status sshd`; проверьте порт 2027 в jail; `fail2ban-client reload` |
## 15. Сертификаты / https
| Симптом | Причина | Решение |
|---|---|---|
| certificate expired / not yet valid | уехало системное время | `timedatectl`; chrony должен тянуть время (задание 2) |
| unable to verify | клиент не доверяет корневому CA | root.crt в /etc/pki/ca-trust/source/anchors, `update-ca-trust` |
| браузер: CERT_AUTHORITY_INVALID | нет SAN или не доверие к CA | `openssl x509 -in cert -noout -ext subjectAltName`; домен ДОЛЖЕН быть в SAN |
## 16. Прочее
- Перезагрузка после большинства скриптов улучшает сходимость (особенно VLAN
и туннели). Ловить проблемы после reboot — пройтись check-скриптами.
- git clone падает по сертификату — на экзамене допустимо
`git config --global http.sslVerify false` (временно) или scp репозитория.
- Пустой DISPLAY? — всё по консоли, виртуальности GUI отсутствуют.
Если что-то сломалось не из этого списка: запустите check-скрипт машины,
посмотрите журналы (`journalctl -eu <служба> | tail -30`) и поиском по этому
файлу — похожие симптомы.