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

ТГКТим даба

3 модуль
1 задание - импорт пользователей в домен
sudo mkdir -p /mnt/additional
sudo mount /home/sshuser/Загрузки/Additional.iso /mnt/additional

3 модуль

1 задание - импорт пользователей в домен

sudo mkdir -p /mnt/additional

sudo mount /home/sshuser/Загрузки/Additional.iso /mnt/additional

cd /mnt/additional

nanо import_users.sh

#!/bin/bash

CSV_FILE="/mnt/additional/Users.csv"

echo "Импорт пользователей из $CSV_FILE"

echo "=================================="

tail -n +2 "$CSV_FILE" | while IFS=';' read -r first_name last_name role phone ou street zip city country password

do

# Создаем логин: имя.фамилия (в нижнем регистре)

username=$(echo "${first_name}.${last_name}" | tr '[:upper:]' '[:lower:]' | sed 's/ //g')

echo "Создаю: $username ($first_name $last_name)"

# Минимальная команда создания пользователя

sudo samba-tool user create "$username" "$password" \

--given-name="$first_name" \

--surname="$last_name"

# Отключаем требование смены пароля при первом входе

sudo samba-tool user setpassword "$username" --newpassword="$password" --must-change-at-next-login=no

echo "Готово"

echo "---"

done

echo "Импорт завершен!"

sudo chmod +x import_users.sh

sudo ./import_users.sh

Проверка пользователей в домене

sudo samba-tool user list

на hq-cli

sudo realm permit –all

sudo nano /etc/sssd/sssd.conf

меняем стоку

use_fully_qualified_names = False

и добовляем

ad_gpo_access_control = permissive

после перезапускаем службу

sudo systemctl restart sssd

Настройте PAM

sudo pam-auth-update --enable mkhomedir

sudo nano /etc/pam.d/common-session

session required pam_mkhomedir.so skel=/etc/skel umask=0022

после перезапускаем службу

sudo systemctl restart sssd

2 задание - центра сертификации

### Шаг 1: Установка OpenSSL (уже есть, но проверим)

```bash

sudo apt update

sudo apt install -y openssl nginx

### Шаг 2: Создание корневого CA с RSA/SHA256

```bash

sudo mkdir -p /etc/ssl/ca/{certs,newcerts,private,crl}

sudo chmod 700 /etc/ssl/ca/private

sudo touch /etc/ssl/ca/index.txt

sudo echo 1000 > /etc/ssl/ca/serial

# Конфиг CA

sudo nano /etc/ssl/ca/openssl.cnf

```

Содержимое `/etc/ssl/ca/openssl.cnf`:

```ini

[ ca ]

default_ca = CA_default

[ CA_default ]

dir = /etc/ssl/ca

certs = $dir/certs

new_certs_dir = $dir/newcerts

database = $dir/index.txt

serial = $dir/serial

RANDFILE = $dir/private/.rand

private_key = $dir/private/ca.key

certificate = $dir/ca.crt

default_days = 30

default_md = sha256

policy = policy_match

[ policy_match ]

countryName = match

stateOrProvinceName = match

organizationName = match

organizationalUnitName = optional

commonName = supplied

emailAddress = optional

[ req ]

default_bits = 2048

default_md = sha256

prompt = no

distinguished_name = req_distinguished_name

[ req_distinguished_name ]

C = RU

ST = Moscow

L = Moscow

O = AU-Team

OU = IT Department

CN = AU-Team Root CA

[ v3_ca ]

basicConstraints = critical, CA:true

keyUsage = critical, keyCertSign, cRLSign

[ v3_req ]

basicConstraints = CA:FALSE

keyUsage = nonRepudiation, digitalSignature, keyEncipherment

```

---

### Шаг 3: Генерация корневого сертификата

```bash

cd /etc/ssl/ca

# Создаем приватный ключ CA

sudo openssl genrsa -out private/ca.key 4096

# Создаем самоподписанный сертификат CA

sudo openssl req -new -x509 -key private/ca.key -out ca.crt \

-days 365 -config openssl.cnf

# Проверяем

sudo openssl x509 -in ca.crt -text -noout

```

---

### Шаг 4: Сертификат для web.au-team.irpo

```bash

# Создаем приватный ключ

sudo openssl genrsa -out web.key 2048

# Создаем CSR (запрос на подпись)

sudo openssl req -new -key web.key -out web.csr \

-subj "/C=RU/ST=Moscow/L=Moscow/O=AU-Team/OU=Web Server/CN=web.au-team.irpo"

# Создаем конфиг с альтернативными именами

sudo nano /etc/ssl/ca/web.ext

