diff --git a/application/app.py b/application/app.py new file mode 100644 index 0000000..835fc08 --- /dev/null +++ b/application/app.py @@ -0,0 +1,23 @@ +from flask import Flask, request + + +app = Flask(__name__) + + +@app.route('/get', methods=['GET']) +def function_get(): + return "GET test\n" + + +@app.route('/post', methods=['POST']) +def function_post(): + return f"POST test: {request.json}\n" + + +@app.route('/put', methods=['PUT']) +def function_put(): + return f"PUT test: {request.json}\n" + + +if __name__ == "__main__": + app.run(host='0.0.0.0', port=5000) \ No newline at end of file diff --git a/conf/vm_A.yaml b/conf/vm_A.yaml new file mode 100644 index 0000000..ea94e39 --- /dev/null +++ b/conf/vm_A.yaml @@ -0,0 +1,9 @@ +network: + ethernets: + enp0s3: + dhcp4: true + enp0s8: + dhcp4: no + addresses: [192.168.28.10/24] + gateway4: 192.168.28.1 + version: 2 \ No newline at end of file diff --git a/conf/vm_B.yaml b/conf/vm_B.yaml new file mode 100644 index 0000000..4119d31 --- /dev/null +++ b/conf/vm_B.yaml @@ -0,0 +1,11 @@ +network: + ethernets: + enp0s3: + dhcp4: true + enp0s8: + dhcp4: no + addresses: [192.168.28.1/24] + enp0s9: + dhcp4: no + addresses: [192.168.6.1/24] + version: 2 \ No newline at end of file diff --git a/conf/vm_C.yaml b/conf/vm_C.yaml new file mode 100644 index 0000000..deb8731 --- /dev/null +++ b/conf/vm_C.yaml @@ -0,0 +1,9 @@ +network: + ethernets: + enp0s3: + dhcp4: true + enp0s8: + dhcp4: no + addresses: [192.168.28.10/24] + gateway4: 192.168.6.1 + version: 2 \ No newline at end of file diff --git a/pictures/curls.png b/pictures/curls.png new file mode 100644 index 0000000..653aaab Binary files /dev/null and b/pictures/curls.png differ diff --git a/pictures/ip_rules.png b/pictures/ip_rules.png new file mode 100644 index 0000000..2256372 Binary files /dev/null and b/pictures/ip_rules.png differ diff --git a/pictures/netplanA.png b/pictures/netplanA.png new file mode 100644 index 0000000..f6ee91c Binary files /dev/null and b/pictures/netplanA.png differ diff --git a/pictures/netplanB.png b/pictures/netplanB.png new file mode 100644 index 0000000..b6c4c9f Binary files /dev/null and b/pictures/netplanB.png differ diff --git a/pictures/netplanC.png b/pictures/netplanC.png new file mode 100644 index 0000000..b565bed Binary files /dev/null and b/pictures/netplanC.png differ diff --git a/pictures/pythonA.png b/pictures/pythonA.png new file mode 100644 index 0000000..d59498c Binary files /dev/null and b/pictures/pythonA.png differ diff --git a/pictures/python_check.png b/pictures/python_check.png new file mode 100644 index 0000000..248764c Binary files /dev/null and b/pictures/python_check.png differ diff --git a/pictures/tcp_get.png b/pictures/tcp_get.png new file mode 100644 index 0000000..8c6b3b7 Binary files /dev/null and b/pictures/tcp_get.png differ diff --git a/pictures/tcp_post.png b/pictures/tcp_post.png new file mode 100644 index 0000000..bbc3ffc Binary files /dev/null and b/pictures/tcp_post.png differ diff --git a/pictures/tcp_put.png b/pictures/tcp_put.png new file mode 100644 index 0000000..deabf08 Binary files /dev/null and b/pictures/tcp_put.png differ diff --git a/report.md b/report.md new file mode 100644 index 0000000..b1ea803 --- /dev/null +++ b/report.md @@ -0,0 +1,68 @@ +# Отчёт по работе №1: Практика Linux (VirtualBox) + +
+ +**Паутов Владислав Николаевич** + +
+ +**Дата рождения: 28.06.2002** + +
+ +## 1. Создание ВМ +Начинаем работу с создания одной ВМ на основе скачанного образа. Дважды клонируем её.
+Далее настраиваем сетевые адаптеры по заданию: +- Вместо NAT - Сетевой мост +- Добавляем две внутренние подсети - `clientnet` и `servernet`

+ +После настройки запускаем все три ВМ и конфигурируем hostname и user: +- `user=pautov_1, hostname=pautov_server (server)` +- `user=pautov_2, hostname=pautov_gateway (gateway)` +- `user=pautov_3, hostname=pautov_client (client)` + +## 2. Конфигурация netplan +Перейдем к настройке netplan конфигов.
+Меняем конфигурационные файлы командой: +```shell +sudo nano /etc/netplan/00-installer-config.yaml +``` +А также применяем новые сетевые настройки: +```shell +sudo netplan apply +``` +Проверим полученный результат:
+ +![Netplan A](pictures/netplanA.png) +![Netplan B](pictures/netplanB.png) +![Netplan C](pictures/netplanC.png) + +## 3. Индивидуальная настройка ВМ +### Linux A (server) +В корневой папке создадим файл `app.py` с простым Flask приложением на три эндпоинта.
+Также напишем сервис для автозапуска приложения: + +![Flask приложение и сервис для его запуска](pictures/pythonA.png) + +### Linux B (gateway) +Настроим `iptables` на ВМ-шлюзе для фильтрации пакетов по 5000 порту.
+Делаем это также через терминал командами по заданию.
+После изменения сохраняем конфигурацию через `iptables-persistent`.
+Проверим полученный результат:
+ +![ip_rules](pictures/ip_rules.png) + +## 4. Тестирование всей системы +Для проверки всей системы необходимо: +- Запустить `python3 app.py` на машине **А** +- Запустить `tcpdump` на машине **B** +- Начать отправлять `curl` запросы на машине **C** +Проверим полученный результат:
+ +![ВМ С](pictures/python_check.png) + +Также проверим логи `tcpdump` на машине **B**: + +![get](pictures/tcp_get.png) +![post](pictures/tcp_post.png) +![put](pictures/tcp_put.png)