- TASK № 1: Робота з віртуальними машинами в VirtualBox
- TASK № 2: Vagrant Multi-VM Setup для вебсерверів
- TASK № 3: Встановлення та налаштування Nginx, Systemd сервісу, UFW та Fail2Ban
- TASK № 4: Автоматична установка пакетів для різних дистрибутивів Linux
У цьому проекті описано процес роботи з віртуальними машинами (ВМ) у VirtualBox, включаючи налаштування, збереження стану, збільшення ресурсів, та розширення диску за допомогою GParted.
-
Встановлення віртуальної машини
-
Початкові налаштування ВМ
- Виконано початкові налаштування, такі як конфігурація процесора, оперативної пам'яті, та диску.
- 
-
Збільшення ресурсів ВМ
- Оперативна пам'ять: Було збільшено кількість оперативної пам'яті.
- 
- Кількість ядер процесора: Було збільшено кількість ядер процесора для ВМ.
- 
- Оперативна пам'ять: Було збільшено кількість оперативної пам'яті.
-
Збільшення розміру диска
- Диск віртуальної машини було збільшено, щоб відповідати вимогам для зберігання даних.
- 
- Спочатку диск виглядав так:
- 
- Після розмітки за допомогою GParted диск було розширено:
- 
- 
-
Збереження стану ВМ
- Виконано збереження поточного стану віртуальної машини за допомогою створення снапшоту.
- 
-
Видалення віртуальної машини
- Система після видалення виглядала так:
- 
- Після видалення машина була успішно відновлена до збереженого стану.
- 
- Система після видалення виглядала так:
-
Відновлення ВМ
- Було видалено віртуальну машину для перевірки процесу відновлення.
- 
- Було видалено віртуальну машину для перевірки процесу відновлення.
У цій роботі ми пройшли через процес створення, налаштування, збільшення ресурсів, збереження та відновлення віртуальної машини, а також зміни розміру диску за допомогою GParted. У розділенні диску можна було розшири наявний розділ, а не розмічати новий, але завтикав, а переробляти не хотів
Цей проект демонструє, як за допомогою Vagrant і VirtualBox можна автоматизувати створення кількох віртуальних машин для вебсерверів з різними мережевими налаштуваннями та спільними папками. Ми використовуємо Ubuntu 24.04 як базову операційну систему та встановлюємо вебсервер Apache для кожної машини.
- 6 віртуальних машин, що налаштовані для різних типів мереж (публічна і приватна).
- Apache автоматично встановлюється на кожній віртуальній машині.
- Спільні папки для кожної машини, що дозволяють синхронізувати файли між хостом та віртуальними машинами.
- Статичні та динамічні IP-адреси, в залежності від типу сервера.
- Використання циклів для уникнення дублювання коду при створенні кількох схожих віртуальних машин.
├── Vagrantfile # Головний файл конфігурації для Vagrant
├── shared_vm # Спільна папка для webserver-01
├── shared_vm_4 # Спільна папка для webserver-04
├── shared_vm_5 # Спільна папка для webserver-05
├── shared_vm_6 # Спільна папка для webserver-06
└── README.md # Цей файл
-
webserver-01: Загальнодоступний вебсервер із динамічним IP. Цей сервер піднімається за допомогою публічної мережі та отримує IP автоматично.
-
private_server_02: Приватний сервер із статичним IP
1.1.1.212. Цей сервер налаштований для приватної мережі. -
webserver-03: Загальнодоступний сервер із статичним IP
1.1.1.213і мостовим підключенням через адаптерRealtek Gaming 2.5GbE Family Controller. -
webserver-04, webserver-05, webserver-06: Три додаткові вебсервери з унікальними статичними IP-адресами (від
1.1.1.14до1.1.1.16), створені автоматично за допомогою циклу, щоб уникнути дублювання коду.
- Vagrant — інструмент для управління середовищем віртуалізації.
- VirtualBox — платформа для запуску віртуальних машин.
- Ubuntu 24.04 — операційна система для кожної віртуальної машини.
- Apache — вебсервер, встановлений автоматично через Vagrant provision.
Для запуску проекту вам знадобляться:
-
Клонування репозиторію:
git clone https://github.com/yourusername/vagrant-multi-vm-setup.git cd vagrant-multi-vm-setup -
Запуск віртуальних машин:
У каталозі з файлом
Vagrantfileвиконайте команду:vagrant up
Ця команда автоматично завантажить необхідні образи, створить віртуальні машини та виконає всі налаштування, в тому числі встановить Apache.
-
Доступ до вебсерверів:
Після завершення процесу підняття віртуальних машин ви можете отримати доступ до вебсерверів за IP-адресами, зазначеними у
Vagrantfile. Наприклад:- Для
webserver-01: Отримайте динамічний IP черезvagrant ssh webserver-01і використовуйтеifconfigабоip aдля перегляду IP. - Для інших серверів з статичними IP просто введіть їх IP в браузері, наприклад:
http://192.168.33.14.
- Для
-
Зупинка віртуальних машин:
Після завершення роботи ви можете зупинити всі машини за допомогою команди:
vagrant halt
-
Видалення віртуальних машин:
Якщо більше не потрібно використовувати віртуальні машини, їх можна видалити:
vagrant destroy -f
Цей проект демонструє, як за допомогою Vagrant можна швидко та автоматизовано створювати складні середовища для розгортання вебсерверів. Завдяки використанню циклів для створення схожих машин, код стає чистішим і легше підтримується. Якщо ви плануєте розгортати тестові або навчальні середовища, цей проект може стати чудовою основою для подальшої автоматизації.
Цей проект ліцензований під MIT License — детальніше дивіться у файлі LICENSE.
У цьому проекті ми виконуємо декілька основних завдань:
- Встановлюємо вебсервер Nginx через офіційний репозиторій, оновлюємо через PPA-репозиторій, а потім повертаємось до офіційної версії через ppa-purge.
- Створюємо власний Systemd сервіс та налаштовуємо Systemd таймер для автоматичного виконання простого скрипта.
- Налаштовуємо UFW (брандмауер), щоб заблокувати доступ до SSH з одного IP та дозволити з іншого.
- Додатково: Налаштовуємо Fail2Ban для захисту від підбору паролів через SSH.
Для початку додаємо PPA-репозиторій для Nginx та оновлюємо версію пакета.
sudo add-apt-repository ppa:nginx/stable
sudo apt update
sudo apt upgrade nginxПісля додавання репозиторію, перевіряємо версію Nginx до та після оновлення.
Після встановлення пакета з PPA, ми можемо повернутись до офіційної версії Nginx за допомогою команди:
sudo ppa-purge ppa:nginx/stableМи створюємо простий скрипт, який записує поточний час у файл /var/log/time.log.
#!/bin/bash
echo "Current time: $(date)" >> /var/log/time.logСтворюємо файл сервісу log_time.service, який буде запускати наш скрипт.
sudo nano /etc/systemd/system/log_time.serviceЗміст файлу:
[Unit]
Description=Log time to file
[Service]
ExecStart=/usr/local/bin/log_time.shЩоб не використовувати нескінченний цикл зі sleep, ми налаштовуємо Systemd таймер для запуску скрипта щохвилини.
sudo nano /etc/systemd/system/log_time.timerЗміст файлу:
[Unit]
Description=Run time logger script every minute
[Timer]
OnBootSec=1min
OnUnitActiveSec=1min
[Install]
WantedBy=timers.targetПісля активації таймера, перевіряємо, чи виконується скрипт і чи записується час у файл.
Щоб заблокувати доступ до SSH з певної IP-адреси (наприклад, 192.168.0.2), але дозволити з іншої IP-адреси (192.168.0.3), використовуємо наступні команди:
sudo ufw deny from 192.168.0.2 to any port 22
sudo ufw allow from 192.168.0.3 to any port 22У цьому проекті ми виконали наступні завдання:
- Встановили Nginx з офіційного репозиторію, оновили його через PPA і повернулися до офіційної версії.
- Створили власний systemd-сервіс та налаштували таймер для запуску скрипта щохвилини.
- Налаштували UFW для блокування доступу до порту SSH з певного IP і дозволили доступ з іншого IP.
Fail2Ban — це програма, яка сканує журнали на предмет невдалих спроб авторизації та блокує IP-адреси з підозрілою активністю.
Встановлюємо Fail2Ban за допомогою стандартного менеджера пакетів:
sudo apt install fail2banСтворюємо або редагуємо файл конфігурації /etc/fail2ban/jail.local:
sudo nano /etc/fail2ban/jail.localДодаємо наступну конфігурацію для захисту SSH:
[sshd]
enabled = true
port = 22
maxretry = 3
bantime = 600- maxretry — кількість невдалих спроб перед блокуванням.
- bantime — час блокування IP-адреси в секундах (600 секунд = 10 хвилин).
Після внесення змін перезапускаємо Fail2Ban:
sudo systemctl restart fail2banДля перевірки статусу Fail2Ban і підключених до нього сервісів можна скористатися командою:
sudo fail2ban-client status sshdДля початку, створюємо новий розділ на вільному дисковому просторі за допомогою fdisk.
sudo fdisk /dev/sdbВиконуємо наступні дії:
- Натискаємо n для створення нового розділу.
- Приймаємо стандартні налаштування для початкового та кінцевого сектора.
- Натискаємо w для збереження змін.
Після створення розділу, форматуємо його у файлову систему ext4.
sudo mkfs.ext4 /dev/sdb1Щоб уникнути проблем із перепризначенням пристроїв після перезавантаження, використовуємо UUID для монтування. Отримуємо UUID за допомогою команди:
sudo blkid /dev/sdb1Створюємо директорію, куди буде монтуватись новий розділ:
sudo mkdir /mnt/new_partitionВідкриваємо файл /etc/fstab для редагування:
sudo nano /etc/fstabДодаємо наступний рядок:
UUID=<UUID> /mnt/new_partition ext4 defaults 0 2
Після редагування fstab, монтуємо всі файлові системи:
sudo mount -aПеревіряємо, чи успішно змонтовано новий розділ:
lsblkПісля виконання цих дій новий розділ буде змонтовано автоматично при кожному завантаженні системи.
Цей Bash-скрипт дозволяє автоматично встановлювати та налаштовувати пакети (Apache, MariaDB, UFW, Docker) на різних дистрибутивах Linux (Ubuntu, Fedora, CentOS, Debian). Він також підтримує встановлення додаткових пакетів, зазначених користувачем під час запуску скрипта.
- Визначення дистрибутива: Скрипт автоматично визначає операційну систему, на якій виконується, використовуючи файл
/etc/os-release. - Оновлення репозиторіїв: Перед встановленням пакунків скрипт оновлює репозиторії залежно від дистрибутива.
- Встановлення базових пакетів: Основні пакети, які встановлюються за замовчуванням:
- Apache (веб-сервер)
- MariaDB (сервер баз даних)
- UFW (брандмауер для Ubuntu/Debian)
- Docker (система для запуску контейнерів)
- Оновлення встановлених пакетів: Якщо пакет уже встановлений, він буде оновлений до останньої версії.
- Встановлення додаткових пакетів: Можна передати додаткові пакети як аргументи до скрипта, і вони також будуть встановлені.
- Налаштування UFW: Для дистрибутивів Ubuntu/Debian налаштовується UFW для дозволу трафіку через порти, що використовуються Apache, MariaDB і Docker.
- Довідка (help): Скрипт підтримує параметр
--helpабоhelp, який виводить інструкції з використання.
Скачайте або скопіюйте скрипт на ваш сервер.
Перед тим, як запускати скрипт, потрібно надати йому права на виконання. Виконайте команду:
chmod +x ./install_packages.shЩоб встановити базові пакети (Apache, MariaDB, UFW, Docker), просто запустіть скрипт:
./install_packages.shЩоб встановити основні пакети та додаткові пакунки (наприклад, git, vim, curl), запустіть скрипт із зазначенням потрібних пакетів через пробіл:
./install_packages.sh git vim curlЩоб переглянути довідку щодо використання скрипта, виконайте команду:
./install_packages.sh --helpАбо:
./install_packages.sh helpСкрипт підтримує такі дистрибутиви Linux:
- Ubuntu
- Debian
- Fedora
- CentOS
- RHEL
Для дистрибутивів Ubuntu та Debian скрипт автоматично налаштовує UFW для дозволу таких портів:
- 80, 443 (Apache)
- 3306 (MariaDB)
- 2375 (Docker)
Для інших дистрибутивів налаштування firewall не виконується, оскільки вони не використовують UFW за замовчуванням.
-
Встановити лише основні пакети (apache, mariadb, ufw, docker):
./install_packages.sh
-
Встановити основні пакети та додаткові пакети (наприклад,
git,vim,curl):./install_packages.sh git vim curl
-
Вивести довідку про використання:
./install_packages.sh --help

