Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
129 changes: 0 additions & 129 deletions .gitignore

This file was deleted.

Binary file removed Linux Practice.png
Binary file not shown.
135 changes: 92 additions & 43 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,43 +1,92 @@
# Введение
Данная практика посвещена базовым принципам администрирования Linux. Для выполнения практики необходимо развернуть 3 виртуальные машины Linux.

Как пример, можно использовать Virtual Box + Ubuntu Server 20.04.

# Задание
Для выполнения данного задания необходимо:
1. Развернуть три виртуальные машины Linux, согласно схеме ниже


![info](Linux%20Practice.png)

2. Linux A
1. Сконфигурировать Hostname следующим образом: <your_surname>_server (пропустить если делаете через Play with docker)
2. Создать пользователя <your_surname>_1 (пропустить если делаете через Play with docker)
3. Сконфигурировать виртуальный интерфейс со следующим ip адресом: 192.168.<день рождения>.10/24
4. Развернуть Http сервер на виртуальной машине на порту 5000. Необходимо реализовать минимум три эндпоинта (запрос /get, /post, /put)
3. Linux B
1. Сконфигурировать Hostname следующим образом: <your_surname>_gateway (пропустить если делаете через Play with docker)
2. Создать пользователя <your_surname>_2 (пропустить если делаете через Play with docker)
3. Сконфигурировать 2 виртуальных интерфейс со следующими ip адресом: 192.168.<день рождения>.1/24, 192.168.<месяц рождения>.10/24
4. С помощью утилит ip route и iptables настроить маршрут пакетов от Linux A до C. Должны быть запрещены все пакеты, кроме http пакетов через порт 5000 (маршруты обязательно, файрвол опционально)
5. Запустить программу tcpdump с фильтрацией по портам 5000
4. Linux C
1. Сконфигурировать Hostname следующим образом: <your_surname>_client (пропустить если делаете через Play with docker)
2. Создать пользователя <your_surname>_3 (пропустить если делаете через Play with docker)
3. Сконфигурировать виртуальный интерфейс со следующим ip адресом: 192.168.<месяц рождения>.100/24
4. С помощью команды curl на машине C послать 3 запроса на машину А в http сервер (/get, /post, /put)
5. При перезагрузки системы все сервисы и сетевая архитектура должны также функционировать (сохранить свои настройки)
6. Сделать скриншоты всех этапов задания
7. Оформить отчет в виде Markdown файла. Приложить конфигурационные файлы в репозиторий
8. Для play with docker также нужно написать bash скрипты для воспроизведения на новых вм


Репозиторий оформить следующим образом:
- application - исходный код http сервера
- configs - конфигурационные файлы сетевых настроек виртуальных машин
- report.md - Отчет markdown


P.S.
Если не получилось использовать разные утилиты для настройки сети, используйте netplan
Смотрите [мануал](./guide/Manual.md) - там информация для virtual box и Play with docker
# linux_hw
Отчет по практической работе с виртуальными машинами на ОС Linux Ubuntu 24.04.2


