diff --git a/app/app.py b/app/app.py new file mode 100644 index 0000000..87c54e8 --- /dev/null +++ b/app/app.py @@ -0,0 +1,18 @@ +from flask import Flask, request + +app = Flask(__name__) + +@app.route('/get', methods=['GET']) +def get_route(): + return "route get is working!\n" + +@app.route('/post', methods=['POST']) +def post_route(): + return f"route post is working!: {request.json}\n" + +@app.route('/put', methods=['PUT']) +def put_route(): + return f"route put is working!: {request.json}\n" + +if __name__ == "__main__": + app.run(host='0.0.0.0', port=5000) \ No newline at end of file diff --git a/config/A.yaml b/config/A.yaml new file mode 100644 index 0000000..d797b03 --- /dev/null +++ b/config/A.yaml @@ -0,0 +1,9 @@ +network: + ethernets: + enp0s3: + dhcp4: true + enp0s8: + dhcp4: no + addresses: [192.168.23.10/24] + gateway4: 192.168.23.1 + version: 2 \ No newline at end of file diff --git a/config/B.yaml b/config/B.yaml new file mode 100644 index 0000000..be2034a --- /dev/null +++ b/config/B.yaml @@ -0,0 +1,11 @@ +network: + ethernets: + enp0s3: + dhcp4: true + enp0s8: + dhcp4: no + addresses: [192.168.23.1/24] + enp0s9: + dhcp4: no + addresses: [192.168.10.1/24] + version: 2 \ No newline at end of file diff --git a/config/C.yaml b/config/C.yaml new file mode 100644 index 0000000..c739fe9 --- /dev/null +++ b/config/C.yaml @@ -0,0 +1,9 @@ +network: + ethernets: + enp0s3: + dhcp4: true + enp0s8: + dhcp4: no + addresses: [192.168.23.10/24] + gateway4: 192.168.10.1 + version: 2 \ No newline at end of file diff --git a/pics/curl.png b/pics/curl.png new file mode 100644 index 0000000..fce9a97 Binary files /dev/null and b/pics/curl.png differ diff --git a/pics/iptables.png b/pics/iptables.png new file mode 100644 index 0000000..6134ab3 Binary files /dev/null and b/pics/iptables.png differ diff --git a/pics/netA.png b/pics/netA.png new file mode 100644 index 0000000..91c447d Binary files /dev/null and b/pics/netA.png differ diff --git a/pics/netB.png b/pics/netB.png new file mode 100644 index 0000000..93ff171 Binary files /dev/null and b/pics/netB.png differ diff --git a/pics/netC.png b/pics/netC.png new file mode 100644 index 0000000..b18763f Binary files /dev/null and b/pics/netC.png differ diff --git a/pics/python.png b/pics/python.png new file mode 100644 index 0000000..905c519 Binary files /dev/null and b/pics/python.png differ diff --git a/pics/python_check.png b/pics/python_check.png new file mode 100644 index 0000000..5c911ac Binary files /dev/null and b/pics/python_check.png differ diff --git a/pics/tcp_get.png b/pics/tcp_get.png new file mode 100644 index 0000000..20e82d6 Binary files /dev/null and b/pics/tcp_get.png differ diff --git a/pics/tcp_post.png b/pics/tcp_post.png new file mode 100644 index 0000000..6e70872 Binary files /dev/null and b/pics/tcp_post.png differ diff --git a/pics/tcp_put.png b/pics/tcp_put.png new file mode 100644 index 0000000..1bf85e5 Binary files /dev/null and b/pics/tcp_put.png differ diff --git a/report.md b/report.md new file mode 100644 index 0000000..45d57da --- /dev/null +++ b/report.md @@ -0,0 +1,79 @@ +# Отчёт по работе №1: Практика Linux (VirtualBox) + +**Литвин Георгий Дмитриевич** + +
+ +**Дата рождения: 23.10.2002** + + +--- + +**Начинаем работу с создания одной ВМ на основе скачанного образа.** Дважды клонируем её.
+Далее настраиваем сетевые адаптеры по заданию: +- Вместо NAT - Сетевой мост +- Добавляем две внутренние подсети - `clientnet` и `servernet`

+ +После настройки запускаем все три ВМ и конфигурируем hostname и user: +- `user=litvin_1, hostname=litvin_server (server)` +- `user=litvin_2, hostname=litvin_gateway (gateway)` +- `user=litvin_3, hostname=litvin_client (client)` + +--- + +**Перейдем к настройке netplan конфигов.**
+Меняем конфигурационные файлы командой: +```shell +sudo nano /etc/netplan/00-installer-config.yaml +``` +А также применяем новые сетевые настройки: +```shell +sudo netplan apply +``` +Проверим полученный результат:
+ +![Netplan A](pics/netA.png) +![Netplan B](pics/netB.png) +![Netplan C](pics/netC.png) + +--- +**Linux A (server)** + +
+ +В корневой папке создадим файл `app.py` с простым Flask приложением на три эндпоинта.
+Также напишем сервис для автозапуска приложения: + +![Flask приложение и сервис для его запуска](pics/python.png) + +--- +**Linux B (gateway)** + +
+ +Настроим `iptables` на ВМ-шлюзе для фильтрации пакетов по 5000 порту.
+Делаем это также через терминал командами по заданию.
+После изменения сохраняем конфигурацию через `iptables-persistent`.
+Проверим полученный результат:
+ +![ip_rules](pics/iptables.png) + +--- + +**Тестирование** + +
+ +Для проверки всей системы необходимо: +- Запустить `python3 app.py` на машине **А** +- Запустить `tcpdump` на машине **B** +- Начать отправлять `curl` запросы на машине **C** +Проверим полученный результат:
+ +![ВМ С](pics/python_check.png) + +Также проверим логи `tcpdump` на машине **B**: + +![get](pics/tcp_get.png) +![post](pics/tcp_post.png) +![put](pics/tcp_put.png) \ No newline at end of file