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