```

Содержимое `/etc/ssl/ca/web.ext`:

```ini

authorityKeyIdentifier=keyid,issuer

basicConstraints=CA:FALSE

keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment

subjectAltName = @alt_names

[alt_names]

DNS.1 = web.au-team.irpo

DNS.2 = hq-srv.au-team.irpo

IP.1 = 192.168.10.2

```

Подписываем сертификат:

```bash

sudo openssl x509 -req -in web.csr \

-CA ca.crt -CAkey private/ca.key \

-CAcreateserial -out web.crt \

-days 30 -sha256 \

-extfile web.ext

```

---

### Шаг 5: Сертификат для docker.au-team.irpo

```bash

# Ключ

sudo openssl genrsa -out docker.key 2048

# CSR

sudo openssl req -new -key docker.key -out docker.csr \

-subj "/C=RU/ST=Moscow/L=Moscow/O=AU-Team/OU=Docker Server/CN=docker.au-team.irpo"

# Конфиг с альтернативными именами

sudo nano /etc/ssl/ca/docker.ext

```

Содержимое `/etc/ssl/ca/docker.ext`:

```ini

authorityKeyIdentifier=keyid,issuer

basicConstraints=CA:FALSE

keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment

subjectAltName = @alt_names

[alt_names]

DNS.1 = docker.au-team.irpo

DNS.2 = br-srv.au-team.irpo

IP.1 = 192.168.11.2

```

Подписываем:

```bash

sudo openssl x509 -req -in docker.csr \

-CA ca.crt -CAkey private/ca.key \

-CAcreateserial -out docker.crt \

-days 30 -sha256 \

-extfile docker.ext

```

---

### Шаг 6: Проверяем сертификаты

```bash

# Проверка цепочки

sudo openssl verify -CAfile ca.crt web.crt

sudo openssl verify -CAfile ca.crt docker.crt

# Просмотр деталей

sudo openssl x509 -in web.crt -text -noout | head -20

```

---

### Шаг 7: Копируем сертификаты на ISP

```bash

# С HQ-SRV на ISP

scp /etc/ssl/ca/ca.crt sshuser@isp.au-team.irpo:/tmp/

scp /etc/ssl/ca/web.crt /etc/ssl/ca/web.key sshuser@isp.au-team.irpo:/tmp/

scp /etc/ssl/ca/docker.crt /etc/ssl/ca/docker.key sshuser@isp.au-team.irpo:/tmp/

```

> Илья: На ISP:

```bash

sudo mkdir -p /etc/nginx/ssl

