# Инструкция к заданиям
# Настройка VirtualBox
## 1. Сетевые настройки ВМ
- Позволяет ВМ получать IP-адрес в той же сети, что и основной компьютер (на котором мы эту ВМ запускаем).
- Можно подключаться к ним с хоста (нашего рабочего компа, на котором их запускаем) напрямую будто это внешние серверы.
- ВМ смогут видеть друг друга (будто они в одной локальной сети).
- Для работы нужен **физический сетевой адаптер** (например, Wi-Fi или Ethernet).
**Как настроить:**
1. Открыть настройки ВМ → "Сеть" (Network).
2. Включить **Адаптер 1** и выбрать **Сетевой мост (Bridged Adapter)**.
3. Убедиться, что выбрано правильное сетевое устройство (Wi-Fi или Ethernet).
4. Запустить ВМ и проверить IP-адрес с помощью `ip a` (Linux) или `ipconfig` (Windows).
💡 Этот вариант удобен, если хочешь, чтобы ВМ была видна в твоей локальной сети (например, к ней можно было подключаться по SSH с любого устройства в сети).
---
## 2. Настройки дисков
- **Ubuntu и Rocky Linux**: Минимум **20 ГБ** диска.
- **Windows 10**: Лучше выделить **40 ГБ+**, так как система занимает много места.
- Использовал **динамический диск** (VDI) в VirtualBox, чтобы не занимать место сразу.
---
## 3. Аппаратные настройки
### Процессор
- Для Linux выделил 1 ядро на VM (так как они серверные все).
- Для Windows 10 выделил 2** **ядра.
### ОЗУ
- **Ubuntu Server / Rocky Linux**: 2 ГБ
- **Windows 10**: 4 ГБ
## Доступы
Я установил 2 VM с Ubuntu (ubuntu1 и ubuntu2) на обоих логин: `user`, пароль: `mmm`.
Есть VM rockylinux, на ней логин: `rockylinux`, пароль: `rockylinux`.
Винда (10 Pro), логин: `user`, пароль: `mmm`.
# Установка вспомогательных утилит
## nano
В Ubuntu и RockyLinux устанавливаем утилиту nano (текстовый консольный редактор, чтобы было удобно править конфиги):
```
# Ubuntu:
sudo apt install -y nano
# RockyLinux:
sudo dnf install -y nano
```
## docker
В ubuntu1 (где будем разворачивать Wazuh) установим docker - это вспомогательный инструмент, который поможет быстро развернуть Wazuh.
На самом деле он установился во время устновки самой Ubuntu - я выбрал его в процессе:

