diff --git a/application/app.py b/application/app.py new file mode 100644 index 0000000..7618e0d --- /dev/null +++ b/application/app.py @@ -0,0 +1,18 @@ +from flask import Flask, request + +app = Flask(__name__) + +@app.route('/get', methods=['GET']) +def get_endpoint(): + return "This is a GET request response\n" + +@app.route('/post', methods=['POST']) +def post_endpoint(): + return f"Received POST data: {request.json}\n" + +@app.route('/put', methods=['PUT']) +def put_endpoint(): + return f"Received PUT data: {request.json}\n" + +if __name__ == "__main__": + app.run(host='0.0.0.0', port=5000) \ No newline at end of file diff --git a/configs/LinuxA.yaml b/configs/LinuxA.yaml new file mode 100644 index 0000000..6a3d7c6 --- /dev/null +++ b/configs/LinuxA.yaml @@ -0,0 +1,9 @@ +network: + ethernets: + enp0s3: + dhcp4: true + enp0s8: + dhcp4: no + addresses: [192.168.11.10/24] + gateway4: 192.168.11.1 + version: 2 \ No newline at end of file diff --git a/configs/LinuxB.yaml b/configs/LinuxB.yaml new file mode 100644 index 0000000..ad314e4 --- /dev/null +++ b/configs/LinuxB.yaml @@ -0,0 +1,11 @@ +network: + ethernets: + enp0s3: + dhcp4: true + enp0s8: + dhcp4: no + addresses: [192.168.11.1/24] + enp0s9: + dhcp4: no + addresses: [192.168.3.1/24] + version: 2 \ No newline at end of file diff --git a/configs/LinuxC.yaml b/configs/LinuxC.yaml new file mode 100644 index 0000000..97fe7ff --- /dev/null +++ b/configs/LinuxC.yaml @@ -0,0 +1,12 @@ +network: + ethernets: + enp0s3: + dhcp4: true + enp0s8: + dhcp4: no + addresses: [192.168.3.10/24] + gateway4: 192.168.3.1 + routes: + - to: 192.168.11.0/24 + via: 192.168.3.1 + version: 2 \ No newline at end of file diff --git a/pictures/app_request-response_check.png b/pictures/app_request-response_check.png new file mode 100644 index 0000000..2631d49 Binary files /dev/null and b/pictures/app_request-response_check.png differ diff --git a/pictures/application_web-server.png b/pictures/application_web-server.png new file mode 100644 index 0000000..cae1f4e Binary files /dev/null and b/pictures/application_web-server.png differ diff --git a/pictures/client_request_check.png b/pictures/client_request_check.png new file mode 100644 index 0000000..1a936fe Binary files /dev/null and b/pictures/client_request_check.png differ diff --git a/pictures/ip_rules_and_firewall.png b/pictures/ip_rules_and_firewall.png new file mode 100644 index 0000000..832b25e Binary files /dev/null and b/pictures/ip_rules_and_firewall.png differ diff --git a/pictures/netplanA.png b/pictures/netplanA.png new file mode 100644 index 0000000..8dffcf8 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..fc24192 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..980fe32 Binary files /dev/null and b/pictures/netplanC.png differ diff --git a/pictures/tcpdump_firewall-block-5500-port.png b/pictures/tcpdump_firewall-block-5500-port.png new file mode 100644 index 0000000..cf10d0e Binary files /dev/null and b/pictures/tcpdump_firewall-block-5500-port.png differ diff --git a/pictures/web-server_status.png b/pictures/web-server_status.png new file mode 100644 index 0000000..9f3a0d3 Binary files /dev/null and b/pictures/web-server_status.png differ diff --git a/report.md b/report.md new file mode 100644 index 0000000..9bd4c82 --- /dev/null +++ b/report.md @@ -0,0 +1,71 @@ +@@ -0,0 +1,68 @@ +# Отчёт по работе №1: Практика Linux (VirtualBox) + +
+ +**Чумичев Вячеслав Алексеевич** + +
+ +**Дата рождения: 11.03.2002** + +
+ +## 1. Создание ВМ +Начинаем работу с создания одной ВМ на основе скачанного образа. Дважды клонируем её.
+Далее настраиваем сетевые адаптеры по заданию: +- Вместо NAT - Сетевой мост +- Добавляем две внутренние подсети - `clientnet` и `servernet`

+ +После настройки запускаем все три ВМ и конфигурируем hostname и user: +- `user=chumichev_1, hostname=chumichev_server (server)` +- `user=chumichev_2, hostname=chumichev_gateway (gateway)` +- `user=chumichev_3, hostname=chumichev_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/application_web-server.png) + +### Linux B (gateway) +Настроим `iptables` на ВМ-шлюзе для фильтрации пакетов по 5000 порту.
+Делаем это также через терминал командами по заданию.
+После изменения сохраняем конфигурацию через `iptables-persistent`.
+Проверим полученный результат:
+ +![ip_rules](pictures/ip_rules_and_firewall.png) + +## 4. Тестирование всей системы +Для проверки всей системы необходимо: +- Проверить работу web-service `app.py` на машине **А** + +![Проверка статуса работы сервиса автозапуска приложения](pictures/web-server_status.png) + +- Запустить `tcpdump` на машине **B** и проверить работу firewall + +![tcpdump по порту 5500](pictures/tcpdump_firewall-block-5500-port.png) + +- Начать отправлять `curl` запросы на машине **C** +Проверим полученный результат:
+ +![ВМ С](pictures/client_request_check.png) + +![ВМ A](pictures/app_request-response_check.png) \ No newline at end of file