sudo mv /tmp/*.crt /tmp/*.key /etc/nginx/ssl/

sudo chmod 600 /etc/nginx/ssl/*.key

```

---

### Шаг 8: Настройка Nginx на ISP для HTTPS

web.au-team.irpo:

```bash

sudo nano /etc/nginx/sites-available/web.au-team.irpo

```

```nginx

server {

listen 443 ssl;

server_name web.au-team.irpo;

ssl_certificate /etc/nginx/ssl/web.crt;

ssl_certificate_key /etc/nginx/ssl/web.key;

ssl_protocols TLSv1.2 TLSv1.3;

ssl_ciphers HIGH:!aNULL:!MD5;

# Аутентификация (оставляем как было)

auth_basic "Restricted Area";

auth_basic_user_file /etc/nginx/conf.d/.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;

}

}

server {

listen 80;

server_name web.au-team.irpo;

return 301 https://$server_name$request_uri;

}

```

docker.au-team.irpo:

```bash

sudo nano /etc/nginx/sites-available/docker.au-team.irpo

```

```nginx

server {

listen 443 ssl;

server_name docker.au-team.irpo;

ssl_certificate /etc/nginx/ssl/docker.crt;

ssl_certificate_key /etc/nginx/ssl/docker.key;

ssl_protocols TLSv1.2 TLSv1.3;

ssl_ciphers HIGH:!aNULL:!MD5;

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;

}

}

server {

listen 80;

server_name docker.au-team.irpo;

return 301 https://$server_name$request_uri;

}

```

Активируем и перезапускаем:

```bash

sudo ln -sf /etc/nginx/sites-available/web.au-team.irpo /etc/nginx/sites-enabled/

sudo ln -sf /etc/nginx/sites-available/docker.au-team.irpo /etc/nginx/sites-enabled/

sudo nginx -t

sudo systemctl restart nginx

```

---

### Шаг 9: Установка корневого сертификата на HQ-CLI

```bash

# Копируем с ISP на HQ-CLI

scp sshuser@isp.au-team.irpo:/etc/nginx/ssl/ca.crt /tmp/

# На HQ-CLI

sudo cp /tmp/ca.crt /usr/local/share/ca-certificates/au-team-ca.crt

sudo update-ca-certificates

# Проверяем

curl --cacert /usr/local/share/ca-certificates/au-team-ca.crt https://web.au-team.irpo

```

### Шаг 10: Проверка работы

```bash

# На HQ-CLI

curl -I https://web.au-team.irpo

curl -I https://docker.au-team.irpo

# На ISP (локальная проверка)

curl -k https://localhost

```

3 задание – ip tunnel

### 1. Установка и настройка IPsec (strongSwan) на HQ-RTR и BR-RTR

#### Шаг 1: Установка strongSwan

sudo apt update

sudo apt install -y strongswan strongswan-swanctl

если ошибки

sudo apt remove --purge -y strongswan strongswan-pki libcharon-extra-plugins

sudo apt install -y strongswan strongswan-swanctl charon-systemd

#### Шаг 2: Генерация предварительных ключей (PSK)

На HQ-RTR и BR-RTR создадим одинаковый ключ:

sudo sh -c 'echo "P@ssw0rd_IPsec_Key" > /etc/ipsec.secrets'

#### Шаг 3: Настройка конфигурации IPsec

Создадим файл конфигурации /etc/strongswan.conf:

На HQ-RTR:

sudo nano /etc/strongswan.conf

charon {

load_modular = yes

interfaces_use = ens33

install_routes = no

plugins {

include strongswan.d/charon/*.conf

}

}

include strongswan.d/*.conf

На BR-RTR:

sudo nano /etc/strongswan.conf

charon {

load_modular = yes

interfaces_use = ens33

install_routes = no

plugins {

include strongswan.d/charon/*.conf

}

}

include strongswan.d/*.conf

#### Шаг 4: Настройка подключения IPsec

Создадим файл подключения /etc/swanctl/conf.d/tunnel.conf:

На HQ-RTR:

sudo nano /etc/swanctl/conf.d/tunnel.conf

connections {

hq-br {

local_addrs = 172.16.1.2

remote_addrs = 172.16.2.2

local {

auth = psk

id = hq-rtr.au-team.irpo

}

remote {

auth = psk

id = br-rtr.au-team.irpo

}

children {

gre {

local_ts = 10.10.10.0/30

remote_ts = 10.10.10.0/30

esp_proposals = aes256-sha256-modp2048

start_action = start

close_action = restart

}

}

version = 2

proposals = aes256-sha256-modp2048

}

}

secrets {

ike-hq-br {

secret = "P@ssw0rd_IPsec_Key"

}

}

На BR-RTR:

sudo nano /etc/swanctl/conf.d/tunnel.conf

connections {

br-hq {

local_addrs = 172.16.2.2

remote_addrs = 172.16.1.2

local {

auth = psk

id = br-rtr.au-team.irpo

}

remote {

auth = psk

id = hq-rtr.au-team.irpo

}

children {

gre {

local_ts = 10.10.10.0/30

remote_ts = 10.10.10.0/30

esp_proposals = aes256-sha256-modp2048

start_action = start

close_action = restart

}

}

version = 2

proposals = aes256-sha256-modp2048

}

}

secrets {

ike-br-hq {

secret = "P@ssw0rd_IPsec_Key"

}

}

#### Шаг 5: Запуск и включение strongSwan

sudo systemctl start strongswan

sudo systemctl enable strongswan

---

### 2. Изменение конфигурации GRE-туннеля для работы через IPsec

#### Шаг 6: Изменение интерфейса GRE

В файле /etc/network/interfaces на HQ-RTR и BR-RTR заменим старый GRE-туннель на защищённый:

HQ-RTR:

auto gre30

iface gre30 inet tunnel

address 10.10.10.1

netmask 255.255.255.252

mode gre

local 172.16.1.2

endpoint 172.16.2.2

ttl 225

post-up ip route add 192.168.11.0/28 via 10.10.10.2

BR-RTR:

auto gre30

iface gre30 inet tunnel

address 10.10.10.2

netmask 255.255.255.252

mode gre

local 172.16.2.2

endpoint 172.16.1.2

ttl 225

post-up ip route add 192.168.10.0/27 via 10.10.10.1

post-up ip route add 192.168.10.32/28 via 10.10.10.1

#### Шаг 7: Перезапуск сетевых служб

sudo systemctl restart networking

sudo systemctl restart strongswan

---

### 3. Проверка работы IPsec1

#### Шаг 8: Проверка состояния туннеля

sudo swanctl --list-conns

sudo swanctl --list-sas

#### Шаг 9: Проверка доступности сетей

ping -c 4 192.168.11.2 # с HQ-RTR на BR-SRV

ping -c 4 192.168.10.2 # с BR-RTR на HQ-SRV

---

### 4. Проверка работы OSPF через защищённый туннель

#### Шаг 10: Проверка OSPF-соседства

sudo vtysh

show ip ospf neighbor

#### Шаг 11: Проверка маршрутов

ip route show

5 задание – принтер

### Часть 1: Настройка CUPS-сервера на HQ-SRV

#### Шаг 1: Установка CUPS и PDF-принтера

Bash

sudo apt update

sudo apt install -y cups cups-pdf

#### Шаг 2: Настройка прав доступа к CUPS

Редактируем конфигурационный файл /etc/cups/cupsd.conf:

Bash

sudo nano /etc/cups/cupsd.conf

Изменяем следующие параметры:

1. Разрешаем доступ с сети:

Listen 0.0.0.0:631

2. Разрешаем доступ для локальной сети:

В секции <Location /> добавляем:

Order allow,deny

Allow 192.168.10.0/24

3. Разрешаем доступ к админке:

В секции <Location /admin>:

Order allow,deny

Allow 192.168.10.0/24

Пример изменённых секций:

Listen 0.0.0.0:631

<Location />

Order allow,deny

Allow 192.168.10.0/24

</Location>

<Location /admin>

Order allow,deny

Allow 192.168.10.0/24

</Location>

#### Шаг 3: Добавляем пользователя в группу lpadmin

Bash

sudo usermod -aG lpadmin sshuser

#### Шаг 4: Перезапуск CUPS

Bash

sudo systemctl restart cups

sudo systemctl enable cups

#### Шаг 5: Проверка статуса

Bash

sudo systemctl status cups

---

### Часть 2: Добавление виртуального PDF-принтера

#### Шаг 1: Проверяем доступные драйверы

Bash

lpinfo -v

#### Шаг 2: Добавляем PDF-принтер через командную строку

Bash

sudo lpadmin -p PDF -E -v cups-pdf:/ -m drv:///cups-pdf.ppd

#### Шаг 3: Разрешаем общий доступ к принтеру

Bash

sudo lpadmin -p PDF -o printer-is-shared=true

#### Шаг 4: Проверяем список принтеров

Bash

lpstat -p -d

Вывод должен содержать:

printer PDF is idle. enabled since Mon 2026-01-28 12:00:00 MSK

---

### Часть 3: Настройка клиента HQ-CLI

#### Шаг 1: Установка клиентских утилит

Bash

sudo apt update

sudo apt install -y cups-client

#### Шаг 2: Добавление сетевого принтера

Bash

sudo lpadmin -p HQ-PDF -E -v ipp://192.168.10.2:631/printers/PDF -m everywhere

#### Шаг 3: Установка принтера по умолчанию

Bash

sudo lpoptions -d HQ-PDF

#### Шаг 4: Проверка доступности принтера

Bash

lpstat -p -d

Ожидаемый вывод:

printer HQ-PDF is idle. enabled since Mon 2026-01-28 12:05:00 MSK

system default destination: HQ-PDF

---

### Часть 4: Тестирование печати

#### Шаг 1: Печать тестовой страницы

Bash

echo "Test print from HQ-CLI" | lpr -P HQ-PDF

#### Шаг 2: Проверка очереди печати

Bash

lpq -P HQ-PDF

#### Шаг 3: Где сохраняются PDF-файлы на сервере

На HQ-SRV PDF-файлы сохраняются в:

Bash

/var/spool/cups-pdf/sshuser/

(где sshuser — имя пользователя, от которого была отправлена печать)

---

### Часть 5: Веб-интерфейс CUPS (опционально)

#### Доступ через браузер:

http://192.168.10.2:631

Логин: sshuser (или любой пользователь из группы lpadmin)

#### 3. Команды для проверки:

На HQ-SRV:

Bash

lpstat -p -d

sudo systemctl status cups

ls /var/spool/cups-pdf/sshuser/

На HQ-CLI:

Bash

lpstat -p -d

lpoptions

6 задание – логирование

## 1. Конфигурация rsyslog на HQ-SRV (сервер)

### /etc/rsyslog.conf:

```bash

sudo nano /etc/rsyslog.conf

```

Раскомментировать/добавить:

```python

# Provides UDP syslog reception

module(load="imudp")

input(type="imudp" port="514")

# Provides TCP syslog reception

module(load="imtcp")

input(type="imtcp" port="514")

```

В конец файла добавить:

```undefined

# Template for remote host logs

$template RemoteHost, "/opt/%HOSTNAME%/%PROGRAMNAME%.log"

$template RemoteAuth, "/opt/%HOSTNAME%/auth.log"

# Rules for filtering and storing

if ($fromhost-ip != '127.0.0.1') then {

auth.*,authpriv.* -?RemoteAuth

*.=warning;*.=err;*.=crit;*.=alert;*.=emerg -?RemoteHost

& stop

}

```

## 2. Конфигурация rsyslog на клиентах

### HQ-RTR, BR-RTR, BR-SRV:

```bash

sudo nano /etc/rsyslog.conf

```

Добавить в конец файла:

```undefined

# Send logs to HQ-SRV

*.=warning;*.=err;*.=crit;*.=alert;*.=emerg @192.168.10.2:514

auth.*,authpriv.* @192.168.10.2:514

```

## 3. Конфигурация logrotate на HQ-SRV

### /etc/logrotate.d/remote_logs:

```bash

cat << 'EOF' | sudo tee /etc/logrotate.d/remote_logs

/opt/hq-rtr/*.log

/opt/br-rtr/*.log

/opt/br-srv/*.log {

weekly

rotate 4

compress

delaycompress

missingok

notifempty

size 10M

create 0640 root adm

sharedscripts

postrotate

systemctl reload rsyslog

endscript

}

EOF

```

## 4. Полный скрипт настройки для HQ-SRV

```bash

#!/bin/bash

# Настройка централизованного логирования - HQ-SRV

# 1. Установка rsyslog

sudo apt update

sudo apt install -y rsyslog

# 2. Создание структуры директорий

sudo mkdir -p /opt/{hq-rtr,br-rtr,br-srv}

sudo chown -R root:adm /opt

sudo chmod -R 755 /opt

# 3. Резервное копирование оригинального конфига

sudo cp /etc/rsyslog.conf /etc/rsyslog.conf.bak

# 4. Настройка конфигурации rsyslog

sudo tee -a /etc/rsyslog.conf > /dev/null << 'EOR'

# Provides UDP syslog reception

module(load="imudp")

input(type="imudp" port="514")

# Provides TCP syslog reception

module(load="imtcp")

input(type="imtcp" port="514")

# Template for remote host logs

$template RemoteHost, "/opt/%HOSTNAME%/%PROGRAMNAME%.log"

$template RemoteAuth, "/opt/%HOSTNAME%/auth.log"

# Rules for filtering and storing

if ($fromhost-ip != '127.0.0.1') then {

auth.*,authpriv.* -?RemoteAuth

*.=warning;*.=err;*.=crit;*.=alert;*.=emerg -?RemoteHost

& stop

}

EOR

# 5. Настройка конфигурации logrotate

sudo tee /etc/logrotate.d/remote_logs > /dev/null << 'EOL'

/opt/hq-rtr/*.log

/opt/br-rtr/*.log

/opt/br-srv/*.log {

weekly

rotate 4

compress

delaycompress

missingok

notifempty

size 10M

create 0640 root adm

sharedscripts

postrotate

systemctl reload rsyslog

endscript

}

EOL

# 6. Перезапуск служб

sudo systemctl restart rsyslog

sudo systemctl enable rsyslog

# 7. Открытие порта в firewall (если используется)

sudo ufw allow 514/tcp

sudo ufw allow 514/udp

sudo ufw reload

# 8. Проверка конфигурации

sudo rsyslogd -N1

sudo logrotate -d /etc/logrotate.d/remote_logs

echo "Настройка завершена!"

echo "Проверьте статус: sudo systemctl status rsyslog"

```

## 5. Полный скрипт настройки для клиентов

```bash

#!/bin/bash

# Настройка отправки логов - HQ-RTR, BR-RTR, BR-SRV

# Резервное копирование конфига

sudo cp /etc/rsyslog.conf /etc/rsyslog.conf.bak

# Добавление правил отправки логов

sudo tee -a /etc/rsyslog.conf > /dev/null << 'EOF'

# Send logs to HQ-SRV

*.=warning;*.=err;*.=crit;*.=alert;*.=emerg @192.168.10.2:514

auth.*,authpriv.* @192.168.10.2:514

EOF

# Перезапуск службы

sudo systemctl restart rsyslog

sudo systemctl enable rsyslog

echo "Клиент настроен для отправки логов на 192.168.10.2:514"

```

## 6. Команды проверки работы

### На HQ-SRV:

```bash

# Проверка службы

sudo systemctl status rsyslog

# Проверка открытых портов

sudo netstat -tulpn | grep 514

# Проверка структуры директорий

sudo tree /opt

# Мониторинг поступления логов

sudo tail -f /opt/hq-rtr/auth.log

# Проверка конфигурации logrotate

sudo logrotate -d /etc/logrotate.d/remote_logs

```

### На клиентах (HQ-RTR, BR-RTR, BR-SRV):

```bash

# Отправка тестового сообщения

logger -p auth.warning "Test message from $(hostname) at $(date)"

# Проверка конфигурации

sudo rsyslogd -N1

```

9 задание - fail2ban —------------------------------------

Задание 9: Настройка fail2ban для защиты SSH на HQ-SRV (Debian)

Цель:

Установить и настроить fail2ban таким образом, чтобы после 3 неудачных попыток входа по SSH IP-адрес атакующего блокировался на 1 минуту.

Выполнение:

1. Установка fail2ban

bash

sudo apt update

sudo apt install fail2ban -y

2. Настройка конфигурации

bash

sudo tee /etc/fail2ban/jail.local << 'EOF'

[DEFAULT]

ignoreip = 127.0.0.1/8

bantime = 60

findtime = 600

maxretry = 3

[sshd]

enabled = true

port = ssh

filter = sshd

backend = systemd

maxretry = 3

bantime = 60

findtime = 600

EOF

4. Проверка конфигурации

Перед запуском убедимся, что синтаксис корректен:

bash

sudo fail2ban-client -t

Ожидаемый вывод: OK: configuration test is successful.

5. Запуск и включение автозагрузки

bash

sudo systemctl start fail2ban

sudo systemctl enable fail2ban

sudo systemctl status fail2ban

sudo fail2ban-client status

sudo fail2ban-client status sshd

7 задание —----------------------------------

## 7 задание – мониторинг с помощью Zabbix (Модуль 3)

**Цель:** Развернуть систему мониторинга на сервере HQ-SRV, которая будет отслеживать состояние HQ-SRV и BR-SRV, отображать нагрузку CPU, использование оперативной памяти и дискового пространства. Мониторинг должен быть доступен внутри офиса HQ по URL `http://mon.au-team.irpo` с учётными данными `admin` / `P@ssw0rd`. Необходимо использовать открытое ПО, обеспечить простоту развёртывания и готовый веб-интерфейс без мастера установки.

---

### 1. Выбор решения

Используется **Zabbix 6.4 LTS**, развёртываемый в Docker-контейнерах на сервере HQ-SRV. Компоненты:

- **MySQL 8.0** – база данных.

- **Zabbix Server** – ядро системы.

- **Zabbix Web (Nginx)** – веб-интерфейс, слушает порт 8081 на локальном интерфейсе.

- Доступ через Apache (уже работает на HQ-SRV) по порту 80 с проксированием на локальный порт 8081.

---

### 2. Установка Docker и Docker Compose (если не установлены)

На HQ-SRV выполните:

```bash

sudo apt update

sudo apt install -y docker.io docker-compose

sudo systemctl enable docker --now

sudo usermod -aG docker $USER

```

**Важно:** После добавления пользователя в группу `docker` выйдите из сессии и зайдите снова (или перезагрузите SSH-соединение), чтобы изменения вступили в силу.

---

### 3. Подготовка директории и файла `docker-compose.yml`

```bash

sudo mkdir -p /opt/zabbix

sudo chown $USER:$USER /opt/zabbix

cd /opt/zabbix

```

Создайте файл `docker-compose.yml` со следующим содержимым:

```yaml

version: '3.8'

services:

mysql:

image: mysql:8.0

container_name: zabbix-mysql

environment:

MYSQL_ROOT_PASSWORD: rootp@ssw0rd

MYSQL_DATABASE: zabbix

MYSQL_USER: zabbix

MYSQL_PASSWORD: zabbixp@ssw0rd

volumes:

- mysql-data:/var/lib/mysql

networks:

- zabbix-net

restart: unless-stopped

zabbix-server:

image: zabbix/zabbix-server-mysql:alpine-6.4-latest

container_name: zabbix-server

environment:

DB_SERVER_HOST: mysql

MYSQL_DATABASE: zabbix

MYSQL_USER: zabbix

MYSQL_PASSWORD: zabbixp@ssw0rd

ZBX_CACHESIZE: 256M

ZBX_HISTORYCACHESIZE: 128M

ZBX_TRENDCACHESIZE: 128M

ports:

- "10051:10051"

networks:

- zabbix-net

depends_on:

- mysql

restart: unless-stopped

zabbix-web:

image: zabbix/zabbix-web-nginx-mysql:alpine-6.4-latest

container_name: zabbix-web

environment:

ZBX_SERVER_HOST: zabbix-server

DB_SERVER_HOST: mysql

MYSQL_DATABASE: zabbix

MYSQL_USER: zabbix

MYSQL_PASSWORD: zabbixp@ssw0rd

PHP_TZ: Europe/Moscow

ports:

- "127.0.0.1:8081:8080"

networks:

- zabbix-net

depends_on:

- mysql

- zabbix-server

restart: unless-stopped

volumes:

mysql-data:

networks:

zabbix-net:

driver: bridge

```

**Объяснение:**

- `mysql-data` – том для сохранения данных БД.

- Zabbix-server слушает порт 10051 для агентов.

- Веб-интерфейс доступен только локально на порту 8081.

- Временная зона установлена `Europe/Moscow`.

---

### 4. Запуск контейнеров

```bash

docker-compose up -d

```

Проверьте состояние:

```bash

docker-compose ps

```

Все три контейнера должны быть в статусе `Up`. Если `zabbix-server` перезапускается (статус `Restarting`), переходите к следующему шагу (инициализация БД вручную).

---

### 5. Ручная инициализация базы данных (если автоинициализация не сработала)

Если контейнер `zabbix-server` не может запуститься из-за ошибки "cannot use database ... its users table is empty", выполните следующие команды.

#### 5.1. Остановите сервер Zabbix

```bash

docker-compose stop zabbix-server

```

#### 5.2. Извлеките файл схемы из образа

```bash

docker run --rm --entrypoint cat zabbix/zabbix-server-mysql:alpine-6.4-latest /usr/share/doc/zabbix-server-mysql/create.sql.gz > create.sql.gz

```

#### 5.3. Пересоздайте базу данных

Подключитесь к MySQL как root:

```bash

docker exec -it zabbix-mysql mysql -uroot -prootp@ssw0rd

```

Выполните SQL-команды:

```sql

DROP DATABASE IF EXISTS zabbix;

CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'%';

FLUSH PRIVILEGES;

EXIT;

```

#### 5.4. Временно разрешите создание функций

```bash

docker exec -it zabbix-mysql mysql -uroot -prootp@ssw0rd -e "SET GLOBAL log_bin_trust_function_creators = 1;"

```

#### 5.5. Импортируйте схему

```bash

gunzip -c create.sql.gz | docker exec -i zabbix-mysql mysql -uzabbix -pzabbixp@ssw0rd zabbix

```

Убедитесь, что ошибок нет.

#### 5.6. Запустите сервер Zabbix

```bash

docker-compose start zabbix-server

```

Проверьте логи:

```bash

docker logs -f zabbix-server

```

Должен отобразиться успешный старт без ошибок БД.

---

### 6. Настройка доступа через Apache (прокси)

На HQ-SRV уже работает веб-сервер Apache. Настроим виртуальный хост для домена `mon.au-team.irpo`.

#### 6.1. Включите модули прокси

```bash

sudo a2enmod proxy proxy_http

sudo systemctl restart apache2

```

#### 6.2. Создайте конфигурацию виртуального хоста

```bash

sudo nano /etc/apache2/sites-available/mon.au-team.irpo.conf

```

Содержимое:

```apache

<VirtualHost *:80>

ServerName mon.au-team.irpo

ProxyPreserveHost On

ProxyPass / http://127.0.0.1:8081/

ProxyPassReverse / http://127.0.0.1:8081/

ErrorLog ${APACHE_LOG_DIR}/mon-error.log

CustomLog ${APACHE_LOG_DIR}/mon-access.log combined

</VirtualHost>

```

#### 6.3. Активируйте сайт и перезагрузите Apache

```bash

sudo a2ensite mon.au-team.irpo.conf

sudo systemctl reload apache2

```

---

### 7. Добавление DNS-записи для `mon.au-team.irpo`

На HQ-SRV (DNS-сервер) отредактируйте файл прямой зоны:

```bash

sudo nano /etc/bind/zones/db.au-team.irpo

```

Добавьте строку (если ещё нет):

```

mon IN A 192.168.10.2

```

Увеличьте серийный номер (например, измените `3` на `4`) и перезапустите Bind:

```bash

sudo systemctl restart bind9

```

Проверьте разрешение:

```bash

nslookup mon.au-team.irpo 127.0.0.1

```

Должен вернуться IP `192.168.10.2`.

---

### 8. Установка и настройка Zabbix-агентов

#### 8.1. На HQ-SRV

Установите агент:

```bash

sudo apt update

sudo apt install -y zabbix-agent

```

Отредактируйте конфигурацию:

```bash

sudo nano /etc/zabbix/zabbix_agentd.conf

```

Приведите к виду:

```

Server=127.0.0.1

ServerActive=127.0.0.1

Hostname=HQ-SRV

```

Запустите и добавьте в автозагрузку:

```bash

sudo systemctl restart zabbix-agent

sudo systemctl enable zabbix-agent

```

#### 8.2. На BR-SRV

Подключитесь по SSH (порт 2026, пользователь `sshuser`):

```bash

ssh sshuser@br-srv.au-team.irpo -p 2026

```

Выполните те же команды, но с другими параметрами:

```bash

sudo apt update

sudo apt install -y zabbix-agent

sudo nano /etc/zabbix/zabbix_agentd.conf

```

Укажите:

```

Server=192.168.10.2

ServerActive=192.168.10.2

Hostname=BR-SRV

```

Запустите агент:

```bash

sudo systemctl restart zabbix-agent

sudo systemctl enable zabbix-agent

```

Выйдите из BR-SRV.

---

### 9. Добавление хостов в Zabbix

Откройте браузер и перейдите по адресу `http://mon.au-team.irpo`. Вы должны увидеть страницу входа Zabbix.

Учётные данные по умолчанию: **Admin** / **zabbix**. Войдите.

#### 9.1. Добавьте хост HQ-SRV

- Перейдите **Configuration → Hosts** → **Create host**.

- **Host name**: `HQ-SRV`

- **Visible name**: `HQ-SRV`

- **Templates**: выберите `Template OS Linux by Zabbix agent`

- **Interfaces**: добавьте агентный интерфейс:

- Type: `Zabbix agent`

- IP address: `127.0.0.1`

- Port: `10050`

- Нажмите **Add**.

#### 9.2. Добавьте хост BR-SRV

Аналогично, но:

- **Host name**: `BR-SRV`

- **IP address**: `192.168.11.2`

- Остальное так же.

Через 1–2 минуты в колонке **Availability** появится зелёный значок ZBX для обоих хостов.

---

### 10. Создание пользователя `admin` с паролем `P@ssw0rd`

- Перейдите **Administration → Users** → **Create user**.

- Заполните:

- **Alias**: `admin`

- **Name**: `Admin`

- **Password**: `P@ssw0rd`

- **Password (once again)**: `P@ssw0rd`

- **Groups**: выберите `Zabbix administrators`

- Нажмите **Add**.

Теперь можно выйти и войти под `admin` / `P@ssw0rd`. При желании можно удалить или заблокировать учётную запись `Admin`.

---

### 11. Проверка сбора метрик

Перейдите в **Monitoring → Latest data**. Выберите хост `HQ-SRV` и отфильтруйте по ключам:

- `system.cpu.load` – загрузка CPU.

- `vm.memory.size[available]` – доступная память.

- `vfs.fs.size[/,used]` – использованное место на корневом разделе.

Должны отображаться актуальные значения. Для `BR-SRV` повторите проверку.

На глобальном дашборде (или созданном пользовательском) должны появиться графики.

---

### 12. Проверка доступности из офиса HQ

С любого компьютера в сети HQ (например, с HQ-CLI) откройте браузер и перейдите по адресу `http://mon.au-team.irpo`. Должна открыться страница входа Zabbix.

---

### 13. Итоговые параметры

- **ПО:** Zabbix 6.4 LTS

- **Способ развёртывания:** Docker Compose

- **Порт веб-интерфейса (локальный):** 8081

- **Порт доступа через прокси:** 80

- **Порт сервера Zabbix:** 10051

- **Порт агента:** 10050

- **База данных:** MySQL 8.0

- **URL мониторинга:** `http://mon.au-team.irpo`

- **Логин/пароль:** `admin` / `P@ssw0rd`

---

### Возможные проблемы и их решение

| Проблема | Решение |

|----------|---------|

| Контейнер `zabbix-server` перезапускается | Выполнить ручной импорт схемы (раздел 5). |

| Агент не становится доступным (ZBX серый) | Проверить работу агента (`systemctl status zabbix-agent`), открыт ли порт 10050 (на сервере и клиенте). Убедиться, что IP-адрес в интерфейсе хоста указан верно. |

| Не открывается `http://mon.au-team.irpo` | Проверить DNS-запись (`nslookup mon.au-team.irpo`), проверить настройки Apache (прокси), убедиться, что Apache слушает порт 80. |

| Ошибка `log_bin_trust_function_creators` при импорте | Выполнить `SET GLOBAL log_bin_trust_function_creators = 1;` от root перед импортом. |

---

После выполнения всех шагов задание считается выполненным. Приложите скриншоты работающего веб-интерфейса с видимыми метриками в отчёт.