diff --git a/README.md b/README.md index 0d4d13f..eb815f7 100644 --- a/README.md +++ b/README.md @@ -1,43 +1,198 @@ -# Введение -Данная практика посвещена базовым принципам администрирования Linux. Для выполнения практики необходимо развернуть 3 виртуальные машины Linux. - -Как пример, можно использовать Virtual Box + Ubuntu Server 20.04. - -# Задание -Для выполнения данного задания необходимо: -1. Развернуть три виртуальные машины Linux, согласно схеме ниже - - -![info](Linux%20Practice.png) - -2. Linux A - 1. Сконфигурировать Hostname следующим образом: _server (пропустить если делаете через Play with docker) - 2. Создать пользователя _1 (пропустить если делаете через Play with docker) - 3. Сконфигурировать виртуальный интерфейс со следующим ip адресом: 192.168.<день рождения>.10/24 - 4. Развернуть Http сервер на виртуальной машине на порту 5000. Необходимо реализовать минимум три эндпоинта (запрос /get, /post, /put) -3. Linux B - 1. Сконфигурировать Hostname следующим образом: _gateway (пропустить если делаете через Play with docker) - 2. Создать пользователя _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 следующим образом: _client (пропустить если делаете через Play with docker) - 2. Создать пользователя _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 +# Отчет +## Описание задачи +Необходимо развернуть три виртуальные машины, согласно схеме: + +

+ +

+ +### Решение + +Для построения и реализации поставленной задачи был использован сервис Play-with-docker.com, который позволяет подключаться удалённо к виртуальным машинам. + +Первым этапом было создание виртуальных машин: + +

+ +

+ +## Виртуальная машина А + +Теперь необходимо настроить машину А (Сервер). Настройка заключается в создание ssh-ключа, создании адаптера для задания маршрутов. + + +Шаг №1. Генерация ssh-ключа. + +

+ +

+ +Подключение к виртуальной машине А происходит по команде: +ssh ip172-18-0-34-conq0rgl2o9000dchcq0@direct.labs.play-with-docker.com + +Шаг №2. Создание адаптера на машине А. + +

+ +

+ +Шаг №3. Создание маршрута на машине А между А и С + +

+ +

+ +Следующим этапом будет настройка машины Б, которая выступает связующим звеном между А и С. + +## Виртуальная машина Б + +Шаг №1. Генерация ssh-ключа + +

+ +

+ +Подключение к виртуальной машине А происходит по команде: ssh ip172-18-0-75-conq0rgl2o9000dchcq0@direct.labs.play-with-docker.com + +Шаг №2. Создание адаптера на виртуалке Б + +Создадим 1-ый маршрут 192.168.24.1/24 + + +

+ +

+ +Создадим 2-ой маршрут 192.168.2.1/24 + +

+ +

+ +На данном этапе настройка машины Б завершается. Приступим к настройке машины С. + +## Виртуальная машина С + +Настройка виртуальной машины С заключается в созданиие ssh-ключа, адаптера. + +Шаг №1. Генерация ssh-ключа + +

+ +

+ +Подключение к виртуальной машине C происходит по команде: +ssh ip172-18-0-122-conq0rgl2o9000dchcq0@direct.labs.play-with-docker.com + +Шаг №2. Создание адаптера на виртуалке С и добавление маршрута между С и А + +

+ +

+ +Настройка машины С завершено + +## Создание и запуск http-сервера + +Шаг №1. Установка модуля Flask на машине А + +

+ +

+ +Шаг №2. Создание файла app.py + +

+ +

+ +Шаг №3. Разворачивание hhtp-сервера на 5000 порту на виртуалке А + +

+ +

+ +Шаг №4. Отправка запроса с машины С на 5000 порт машины А + +Машина С: + +

+ +

+ +Машина А: + +

+ +