Но если что, то его можно поставить и самостоятельно по инструкции: [https://docs.docker.com/engine/install/ubuntu/](https://docs.docker.com/engine/install/ubuntu/)
Для удобства я еще выполнил пост-инсталяционные инструкции (чтобы удобнее было работать в docker): [https://docs.docker.com/engine/install/linux-postinstall/](https://docs.docker.com/engine/install/linux-postinstall/)
# Настройка удобного сетевого взаимодействия
Мы хотим чтобы каждая развернутая VM "видела" другую по сети не по голому IP адресу, а по имени, то для этого можно:
На каждой VM (кроме Windows) меняем файл `/etc/hosts` - добавляем туда на новой строчке пару (адрес и имя другой VM), например:
```
ubuntu1 192.168.0.179
```
А чтобы узнать IP адрес VM, нужно в ней выполнить команду `ip a` и посмотреть IP адрес в интерфейсе `enp0s3` .
Чтобы проверить, что все корректно, можно выполнить команду `ping ubuntu1`
# Работа с Wazuh
Мы будем устанавливать его на VM ubuntu1 с помощью docker. У него есть возможность установить на 2 VM (multi-node deployment), но это более сложная схема, и так как **в задании явно не оговорено**, в каком режиме разворачивать - лучше сделать по-простому.
Все делается по инструкции с официального сайта: [https://documentation.wazuh.com/current/deployment-options/docker/wazuh-container.html#single-node-deployment](https://documentation.wazuh.com/current/deployment-options/docker/wazuh-container.html#single-node-deployment)
## Запуск сервера
После перезагрузки VM ubuntu2 сервер нужно будет снова запускать, делать это нужно так:
```
cd /home/user/wazuh-docker/single-node
docker-compose up -d
```
## Проверка работы
После запуска я поверяю ip адрес ubuntu1 через команду `ip a` и вижу, что у меня это 192.168.0.179, поэтому я в браузере у себя на коме иду по ссылке: [https://192.168.0.179:443/](https://192.168.0.179) и попадаю на страницу авторизации, ввожу логин и пароль (`admin` и `SecretPassword` - с такими настройками по умолчанию сервер Wazuh запускался судя по docker-compose.yml конфигурации, из которой мы его запускали).

## Установка Wazuh-агентов
На VM rockylinux я установил агента по такой инструкции: [https://documentation.wazuh.com/current/installation-guide/wazuh-agent/wazuh-agent-package-linux.html](https://documentation.wazuh.com/current/installation-guide/wazuh-agent/wazuh-agent-package-linux.html)
На VM windows: [https://documentation.wazuh.com/current/installation-guide/wazuh-agent/wazuh-agent-package-windows.html](https://documentation.wazuh.com/current/installation-guide/wazuh-agent/wazuh-agent-package-windows.html)
# Работа с SSH
Для начала нужно ставим SSH-сервер на VM ubuntu2 и rockylinux.
## Установка SSH-сервера на Ubuntu и Rocky Linux
### 🟢 На Ubuntu
1. **Обновите пакетный менеджер**:
```
sudo apt update
```
2. **Установите OpenSSH-сервер**:
```
sudo apt install -y openssh-server
```
3. **Проверьте статус службы SSH**:
```
sudo systemctl status ssh
```
Если сервер работает, вы увидите строку `Active: active (running)`. Если нет, запустите его вручную:
```
sudo systemctl start ssh
```
4. **Разрешите автозапуск при загрузке**:
```
sudo systemctl enable ssh
```
5. **Открытие порта в брандмауэре (если используется UFW)**:
```
sudo ufw allow OpenSSH
sudo ufw enable
```
---
### 🔴 На Rocky Linux (или CentOS, RHEL)
1. **Обновите пакетный менеджер**:
```
sudo dnf update -y
```
2. **Установите OpenSSH-сервер**:
```
sudo dnf install -y openssh-server
```
3. **Запустите службу SSH**:
```
sudo systemctl start sshd
```
4. **Разрешите автозапуск при загрузке**:
```
sudo systemctl enable sshd
```
5. **Открытие порта в брандмауэре (если используется firewalld)**:
```
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload
```
---
Теперь необходимо на совем компе (откуда будем удаленно по SSH подключаться к серверам) сгенерировать SSH ключи
Чтобы настроить доступ по SSH с помощью ключей и отключить авторизацию по логину и паролю на хостах Ubuntu и Rocky Linux, следуйте этим шагам:
### 1. Создание SSH-ключей
На локальной машине (клиент):
1. Откройте терминал (если на рабочем компе стоит Windows, то можно использвоать WSL: [https://learn.microsoft.com/en-us/windows/wsl/install](https://learn.microsoft.com/en-us/windows/wsl/install) ).
2. Создайте пару SSH-ключей с помощью команды:
```
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
```
Следуйте инструкциям, чтобы сохранить ключи в стандартном месте (обычно это `~/.ssh/id\_rsa`) и задайте пароль для ключа (если нужно).
3. После этого на вашей локальной машине будет два файла:
- `~/.ssh/id\_rsa` — приватный ключ (не передавайте его никому).
- `~/.ssh/id\_rsa.pub` — публичный ключ.
### 2. Копирование публичного ключа на удаленный хост
На удаленном сервере (например, Ubuntu или Rocky Linux):
1. Скопируйте ваш публичный ключ на сервер с помощью команды:
```
ssh-copy-id username@remote_host
```
Замените `username` на имя пользователя на сервере, а `remote\_host` на IP-адрес виртуальной машины (узнаем его через команду `ip a` ).
Если команды `ssh-copy-id` нет на сервере, можно вручную добавить ключ:
1. Скопируйте содержимое файла `~/.ssh/id\_rsa.pub`.
2. На сервере создайте директорию `~/.ssh` (если она еще не существует):
```
mkdir -p ~/.ssh
chmod 700 ~/.ssh
```
3. Добавьте публичный ключ в файл `~/.ssh/authorized\_keys`:
```
echo "your_public_key" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
```
### 3. Отключение авторизации по логину и паролю
Теперь нужно отключить авторизацию по паролю на сервере.
На удаленном сервере:
1. Отредактируйте конфигурационный файл SSH:
```
sudo nano /etc/ssh/sshd_config
```
2. Найдите или добавьте следующие строки:
```
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
```
Эти настройки отключат возможность авторизации через пароль.
3. После внесения изменений, перезапустите службу SSH:
```
sudo systemctl restart sshd
```
### 4. Проверка
Теперь попробуйте подключиться к серверу с использованием SSH-ключа:
```
ssh username@remote_host
```
Если все сделано правильно, вы подключитесь без необходимости вводить пароль. Если при этом подключение не удается, проверьте, что ваш публичный ключ правильно установлен в файле `~/.ssh/authorized\_keys`, и что настройки в файле `/etc/ssh/sshd\_config` верны.
Чтобы проверить, что по логину и паролю теперь нельзя подключиться можно выполнить команду:
```
ssh -o PubkeyAuthentication=no username@remote_host # должна завершиться ошибкой
```
# Работа с учетными записями
Чтобы создать пользователей с разными уровнями прав в системе Ubuntu или Rocky Linux, выполните следующие шаги.
---
## 1. Создание обычных пользователей
Создадим трёх пользователей:
- `adminuser` — с правами `sudo`
- `regularuser` — обычный пользователь без `sudo`
- `restricteduser` — пользователь с ограниченными правами (без возможности входа в систему)
### Создать пользователей
Выполните следующие команды:
```
sudo useradd -m -s /bin/bash adminuser
sudo useradd -m -s /bin/bash regularuser
sudo useradd -m -s /bin/bash restricteduser
```
Параметры:
- `-m` — создаёт домашнюю директорию ( `/home/username`).
- `-s /bin/bash` — назначает оболочку Bash.
Задайте пароли для каждого пользователя:
```
sudo passwd adminuser
sudo passwd regularuser
sudo passwd restricteduser
```
---
## 2. Назначение привилегий
### 2.1 Дать adminuser права sudo
Добавим его в группу `sudo` (для Ubuntu) или `wheel` (для Rocky Linux):
```
sudo usermod -aG sudo adminuser # Для Ubuntu
sudo usermod -aG wheel adminuser # Для Rocky Linux
```
Проверить группы можно командой:
```
groups adminuser
```
---
### 2.2 Оставить regularuser без sudo
Этот пользователь остаётся обычным и не имеет `sudo`.
---
### 2.3 Ограничить restricteduser
Чтобы запретить этому пользователю вход в систему, можно:
- Отключить его пароль:
```
sudo passwd -l restricteduser
```
- Изменить оболочку на `/usr/sbin/nologin`, чтобы запретить ему доступ в терминал:
```
sudo usermod -s /usr/sbin/nologin restricteduser
```
Проверить оболочку можно командой:
```
getent passwd restricteduser
```
---
## 3. Проверка пользователей
После создания пользователей можно протестировать их:
1. Выйдите из текущей сессии и попробуйте войти под разными пользователями:
```
su - adminuser
```
2. Попробуйте выполнить команду `sudo ls /root` — должно запросить пароль `adminuser`.
3. Войдите под `regularuser` и попробуйте `sudo ls /root` — должно отказать в доступе.
4. Попробуйте войти под `restricteduser` ( `su - restricteduser`) — должно отказать в доступе.
# Работа с веб-сервером
Чтобы развернуть веб-сервер Nginx на виртуальной машине с Ubuntu (я ставил на ubuntu2) и настроить доступ только по порту 443 (HTTPS), следуйте этим шагам:
### 1. Обновление системы
```
sudo apt update && sudo apt upgrade -y
```
### 2. Установка Nginx
```
sudo apt install nginx -y
```
### 3. Открытие порта 443 в брандмауэре
```
sudo ufw allow 443/tcp
sudo ufw enable
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
```
(Отключите другие порты, если требуется: *`sudo ufw deny 80/tcp` закрывает HTTP)*
### 4. Настройка SSL-сертификата
Если у вас нет домена, используйте самоподписанный сертификат:
```
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/nginx-selfsigned.key \
-out /etc/ssl/certs/nginx-selfsigned.crt
```
Создайте файл настроек для SSL:
```
sudo nano /etc/nginx/snippets/self-signed.conf
```
Вставьте:
```
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
```
### 5. Настройка Nginx
Открываем конфигурацию:
```
sudo nano /etc/nginx/sites-available/default
```
Изменяем её:
```
server {
listen 443 ssl;
server_name yourdomain.com;
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
location / {
root /var/www/html;
index index.html;
}
}
server {
listen 80;
server_name yourdomain.com;
return 301 https://$host$request_uri;
}
```
*(Первый блок отвечает за HTTPS, второй — перенаправляет HTTP на HTTPS)*
### 6. Перезапуск Nginx
```
sudo nginx -t
sudo systemctl restart nginx
```
### 7. Проверка
- Перейдите на `https://ubuntu2:443/`
- Убедитесь, что `http://ubuntu2:80/` перенаправляется на HTTPS или вообще недоступен (`nc -v ubuntu2 80`).
Теперь ваш сервер доступен только по **443 порту**.
Вместо ubuntu2 я использовал его IP адрес (смотрим его через `ip a` )
# Работа с iptables
### 🔒 Полная настройка блокировки ICMP и разрешения только необходимых портов и протоколов для Wazuh и Dr.Web через iptables
---
## 1️⃣ Блокируем ICMP (ping) на всех Linux-хостах
Для полной блокировки ICMP (ping) на сервере:
```
sudo iptables -A INPUT -p icmp -j DROP
sudo iptables -A OUTPUT -p icmp -j DROP
```
После этого **пинги перестанут работать**, проверим:
```
ping google.com
```
Если ответов нет, значит ICMP успешно заблокирован.
⚠️ **Примечание**: Иногда отключение ICMP может затруднить диагностику сети.
---
## 2️⃣ Настраиваем iptables для Wazuh
### 📌 Открываем только нужные порты:
Для Wazuh требуется разрешить:
| Сервис | Протокол | Порт | Описание |
|:--------------|:-----------------|:---------|:-------------------------------------------------------------------|
| Wazuh Agent | TCP | 1514 | Для связи с сервером (может быть и UDP) |
| Wazuh Web UI | TCP | 55000 | Веб-интерфейс API |
| ElasticSearch | TCP | 9200 | Если используется ELK |
| Kibana | TCP | 5601 | Веб-интерфейс логов |
### 🛠 Настраиваем iptables для Wazuh
```
sudo iptables -A INPUT -p tcp --dport 1514 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 55000 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 9200 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 5601 -j ACCEPT
```
---
## 3️⃣ Настраиваем iptables для Dr.Web
Dr.Web может использовать следующие порты:
| Сервис | Протокол | Порт | Описание |
|:--------------|:-----------------|:---------|:--------------------------------------|
| Dr.Web Server | TCP | 2193 | Управление сервером |
| Dr.Web Agent | TCP | 9080 | Связь с агентами |
| Dr.Web Update | TCP | 2210 | Обновления |
| WebUI | TCP | 8443 | Веб-интерфейс |
### 🛠 Добавляем правила для Dr.Web
```
sudo iptables -A INPUT -p tcp --dport 2193 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 9080 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 2210 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 8443 -j ACCEPT
```
---
## 4️⃣ Блокируем всё остальное
После настройки исключений **закрываем все остальные порты**:
```
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT # Разрешаем исходящие соединения (если нужно)
```
---
## 5️⃣ Проверяем работоспособность
1. 🔍 П**роверяем, что ICMP (ping) заблокирован
```
ping google.com
```
✅ Ожидаемый результат: **100% packet loss (без ответа)**.
2. 🔎 П**роверяем доступность Wazuh
```
nc -zv YOUR_WAZUH_SERVER_IP 1514
nc -zv YOUR_WAZUH_SERVER_IP 55000
nc -zv YOUR_WAZUH_SERVER_IP 9200
nc -zv YOUR_WAZUH_SERVER_IP 5601
```
✅ Ожидаемый результат: **Successful connection**
3. 🔎 П**роверяем Dr.Web
```
nc -zv YOUR_DRWEB_SERVER_IP 2193
nc -zv YOUR_DRWEB_SERVER_IP 9080
nc -zv YOUR_DRWEB_SERVER_IP 2210
nc -zv YOUR_DRWEB_SERVER_IP 8443
```
✅ Ожидаемый результат: **Successful connection**
4. 🚫 П**роверяем, что другие порты закрыты
```
nc -zv YOUR_SERVER_IP 22
```
✅ Ожидаемый результат: **Connection refused**
---
## 6️⃣ Сохраняем правила iptables
Чтобы правила не сбрасывались после перезагрузки:
```
sudo apt install iptables-persistent -y
sudo netfilter-persistent save
sudo netfilter-persistent reload
```
Если сервер на `RHEL/CentOS`:
```
sudo service iptables save
```
---
# Работа с антивирусом
Я не нашел, где можно скачать сервер без ключа, поэтому возиться с ним не стал, но вот инструкция, как это сделать: [https://download.geo.drweb.com/pub/drweb/esuite/13.0.0/documentation/html/ru/installation\_manual/index.html?installation\_server\_unix.htm](https://download.geo.drweb.com/pub/drweb/esuite/13.0.0/documentation/html/ru/installation_manual/index.html?installation_server_unix.htm)