Работа начинается с создания и настройки виртуальных машин А, Б и С, где А - сервер, В - шлюз и С - клиент.
Ниже предствлены скрины настройки виртуальных машин и их состояние:
![lA](https://github.com/user-attachments/assets/f56d747e-8ed7-478a-8a48-09658b5529b7)
![lB](https://github.com/user-attachments/assets/3ca036d4-ab4f-49e7-8d5f-5e6af0e795ca)
![lC](https://github.com/user-attachments/assets/433c7a9b-32d3-4033-a36c-b89570f33eab)

---

На всех трех виртуальных машинах был изменён 'hostname' в соответствии с заданием в файле etc/hostname :
![etc_hostnameA (1)](https://github.com/user-attachments/assets/8baf5b48-20e2-43bb-bc03-26076d1739df)
![etc_hostnameB](https://github.com/user-attachments/assets/f145e03c-e9b9-4a26-a04b-46d7b1765f26)
![etc_hostnameC](https://github.com/user-attachments/assets/3b8d81fe-23e8-4f84-8ae9-372055d5f3d0)

После презагрузки машинам были присвоены новые 'hostname': <br>
ВМ А - shcerbakovaserver <br> ВМ Б - shcerbakovagateway <br> ВМ С - shcerbakovaclient

![hostnameA](https://github.com/user-attachments/assets/98458eb8-6b85-488d-b471-c26618bdafc6)
![hostnameC](https://github.com/user-attachments/assets/0885b811-0621-45bf-97ed-7c28fbca0cac)
![hostnameB](https://github.com/user-attachments/assets/c50691a5-7f0b-4536-9761-8c06824659c0)


---

Далее была произведена конфигурация виртуальных интерфейсов на всех трех виртуальных машинах:
![netplan_ipaA](https://github.com/user-attachments/assets/2f1838c0-cf51-4bbc-90f0-5f9117383459)
![netplan_ipaB](https://github.com/user-attachments/assets/d1851135-18b0-4f61-8ec7-c6af9631bea2)
![netplan_ipaC](https://github.com/user-attachments/assets/3d826db3-6c1d-41fa-bf64-a00a6e0eb795)

На ВМ А был для 'enp0s3' был выставлен автоматический ip-адрес, а для 'enp0s8' - "192.168.26.10/24" в соответствии с заданием; <br>
На ВМ Б был для 'enp0s3' был также выставлен автоматический ip-адрес, для 'enp0s8' - "192.168.26.1/24", а для enp0s9 - "192.168.6.1/24" в соответствии с заданием; <br>
На ВМ С был для 'enp0s3' выставлен автоматический ip-адрес, а для 'enp0s8' - "192.168.6.1/24" в соответствии с заданием;

---

Перейдем к рассмотрению процесса настраивания виртуальных машин по отдельности.

Начнем с ВМ А.

Создан http-сервер на порту 5000. Также были реализованы три эндпоинта (запрос /get, /post, /put). Ниже представлен результат настройки:

![flask_apppy](https://github.com/user-attachments/assets/512b78df-97f7-4326-ae00-37017c0fc1f7)

---

Рассмотрит ВМ Б.

С помощью утилит ip route и iptables были настроены маршрут пакетов от ВМ A до ВМ C и была настроена фильтрация по порту 5000.

Настройка маршрутов представлена ниже:

![nastroykaB](https://github.com/user-attachments/assets/86ae56c8-923b-489e-96cd-4ba0d9294faa)

---

Перейдем к ВМ С.

Ранее была представлена конфигурация ВМ С. А ниже представлены запросы, передаваемые через ВМ Б на ВМ А:

![get_post_put](https://github.com/user-attachments/assets/c62403b9-1683-4a16-bdfb-c558d645de3c)

Как можно заметить, ВМ С успешно получает фидбек от ВМ А.

---

Теперь рассмотрит фидбек, получаемый с ВМ А, и мониторинг с помощью 'tcpdump' по порту 5000, установленный на ВМ Б.

На скринах ниже представлено состояние ВМ А во время получения запросов с ВМ С:

![gpp_A](https://github.com/user-attachments/assets/28b301dd-f375-4133-a2e3-430737eca823)

Так же с помощью команды 'tcpdump' были получены логи передачи пакетов с ВМ С на ВМ А. Ниже представлены скрины.

Мониторинг запросов GET с ВМ С на ВМ А:
![logs_get](https://github.com/user-attachments/assets/de673c05-e077-4875-b30b-166d80d0e281)

Мониторинг запросов POST с ВМ С на ВМ А:

![logs_post](https://github.com/user-attachments/assets/6ad2142d-cf7e-4429-8c17-16ed08de83ee)

Мониторинг запросов PUT с ВМ С на ВМ А:

![logs_put](https://github.com/user-attachments/assets/4c9fc810-437c-4ce1-95af-fb1dbcb4825b)

---

По вышепредставленным скринам и описаниям происходящего можно сделать вывод, что все виртуальные машины были успешно настроены. Все три вида запросов с ВМ С на ВМ А через ВМ Б проходят успешно.

---
9 changes: 9 additions & 0 deletions configs/client
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
network:
ethernets:
enp0s3:
dhcp4: true
enp0s8:
dhcp4: no
addresses: [192.168.6.10/24]
gateway4: 192.168.6.1
version: 2
11 changes: 11 additions & 0 deletions configs/gateway
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
network:
ethernets:
enp0s3:
dhcp4: true
enp0s8:
dhcp4: no
addresses: [192.168.26.1/24]
enp0s9:
dhcp4: no
addresses: [192.168.6.1/24]
version: 2
9 changes: 9 additions & 0 deletions configs/server
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
network:
ethernets:
enp0s3:
dhcp4: true
enp0s8:
dhcp4: no
addresses: [192.168.26.10/24]
gateway4: 192.168.26.1
version: 2
10 changes: 10 additions & 0 deletions configs/webserver
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
[Unit]
Description=Web-Server

[Service]
Type=idle
WorkingDirectory=/home/user/server
ExecStart=python3 app.py

[Install]
WantedBy=multi-user.target
Loading