# Инструкция к заданиям # Настройка 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 - я выбрал его в процессе: ![Selection\_001.png](https://i.imgur.com/xTfUXXA.png) Но если что, то его можно поставить и самостоятельно по инструкции: [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 конфигурации, из которой мы его запускали). ![Screenshot from 2025-01-30 14-23-00.png](https://i.imgur.com/DT8UbZX.png) ## Установка 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)