+ +## Bash-скрипты для виртуалок А, Б и С + +Также в рамках задания необходимо было прописать bash-скрипт для каждой виртуалки, который позволит в дальнейшим упростить запуска наших машин. + +Виртуалка А. + +``` +#!/bin/bash +echo "Adapter for A" +ip link add macvlan1 link eth0 type macvlan mode bridge +ip address add dev macvlan1 192.168.24.10/24 +ip link set macvlan1 up +ip route add 192.168.2.0/24 via 192.168.24.1 + +pip install flask + +touch app.py + +from flask import Flask, request + +app = Flask(__name__) + +@app.route('/', methods=['GET']) +def get_request(): + return 'GET request' + +@app.route('/', methods=['POST']) +def post_request(): + data = request.get_json() + return f'POST request with data: {data}' + +@app.route('/', methods=['PUT']) +def put_request(): + data = request.get_json() + return f'PUT request with data: {data}' + +app.run(host='0.0.0.0', port=5000) + +python app.py +``` +Виртуалка Б. +``` +#!/bin/bash +echo "Configuring adapter for A" +ip link add macvlan1 link eth0 type macvlan mode bridge +ip address add dev macvlan1 192.168.24.1/24 +ip link set macvlan1 up +echo "Adapter for A - ready\n" + +echo "Configuring adapter for C" +ip link add macvlan2 link eth0 type macvlan mode bridge +ip address add dev macvlan2 192.168.2.1/24 +ip link set macvlan2 up +echo "Adapter for C - ready\n" +``` +Виртуалка С. +``` +#!/bin/bash +echo "Configuring adapter for subnet C" +ip link add macvlan1 link eth0 type macvlan mode bridge +ip address add dev macvlan1 192.168.2.10/24 +ip link set macvlan1 up +ip route add 192.168.24.0/24 via 192.168.2.1 + +echo "Adapter for C - ready" + +printf "Sending request" +curl "http://192.168.28.10:5000" +``` + diff --git a/application/app.py b/application/app.py new file mode 100644 index 0000000..8258a60 --- /dev/null +++ b/application/app.py @@ -0,0 +1,19 @@ +from flask import Flask, request + +app = Flask(__name__) + +@app.route('/', methods=['GET']) +def get_request(): + return 'GET request' + +@app.route('/', methods=['POST']) +def post_request(): + data = request.get_json() + return f'POST request with data: {data}' + +@app.route('/', methods=['PUT']) +def put_request(): + data = request.get_json() + return f'PUT request with data: {data}' + +app.run(host='0.0.0.0', port=5000) diff --git a/configs/MachineA.sh b/configs/MachineA.sh new file mode 100644 index 0000000..cf442a8 --- /dev/null +++ b/configs/MachineA.sh @@ -0,0 +1,32 @@ +#!/bin/bash +echo "Adapter for A" +ip link add macvlan1 link eth0 type macvlan mode bridge +ip address add dev macvlan1 192.168.24.10/24 +ip link set macvlan1 up +ip route add 192.168.2.0/24 via 192.168.24.1 + +pip install flask + +touch app.py + +from flask import Flask, request + +app = Flask(__name__) + +@app.route('/', methods=['GET']) +def get_request(): + return 'GET request' + +@app.route('/', methods=['POST']) +def post_request(): + data = request.get_json() + return f'POST request with data: {data}' + +@app.route('/', methods=['PUT']) +def put_request(): + data = request.get_json() + return f'PUT request with data: {data}' + +app.run(host='0.0.0.0', port=5000) + +python app.py diff --git a/configs/MachineB.sh b/configs/MachineB.sh new file mode 100644 index 0000000..d325454 --- /dev/null +++ b/configs/MachineB.sh @@ -0,0 +1,12 @@ +#!/bin/bash +echo "Configuring adapter for A" +ip link add macvlan1 link eth0 type macvlan mode bridge +ip address add dev macvlan1 192.168.24.1/24 +ip link set macvlan1 up +echo "Adapter for A - ready\n" + +echo "Configuring adapter for C" +ip link add macvlan2 link eth0 type macvlan mode bridge +ip address add dev macvlan2 192.168.2.1/24 +ip link set macvlan2 up +echo "Adapter for C - ready\n" diff --git a/configs/MachineC.sh b/configs/MachineC.sh new file mode 100644 index 0000000..e9e640f --- /dev/null +++ b/configs/MachineC.sh @@ -0,0 +1,11 @@ +#!/bin/bash +echo "Configuring adapter for subnet C" +ip link add macvlan1 link eth0 type macvlan mode bridge +ip address add dev macvlan1 192.168.2.10/24 +ip link set macvlan1 up +ip route add 192.168.24.0/24 via 192.168.2.1 + +echo "Adapter for C - ready" + +printf "Sending request" +curl "http://192.168.28.10:5000" diff --git a/pictures/A - C.jpg b/pictures/A - C.jpg new file mode 100644 index 0000000..ea6fa80 Binary files /dev/null and b/pictures/A - C.jpg differ diff --git a/pictures/Bash_A.jpg b/pictures/Bash_A.jpg new file mode 100644 index 0000000..ef848a5 Binary files /dev/null and b/pictures/Bash_A.jpg differ diff --git a/pictures/Bash_B.jpg b/pictures/Bash_B.jpg new file mode 100644 index 0000000..6e31a07 Binary files /dev/null and b/pictures/Bash_B.jpg differ diff --git a/pictures/Bash_C.jpg b/pictures/Bash_C.jpg new file mode 100644 index 0000000..0144f0b Binary files /dev/null and b/pictures/Bash_C.jpg differ diff --git a/pictures/C - A - 2.jpg b/pictures/C - A - 2.jpg new file mode 100644 index 0000000..356e171 Binary files /dev/null and b/pictures/C - A - 2.jpg differ diff --git a/pictures/C - A.jpg b/pictures/C - A.jpg new file mode 100644 index 0000000..b1c1db2 Binary files /dev/null and b/pictures/C - A.jpg differ diff --git a/pictures/Flask.jpg b/pictures/Flask.jpg new file mode 100644 index 0000000..af989c6 Binary files /dev/null and b/pictures/Flask.jpg differ diff --git a/pictures/Http-server-1.jpg b/pictures/Http-server-1.jpg new file mode 100644 index 0000000..4bae5d9 Binary files /dev/null and b/pictures/Http-server-1.jpg differ diff --git a/pictures/Http-server.jpg b/pictures/Http-server.jpg new file mode 100644 index 0000000..24e4a48 Binary files /dev/null and b/pictures/Http-server.jpg differ diff --git a/pictures/Key_A.jpg b/pictures/Key_A.jpg new file mode 100644 index 0000000..0ffd990 Binary files /dev/null and b/pictures/Key_A.jpg differ diff --git a/pictures/Key_B.jpg b/pictures/Key_B.jpg new file mode 100644 index 0000000..bc3759b Binary files /dev/null and b/pictures/Key_B.jpg differ diff --git a/pictures/Key_C.jpg b/pictures/Key_C.jpg new file mode 100644 index 0000000..4467ea0 Binary files /dev/null and b/pictures/Key_C.jpg differ diff --git a/pictures/Request-1.jpg b/pictures/Request-1.jpg new file mode 100644 index 0000000..e36949c Binary files /dev/null and b/pictures/Request-1.jpg differ diff --git a/pictures/Request-2.jpg b/pictures/Request-2.jpg new file mode 100644 index 0000000..e148e6e Binary files /dev/null and b/pictures/Request-2.jpg differ diff --git a/pictures/Virtual machines.jpg b/pictures/Virtual machines.jpg new file mode 100644 index 0000000..985a677 Binary files /dev/null and b/pictures/Virtual machines.jpg differ diff --git a/pictures/adapter_A.jpg b/pictures/adapter_A.jpg new file mode 100644 index 0000000..bd3ffa5 Binary files /dev/null and b/pictures/adapter_A.jpg differ diff --git a/pictures/adapter_B_1.jpg b/pictures/adapter_B_1.jpg new file mode 100644 index 0000000..364c668 Binary files /dev/null and b/pictures/adapter_B_1.jpg differ diff --git a/pictures/adapter_B_2.jpg b/pictures/adapter_B_2.jpg new file mode 100644 index 0000000..6571873 Binary files /dev/null and b/pictures/adapter_B_2.jpg differ diff --git a/pictures/adapter_C.jpg b/pictures/adapter_C.jpg new file mode 100644 index 0000000..03c5269 Binary files /dev/null and b/pictures/adapter_C.jpg differ