diff --git a/application/orange_5000.py b/application/orange_5000.py new file mode 100644 index 0000000..5641fce --- /dev/null +++ b/application/orange_5000.py @@ -0,0 +1,20 @@ +from flask import Flask, request, jsonify + +app = Flask(__name__) + +@app.route('/get', methods=['GET']) +def get(): + return jsonify({"method": "GET", "message": "Get response"}), 200 + +@app.route('/post', methods=['POST']) +def post(): + data = request.get_json() + return jsonify({"method": "POST", "received": data}), 200 + +@app.route('/put', methods=['PUT']) +def put(): + data = request.get_json() + return jsonify({"method": "PUT", "received":data}),200 + +if __name__ == '__main__': + app.run(host='0.0.0.0', port=5000) diff --git a/configs/linux_A/00-installer-config.yaml b/configs/linux_A/00-installer-config.yaml new file mode 100644 index 0000000..31a6ec3 --- /dev/null +++ b/configs/linux_A/00-installer-config.yaml @@ -0,0 +1,14 @@ +# This is the network config written by 'subiquity' +network: + ethernets: + enp0s3: + addresses: + - 192.168.21.10/24 + routes: + - to: default + via: 192.168.21.1 + dhcp4: false + enp0s8: + dhcp4: true + version: 2 + diff --git a/configs/linux_B/00-installer-config.yaml b/configs/linux_B/00-installer-config.yaml new file mode 100644 index 0000000..2433058 --- /dev/null +++ b/configs/linux_B/00-installer-config.yaml @@ -0,0 +1,14 @@ +# This is the network config written by 'subiquity' +network: + version: 2 + ethernets: + enp0s3: + addresses: + - 192.168.21.1/24 + dhcp4: false + enp0s8: + addresses: + - 192.168.5.1/24 + dhcp4: false + enp0s9: + dhcp4: true diff --git a/configs/linux_B/rules.v4 b/configs/linux_B/rules.v4 new file mode 100644 index 0000000..3664406 --- /dev/null +++ b/configs/linux_B/rules.v4 @@ -0,0 +1,10 @@ +# Generated by iptables-save v1.8.4 on Wed Mar 11 04:29:30 2026 +*filter +:INPUT ACCEPT [57:5386] +:FORWARD DROP [4:304] +:OUTPUT ACCEPT [45:4608] +-A FORWARD -i enp0s8 -o enp0s3 -p tcp -m tcp --dport 5000 --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j ACCEPT +-A FORWARD -i enp0s8 -o enp0s3 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT +-A FORWARD -i enp0s3 -o enp0s8 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT +COMMIT +# Completed on Wed Mar 11 04:29:30 2026 diff --git a/configs/linux_B/sysctl.conf b/configs/linux_B/sysctl.conf new file mode 100644 index 0000000..b41f07b --- /dev/null +++ b/configs/linux_B/sysctl.conf @@ -0,0 +1,68 @@ +# +# /etc/sysctl.conf - Configuration file for setting system variables +# See /etc/sysctl.d/ for additional system variables. +# See sysctl.conf (5) for information. +# + +#kernel.domainname = example.com + +# Uncomment the following to stop low-level messages on console +#kernel.printk = 3 4 1 3 + +##############################################################3 +# Functions previously found in netbase +# + +# Uncomment the next two lines to enable Spoof protection (reverse-path filter) +# Turn on Source Address Verification in all interfaces to +# prevent some spoofing attacks +#net.ipv4.conf.default.rp_filter=1 +#net.ipv4.conf.all.rp_filter=1 + +# Uncomment the next line to enable TCP/IP SYN cookies +# See http://lwn.net/Articles/277146/ +# Note: This may impact IPv6 TCP sessions too +#net.ipv4.tcp_syncookies=1 + +# Uncomment the next line to enable packet forwarding for IPv4 +net.ipv4.ip_forward=1 + +# Uncomment the next line to enable packet forwarding for IPv6 +# Enabling this option disables Stateless Address Autoconfiguration +# based on Router Advertisements for this host +#net.ipv6.conf.all.forwarding=1 + + +################################################################### +# Additional settings - these settings can improve the network +# security of the host and prevent against some network attacks +# including spoofing attacks and man in the middle attacks through +# redirection. Some network environments, however, require that these +# settings are disabled so review and enable them as needed. +# +# Do not accept ICMP redirects (prevent MITM attacks) +#net.ipv4.conf.all.accept_redirects = 0 +#net.ipv6.conf.all.accept_redirects = 0 +# _or_ +# Accept ICMP redirects only for gateways listed in our default +# gateway list (enabled by default) +# net.ipv4.conf.all.secure_redirects = 1 +# +# Do not send ICMP redirects (we are not a router) +#net.ipv4.conf.all.send_redirects = 0 +# +# Do not accept IP source route packets (we are not a router) +#net.ipv4.conf.all.accept_source_route = 0 +#net.ipv6.conf.all.accept_source_route = 0 +# +# Log Martian Packets +#net.ipv4.conf.all.log_martians = 1 +# + +################################################################### +# Magic system request Key +# 0=disable, 1=enable all, >1 bitmask of sysrq functions +# See https://www.kernel.org/doc/html/latest/admin-guide/sysrq.html +# for what other values do +#kernel.sysrq=438 + diff --git a/configs/linux_C/00-installer-config.yaml b/configs/linux_C/00-installer-config.yaml new file mode 100644 index 0000000..09f83b8 --- /dev/null +++ b/configs/linux_C/00-installer-config.yaml @@ -0,0 +1,13 @@ +# This is the network config written by 'subiquity' +network: + ethernets: + enp0s3: + addresses: + - 192.168.5.10/24 + routes: + - to: default + via: 192.168.5.1 + dhcp4: false + enp0s8: + dhcp4: true + version: 2 diff --git a/report.md b/report.md new file mode 100644 index 0000000..432e8a1 --- /dev/null +++ b/report.md @@ -0,0 +1,272 @@ +#Linux #github + +https://github.com/antonaleks/LinuxPractice + +# Введение + +Данная практика посвещена базовым принципам администрирования Linux. Для выполнения практики необходимо развернуть 3 виртуальные машины Linux. + +Как пример, можно использовать Virtual Box + Ubuntu Server 20.04. + +# Задание + +Для выполнения данного задания необходимо: + +1. Развернуть три виртуальные машины Linux, согласно схеме ниже + +[![info](https://github.com/antonaleks/LinuxPractice/raw/main/Linux%20Practice.png)](https://github.com/antonaleks/LinuxPractice/blob/main/Linux%20Practice.png) + +2. Linux A +- [x] Сконфигурировать Hostname следующим образом: _server (пропустить если делаете через Play with docker) +- [x] Создать пользователя _1 (пропустить если делаете через Play with docker) +- [x] Сконфигурировать виртуальный интерфейс со следующим ip адресом: 192.168.<день рождения>.10/24 +- [x] Развернуть Http сервер на виртуальной машине на порту 5000. Необходимо реализовать минимум три эндпоинта (запрос /get, /post, /put) +2. Linux B +- [x] Сконфигурировать Hostname следующим образом: _gateway (пропустить если делаете через Play with docker) +- [x] Создать пользователя _2 (пропустить если делаете через Play with docker) +- [x] Сконфигурировать 2 виртуальных интерфейс со следующими ip адресом: 192.168.<день рождения>.1/24, 192.168.<месяц рождения>.10/24 +- [x] С помощью утилит ip route и iptables настроить маршрут пакетов от Linux A до C. Должны быть запрещены все пакеты, кроме http пакетов через порт 5000 (маршруты обязательно, файрвол опционально) +- [x] Запустить программу tcpdump с фильтрацией по портам 5000 +2. Linux C +- [x] Сконфигурировать Hostname следующим образом: _client (пропустить если делаете через Play with docker) +- [x] Создать пользователя _3 (пропустить если делаете через Play with docker) +- [x] Сконфигурировать виртуальный интерфейс со следующим ip адресом: 192.168.<месяц рождения>.100/24 +- [x] С помощью команды curl на машине C послать 3 запроса на машину А в http сервер (/get, /post, /put) +- [x] При перезагрузки системы все сервисы и сетевая архитектура должны также функционировать (сохранить свои настройки) +- [x] Сделать скриншоты всех этапов задания +- [x] Оформить отчет в виде Markdown файла. Приложить конфигурационные файлы в репозиторий +- [x] Для play with docker также нужно написать bash скрипты для воспроизведения на новых вм + +Репозиторий оформить следующим образом: + +- application - исходный код http сервера +- configs - конфигурационные файлы сетевых настроек виртуальных машин +- report.md - Отчет markdown + +P.S. Если не получилось использовать разные утилиты для настройки сети, используйте netplan Смотрите [мануал](https://github.com/antonaleks/LinuxPractice/blob/main/guide/Manual.md) - там информация для virtual box и Play with docker + +# Отчет по практической работе: Базовые принципы администрирования Linux +____________ +**Цель работы:** Настройка трех виртуальных машин Linux (сервер, шлюз и клиент), конфигурация сети между ними, настройка маршрутизации с фильтрацией трафика и развертывание просто веб-сервера. + +**Инструменты:** VirtualBox, Ubuntu Server 20.04.06 LTS. + +Данные: +- Фамиля: Абышев +- День рождения: 21 +- Месяц рождени: май (5) + +# Глава 1. Подготовка виртуальных машин +___________ +### Linux_A + Your name: Linux_A + Your server's name: orange_server + Pick a username: orange + +![screenshots](screenshots/Pasted%20image%2020260309042351.png) + +### Linux_B + Your name: Linux_B + Your server's name: orange_server_2 + Pick a username: orange_2 + +![screenshots](screenshots/Pasted%20image%2020260310021629.png) + +### Linux_C + Your name: Linux_C + Your server's name: orange_server_3 + Pick a username: orange_3 + +![screenshots](screenshots/Pasted%20image%2020260310033946.png) + +# Глава 2. Настройка Linux A (сервер) +_____ +2.1. Имя хоста и пользователь +- Hostname: orange_server +- Пользователь: orange +2.2. Настройка сети + Сетевые адаптеры в VirtualBox: + - Адаптер 1: Сетевой мост (для доступа) + - Адаптер 2: Внутренняя сеть + +Сгенерируем ключ: + +![screenshot](screenshots/Pasted%20image%2020260310094948.png) + +Подставим IP: + +![screenshot](screenshots/Pasted%20image%2020260310095415.png) + +Конфигурация Netplan (/etc/netplan/00-installer-config.yaml): + +![screenshot](screenshots/Pasted%20image%2020260311073021.png) + +Проверка IP - адресов после применения netplan: + +![screenshot](screenshots/Pasted%20image%2020260311073036.png) + +2.3. Настройка веб-сервера (Flask): + Установим flask: + +![screenshot](screenshots/Pasted%20image%2020260309064644.png) + +Завершена: + +![screenshot](screenshots/Pasted%20image%2020260309064712.png) + +Создадим директорию для http_server: + +![screenshot](screenshots/Pasted%20image%2020260309065357.png) + +Проверим текущую директорию с помощью команды pwd и создадим файл orange_5000.py + +![screenshot](screenshots/Pasted%20image%2020260309065830.png) + +![screenshot](screenshots/Pasted%20image%2020260309074957.png) + +Проверим путь к файлу flask с помощью команды which flask: + +![screenshot](screenshots/Pasted%20image%2020260309081201.png) + +Создадим systemd unit файл, который будет запускать сервер автоматически при старте системы: + +![screenshots](screenshots/Pasted%20image%2020260310064843.png) + +Включим и запустим: + +![screenshots](screenshots/Pasted%20image%2020260309081451.png) + +Результат: + +![screenshots](screenshots/Pasted%20image%2020260309091031.png) + +# Глава 3. Настройка Linux B (шлюз) + +3.1. Имя хоста и пользователь +- Hostname: orange_server_2 +- Пользователь: orange_2 +3.2. Настройка сети: + Сетевые адаптеры в VirtualBox: + - Адаптер 1: Внутренняя сеть + - Адаптер 2: Внутренняя сеть + - Адаптер 3: Сетевой мост (для доступа) + +Отредактируем файл net-plan: + +![screenshot](screenshots/Pasted%20image%2020260310022655.png) +![screenshot](screenshots/Pasted%20image%2020260310023114.png) + +Внесенные изменения с помощью команды netplan apply: + +![screenshot](screenshots/Pasted%20image%2020260311072700.png) + +Посмотрим изменения через ip a: + +![screenshots](screenshots/Pasted%20image%2020260311072723.png) + +3.3. Настройка маршрутизации и файрвола: +Включение IP Forwaarding: + +![screenshots](screenshots/Pasted%20image%2020260310024954.png) + +![screenshots](screenshots/Pasted%20image%2020260310025033.png) + +По умолчанию запрещаем весь пересылаемый через сервер трафик: + +![screenshots](screenshots/Pasted%20image%2020260310025717.png) + +Чтобы разрешить переброс только конкретных пакетов по конкретному порту, следует настроить маршрут. Проверим внесенные правила с помощью iptables -L: + +![screenshots](screenshots/Pasted%20image%2020260311071654.png) + +Сохраним внесенные изменения: + +![screenshots](screenshots/Pasted%20image%2020260310032151.png) +![screenshots](screenshots/Pasted%20image%2020260311072937.png) + +# Глава 4. Настройка Linux C +4.1. Имя хоста и пользователь +- Hostname: orange_server_3 +- Пользователь: orange_3 +4.2. Настройка сети: + Сетевые адаптеры в VirtualBox: + - Адаптер 1: Внутренняя сеть + - Адаптер 2: Сетевой мост (для доступа) + +Проверим текущие интерфейсы: + +![screenshots](screenshots/Pasted%20image%2020260311072412.png) + +Конфигурация Netplan (/etc/netplan/00-installer-config.yaml + +![screenshots](screenshots/Pasted%20image%2020260311072444.png) + +Проверка IP- адрессов: + +![screenshots](screenshots/Pasted%20image%2020260310070423.png) + +Установка curl: + +![screenshots](screenshots/Pasted%20image%2020260310044609.png) + +# Глава 5. Тестирование + +## 5.1. Запуска tcpdump на шлюзе (Linux_B): + +![screenshots](screenshots/Pasted%20image%2020260310070638.png) + +## 5.2. Отправка запросов с клиента Linux_C на сервер Linux_A +С клиента (С) выполнены команды curl к серверу А: +- GET: + +![screenshots](screenshots/Pasted%20image%2020260311072037.png) +![screenshots](screenshots/Pasted%20image%2020260311072128.png) + +- POST: + +![screenshots](screenshots/Pasted%20image%2020260311072157.png) +![screenshots](screenshots/Pasted%20image%2020260311072211.png) + +- PUT: + +![screenshots](screenshots/Pasted%20image%2020260311072249.png) +![screenshots](screenshots/Pasted%20image%2020260311072240.png) + + +## 5.4. Проверка блокировки другого трафика +Попытка выполнить ping с клиента C на сервер А была неуспешной (пакеты блокируются шлюзом B): + +![screenshots](screenshots/Pasted%20image%2020260310071444.png) + +# Глава 6. Проверка сохранения настроек после перезагрузки +Все три виртуальные машины были перезагружены с помощью команды sudo reboot. После перезагрузки выполнены следующие проверки: +- IP Forwarding на Linux B активен: + + ![screenshots](screenshots/Pasted%20image%2020260310072821.png) + +- Правила iptables на Linux_B загружены: + + ![screenshotss](screenshots/Pasted%20image%2020260311071654.png) + +- Веб-сервер на Linux_A запущен: + + ![screenshots](screenshots/Pasted%20image%2020260310073104.png) + +- Тестовый запрос с Linux_C на Linux_A: + + ![screenshots](screenshots/Pasted%20image%2020260311071532.png) + ![screenshots](screenshots/Pasted%20image%2020260310073243.png) + ![screenshots](screenshots/Pasted%20image%2020260310073459.png) + +# Глава 7. Вывод +В ходе выполнения практической работы №1 "Базовые принципы администрирования Linux" была успешна настроена сетевая инфраструктура из трех виртуальных машин Linux. Настроен IP - адрес для сервера (А) и клиента (С), а также два статических IP для шлюза (B). С помощью iptables на шлюзе настроена маршрутизация и фильтрация трафика, разрешающая только HTTP - запросы на порт 5000 от клиента к серверу. Веб - сервер FLask был развернут на сервере и настроен для автозапуска с помощью systemd. Все настройки сохраняются после перезагрузки системы. +# Используемая литература: + +1. https://1cloud.ru/help/linux/change_ip_in_ubuntu_20 - # Замена IP в Ubuntu 20.04 с помощью net-tools. +2. https://habr.com/ru/articles/783574/ - # Flask для начинающих +3. https://flask.palletsprojects.com/en/stable/quickstart/ +4. https://habr.com/ru/companies/slurm/articles/255845/ - # Systemd за пять минут +5. https://tokmakov.msk.ru/blog/item/494 +6. https://timeweb.cloud/docs/unix-guides/iptables-setup +7. https://habr.com/ru/articles/747616/ - # Введение в Iptables +8. https://pc.ru/articles/poluchenie-root-prav-pri-rabote-v-winscp - # Получение root прав при работе в WinSCP diff --git a/screenshots/Pasted image 20260309042351.png b/screenshots/Pasted image 20260309042351.png new file mode 100644 index 0000000..1a37c12 Binary files /dev/null and b/screenshots/Pasted image 20260309042351.png differ diff --git a/screenshots/Pasted image 20260309052025.png b/screenshots/Pasted image 20260309052025.png new file mode 100644 index 0000000..1f1824a Binary files /dev/null and b/screenshots/Pasted image 20260309052025.png differ diff --git a/screenshots/Pasted image 20260309052912.png b/screenshots/Pasted image 20260309052912.png new file mode 100644 index 0000000..5be4645 Binary files /dev/null and b/screenshots/Pasted image 20260309052912.png differ diff --git a/screenshots/Pasted image 20260309053126.png b/screenshots/Pasted image 20260309053126.png new file mode 100644 index 0000000..4223bb9 Binary files /dev/null and b/screenshots/Pasted image 20260309053126.png differ diff --git a/screenshots/Pasted image 20260309053609.png b/screenshots/Pasted image 20260309053609.png new file mode 100644 index 0000000..eb7d4b6 Binary files /dev/null and b/screenshots/Pasted image 20260309053609.png differ diff --git a/screenshots/Pasted image 20260309054254.png b/screenshots/Pasted image 20260309054254.png new file mode 100644 index 0000000..ddb51cd Binary files /dev/null and b/screenshots/Pasted image 20260309054254.png differ diff --git a/screenshots/Pasted image 20260309064644.png b/screenshots/Pasted image 20260309064644.png new file mode 100644 index 0000000..eb8b9a7 Binary files /dev/null and b/screenshots/Pasted image 20260309064644.png differ diff --git a/screenshots/Pasted image 20260309064712.png b/screenshots/Pasted image 20260309064712.png new file mode 100644 index 0000000..1f3239b Binary files /dev/null and b/screenshots/Pasted image 20260309064712.png differ diff --git a/screenshots/Pasted image 20260309065254.png b/screenshots/Pasted image 20260309065254.png new file mode 100644 index 0000000..31eabff Binary files /dev/null and b/screenshots/Pasted image 20260309065254.png differ diff --git a/screenshots/Pasted image 20260309065256.png b/screenshots/Pasted image 20260309065256.png new file mode 100644 index 0000000..31eabff Binary files /dev/null and b/screenshots/Pasted image 20260309065256.png differ diff --git a/screenshots/Pasted image 20260309065357.png b/screenshots/Pasted image 20260309065357.png new file mode 100644 index 0000000..7b07dbb Binary files /dev/null and b/screenshots/Pasted image 20260309065357.png differ diff --git a/screenshots/Pasted image 20260309065830.png b/screenshots/Pasted image 20260309065830.png new file mode 100644 index 0000000..e806030 Binary files /dev/null and b/screenshots/Pasted image 20260309065830.png differ diff --git a/screenshots/Pasted image 20260309074957.png b/screenshots/Pasted image 20260309074957.png new file mode 100644 index 0000000..54944d8 Binary files /dev/null and b/screenshots/Pasted image 20260309074957.png differ diff --git a/screenshots/Pasted image 20260309075902.png b/screenshots/Pasted image 20260309075902.png new file mode 100644 index 0000000..88ae938 Binary files /dev/null and b/screenshots/Pasted image 20260309075902.png differ diff --git a/screenshots/Pasted image 20260309081201.png b/screenshots/Pasted image 20260309081201.png new file mode 100644 index 0000000..4feb186 Binary files /dev/null and b/screenshots/Pasted image 20260309081201.png differ diff --git a/screenshots/Pasted image 20260309081451.png b/screenshots/Pasted image 20260309081451.png new file mode 100644 index 0000000..0d7772a Binary files /dev/null and b/screenshots/Pasted image 20260309081451.png differ diff --git a/screenshots/Pasted image 20260309081959.png b/screenshots/Pasted image 20260309081959.png new file mode 100644 index 0000000..c2bea5b Binary files /dev/null and b/screenshots/Pasted image 20260309081959.png differ diff --git a/screenshots/Pasted image 20260309091031.png b/screenshots/Pasted image 20260309091031.png new file mode 100644 index 0000000..df97e0f Binary files /dev/null and b/screenshots/Pasted image 20260309091031.png differ diff --git a/screenshots/Pasted image 20260310021629.png b/screenshots/Pasted image 20260310021629.png new file mode 100644 index 0000000..b0e788a Binary files /dev/null and b/screenshots/Pasted image 20260310021629.png differ diff --git a/screenshots/Pasted image 20260310021742.png b/screenshots/Pasted image 20260310021742.png new file mode 100644 index 0000000..72e6e35 Binary files /dev/null and b/screenshots/Pasted image 20260310021742.png differ diff --git a/screenshots/Pasted image 20260310022540.png b/screenshots/Pasted image 20260310022540.png new file mode 100644 index 0000000..bdb77d1 Binary files /dev/null and b/screenshots/Pasted image 20260310022540.png differ diff --git a/screenshots/Pasted image 20260310022655.png b/screenshots/Pasted image 20260310022655.png new file mode 100644 index 0000000..e2fef8e Binary files /dev/null and b/screenshots/Pasted image 20260310022655.png differ diff --git a/screenshots/Pasted image 20260310023114.png b/screenshots/Pasted image 20260310023114.png new file mode 100644 index 0000000..3b296f6 Binary files /dev/null and b/screenshots/Pasted image 20260310023114.png differ diff --git a/screenshots/Pasted image 20260310023349.png b/screenshots/Pasted image 20260310023349.png new file mode 100644 index 0000000..0c46db0 Binary files /dev/null and b/screenshots/Pasted image 20260310023349.png differ diff --git a/screenshots/Pasted image 20260310023528.png b/screenshots/Pasted image 20260310023528.png new file mode 100644 index 0000000..db5fe69 Binary files /dev/null and b/screenshots/Pasted image 20260310023528.png differ diff --git a/screenshots/Pasted image 20260310024104.png b/screenshots/Pasted image 20260310024104.png new file mode 100644 index 0000000..110e188 Binary files /dev/null and b/screenshots/Pasted image 20260310024104.png differ diff --git a/screenshots/Pasted image 20260310024201.png b/screenshots/Pasted image 20260310024201.png new file mode 100644 index 0000000..03162ed Binary files /dev/null and b/screenshots/Pasted image 20260310024201.png differ diff --git a/screenshots/Pasted image 20260310024954.png b/screenshots/Pasted image 20260310024954.png new file mode 100644 index 0000000..cdcb3f9 Binary files /dev/null and b/screenshots/Pasted image 20260310024954.png differ diff --git a/screenshots/Pasted image 20260310025033.png b/screenshots/Pasted image 20260310025033.png new file mode 100644 index 0000000..18cac11 Binary files /dev/null and b/screenshots/Pasted image 20260310025033.png differ diff --git a/screenshots/Pasted image 20260310025717.png b/screenshots/Pasted image 20260310025717.png new file mode 100644 index 0000000..ff257bb Binary files /dev/null and b/screenshots/Pasted image 20260310025717.png differ diff --git a/screenshots/Pasted image 20260310030145.png b/screenshots/Pasted image 20260310030145.png new file mode 100644 index 0000000..ea35065 Binary files /dev/null and b/screenshots/Pasted image 20260310030145.png differ diff --git a/screenshots/Pasted image 20260310030631.png b/screenshots/Pasted image 20260310030631.png new file mode 100644 index 0000000..b45f7e3 Binary files /dev/null and b/screenshots/Pasted image 20260310030631.png differ diff --git a/screenshots/Pasted image 20260310031008.png b/screenshots/Pasted image 20260310031008.png new file mode 100644 index 0000000..7912624 Binary files /dev/null and b/screenshots/Pasted image 20260310031008.png differ diff --git a/screenshots/Pasted image 20260310032151.png b/screenshots/Pasted image 20260310032151.png new file mode 100644 index 0000000..9f350dc Binary files /dev/null and b/screenshots/Pasted image 20260310032151.png differ diff --git a/screenshots/Pasted image 20260310032744.png b/screenshots/Pasted image 20260310032744.png new file mode 100644 index 0000000..0fde210 Binary files /dev/null and b/screenshots/Pasted image 20260310032744.png differ diff --git a/screenshots/Pasted image 20260310033946.png b/screenshots/Pasted image 20260310033946.png new file mode 100644 index 0000000..22327fe Binary files /dev/null and b/screenshots/Pasted image 20260310033946.png differ diff --git a/screenshots/Pasted image 20260310043722.png b/screenshots/Pasted image 20260310043722.png new file mode 100644 index 0000000..17e2968 Binary files /dev/null and b/screenshots/Pasted image 20260310043722.png differ diff --git a/screenshots/Pasted image 20260310044127.png b/screenshots/Pasted image 20260310044127.png new file mode 100644 index 0000000..5056620 Binary files /dev/null and b/screenshots/Pasted image 20260310044127.png differ diff --git a/screenshots/Pasted image 20260310044431.png b/screenshots/Pasted image 20260310044431.png new file mode 100644 index 0000000..cf4e1d4 Binary files /dev/null and b/screenshots/Pasted image 20260310044431.png differ diff --git a/screenshots/Pasted image 20260310044609.png b/screenshots/Pasted image 20260310044609.png new file mode 100644 index 0000000..b2d5c12 Binary files /dev/null and b/screenshots/Pasted image 20260310044609.png differ diff --git a/screenshots/Pasted image 20260310050019.png b/screenshots/Pasted image 20260310050019.png new file mode 100644 index 0000000..8fc3043 Binary files /dev/null and b/screenshots/Pasted image 20260310050019.png differ diff --git a/screenshots/Pasted image 20260310050132.png b/screenshots/Pasted image 20260310050132.png new file mode 100644 index 0000000..4487851 Binary files /dev/null and b/screenshots/Pasted image 20260310050132.png differ diff --git a/screenshots/Pasted image 20260310050422.png b/screenshots/Pasted image 20260310050422.png new file mode 100644 index 0000000..3a8c7a1 Binary files /dev/null and b/screenshots/Pasted image 20260310050422.png differ diff --git a/screenshots/Pasted image 20260310050445.png b/screenshots/Pasted image 20260310050445.png new file mode 100644 index 0000000..e69d827 Binary files /dev/null and b/screenshots/Pasted image 20260310050445.png differ diff --git a/screenshots/Pasted image 20260310063213.png b/screenshots/Pasted image 20260310063213.png new file mode 100644 index 0000000..84ecd85 Binary files /dev/null and b/screenshots/Pasted image 20260310063213.png differ diff --git a/screenshots/Pasted image 20260310063321.png b/screenshots/Pasted image 20260310063321.png new file mode 100644 index 0000000..d84713d Binary files /dev/null and b/screenshots/Pasted image 20260310063321.png differ diff --git a/screenshots/Pasted image 20260310064843.png b/screenshots/Pasted image 20260310064843.png new file mode 100644 index 0000000..7b372ae Binary files /dev/null and b/screenshots/Pasted image 20260310064843.png differ diff --git a/screenshots/Pasted image 20260310065807.png b/screenshots/Pasted image 20260310065807.png new file mode 100644 index 0000000..5ce3c9c Binary files /dev/null and b/screenshots/Pasted image 20260310065807.png differ diff --git a/screenshots/Pasted image 20260310065847.png b/screenshots/Pasted image 20260310065847.png new file mode 100644 index 0000000..2aa1364 Binary files /dev/null and b/screenshots/Pasted image 20260310065847.png differ diff --git a/screenshots/Pasted image 20260310070423.png b/screenshots/Pasted image 20260310070423.png new file mode 100644 index 0000000..8f34c0c Binary files /dev/null and b/screenshots/Pasted image 20260310070423.png differ diff --git a/screenshots/Pasted image 20260310070638.png b/screenshots/Pasted image 20260310070638.png new file mode 100644 index 0000000..4daffa6 Binary files /dev/null and b/screenshots/Pasted image 20260310070638.png differ diff --git a/screenshots/Pasted image 20260310070830.png b/screenshots/Pasted image 20260310070830.png new file mode 100644 index 0000000..85a796e Binary files /dev/null and b/screenshots/Pasted image 20260310070830.png differ diff --git a/screenshots/Pasted image 20260310070841.png b/screenshots/Pasted image 20260310070841.png new file mode 100644 index 0000000..104da56 Binary files /dev/null and b/screenshots/Pasted image 20260310070841.png differ diff --git a/screenshots/Pasted image 20260310071444.png b/screenshots/Pasted image 20260310071444.png new file mode 100644 index 0000000..732cc0d Binary files /dev/null and b/screenshots/Pasted image 20260310071444.png differ diff --git a/screenshots/Pasted image 20260310071710.png b/screenshots/Pasted image 20260310071710.png new file mode 100644 index 0000000..e2fa89f Binary files /dev/null and b/screenshots/Pasted image 20260310071710.png differ diff --git a/screenshots/Pasted image 20260310071721.png b/screenshots/Pasted image 20260310071721.png new file mode 100644 index 0000000..36a7e98 Binary files /dev/null and b/screenshots/Pasted image 20260310071721.png differ diff --git a/screenshots/Pasted image 20260310071919.png b/screenshots/Pasted image 20260310071919.png new file mode 100644 index 0000000..69ad7f4 Binary files /dev/null and b/screenshots/Pasted image 20260310071919.png differ diff --git a/screenshots/Pasted image 20260310071928.png b/screenshots/Pasted image 20260310071928.png new file mode 100644 index 0000000..a4575ec Binary files /dev/null and b/screenshots/Pasted image 20260310071928.png differ diff --git a/screenshots/Pasted image 20260310072821.png b/screenshots/Pasted image 20260310072821.png new file mode 100644 index 0000000..a7c952c Binary files /dev/null and b/screenshots/Pasted image 20260310072821.png differ diff --git a/screenshots/Pasted image 20260310073001.png b/screenshots/Pasted image 20260310073001.png new file mode 100644 index 0000000..d4b4295 Binary files /dev/null and b/screenshots/Pasted image 20260310073001.png differ diff --git a/screenshots/Pasted image 20260310073104.png b/screenshots/Pasted image 20260310073104.png new file mode 100644 index 0000000..d34ad52 Binary files /dev/null and b/screenshots/Pasted image 20260310073104.png differ diff --git a/screenshots/Pasted image 20260310073229.png b/screenshots/Pasted image 20260310073229.png new file mode 100644 index 0000000..6892d39 Binary files /dev/null and b/screenshots/Pasted image 20260310073229.png differ diff --git a/screenshots/Pasted image 20260310073243.png b/screenshots/Pasted image 20260310073243.png new file mode 100644 index 0000000..e357d36 Binary files /dev/null and b/screenshots/Pasted image 20260310073243.png differ diff --git a/screenshots/Pasted image 20260310073459.png b/screenshots/Pasted image 20260310073459.png new file mode 100644 index 0000000..9ef4cb1 Binary files /dev/null and b/screenshots/Pasted image 20260310073459.png differ diff --git a/screenshots/Pasted image 20260310094948.png b/screenshots/Pasted image 20260310094948.png new file mode 100644 index 0000000..7b83070 Binary files /dev/null and b/screenshots/Pasted image 20260310094948.png differ diff --git a/screenshots/Pasted image 20260310095415.png b/screenshots/Pasted image 20260310095415.png new file mode 100644 index 0000000..61cab7e Binary files /dev/null and b/screenshots/Pasted image 20260310095415.png differ diff --git a/screenshots/Pasted image 20260311071532.png b/screenshots/Pasted image 20260311071532.png new file mode 100644 index 0000000..b4c6408 Binary files /dev/null and b/screenshots/Pasted image 20260311071532.png differ diff --git a/screenshots/Pasted image 20260311071654.png b/screenshots/Pasted image 20260311071654.png new file mode 100644 index 0000000..f9c0b77 Binary files /dev/null and b/screenshots/Pasted image 20260311071654.png differ diff --git a/screenshots/Pasted image 20260311072037.png b/screenshots/Pasted image 20260311072037.png new file mode 100644 index 0000000..810dad6 Binary files /dev/null and b/screenshots/Pasted image 20260311072037.png differ diff --git a/screenshots/Pasted image 20260311072128.png b/screenshots/Pasted image 20260311072128.png new file mode 100644 index 0000000..43965e7 Binary files /dev/null and b/screenshots/Pasted image 20260311072128.png differ diff --git a/screenshots/Pasted image 20260311072157.png b/screenshots/Pasted image 20260311072157.png new file mode 100644 index 0000000..15c8719 Binary files /dev/null and b/screenshots/Pasted image 20260311072157.png differ diff --git a/screenshots/Pasted image 20260311072211.png b/screenshots/Pasted image 20260311072211.png new file mode 100644 index 0000000..321df24 Binary files /dev/null and b/screenshots/Pasted image 20260311072211.png differ diff --git a/screenshots/Pasted image 20260311072240.png b/screenshots/Pasted image 20260311072240.png new file mode 100644 index 0000000..8723890 Binary files /dev/null and b/screenshots/Pasted image 20260311072240.png differ diff --git a/screenshots/Pasted image 20260311072249.png b/screenshots/Pasted image 20260311072249.png new file mode 100644 index 0000000..158c68c Binary files /dev/null and b/screenshots/Pasted image 20260311072249.png differ diff --git a/screenshots/Pasted image 20260311072412.png b/screenshots/Pasted image 20260311072412.png new file mode 100644 index 0000000..4e9bed6 Binary files /dev/null and b/screenshots/Pasted image 20260311072412.png differ diff --git a/screenshots/Pasted image 20260311072444.png b/screenshots/Pasted image 20260311072444.png new file mode 100644 index 0000000..9249813 Binary files /dev/null and b/screenshots/Pasted image 20260311072444.png differ diff --git a/screenshots/Pasted image 20260311072700.png b/screenshots/Pasted image 20260311072700.png new file mode 100644 index 0000000..4470d6f Binary files /dev/null and b/screenshots/Pasted image 20260311072700.png differ diff --git a/screenshots/Pasted image 20260311072723.png b/screenshots/Pasted image 20260311072723.png new file mode 100644 index 0000000..d5bde88 Binary files /dev/null and b/screenshots/Pasted image 20260311072723.png differ diff --git a/screenshots/Pasted image 20260311072937.png b/screenshots/Pasted image 20260311072937.png new file mode 100644 index 0000000..9f27372 Binary files /dev/null and b/screenshots/Pasted image 20260311072937.png differ diff --git a/screenshots/Pasted image 20260311073021.png b/screenshots/Pasted image 20260311073021.png new file mode 100644 index 0000000..4329221 Binary files /dev/null and b/screenshots/Pasted image 20260311073021.png differ diff --git a/screenshots/Pasted image 20260311073036.png b/screenshots/Pasted image 20260311073036.png new file mode 100644 index 0000000..0b18d5f Binary files /dev/null and b/screenshots/Pasted image 20260311073036.png differ