diff --git a/app/app.py b/app/app.py new file mode 100644 index 0000000..835fc08 --- /dev/null +++ b/app/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/configs/vmA.yaml b/configs/vmA.yaml new file mode 100644 index 0000000..d797b03 --- /dev/null +++ b/configs/vmA.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/configs/vmB.yaml b/configs/vmB.yaml new file mode 100644 index 0000000..e52e8fa --- /dev/null +++ b/configs/vmB.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.5.1/24] + version: 2 \ No newline at end of file diff --git a/configs/vmC.yaml b/configs/vmC.yaml new file mode 100644 index 0000000..5a5e3b4 --- /dev/null +++ b/configs/vmC.yaml @@ -0,0 +1,9 @@ +network: + ethernets: + enp0s3: + dhcp4: true + enp0s8: + dhcp4: no + addresses: [192.168.5.10/24] + gateway4: 192.168.5.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..6246bcc 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..8200bf1 Binary files /dev/null and b/pics/iptables.png differ diff --git a/pics/net1.png b/pics/net1.png new file mode 100644 index 0000000..5980e27 Binary files /dev/null and b/pics/net1.png differ diff --git a/pics/net2.png b/pics/net2.png new file mode 100644 index 0000000..7c1497c Binary files /dev/null and b/pics/net2.png differ diff --git a/pics/net3.png b/pics/net3.png new file mode 100644 index 0000000..cf9a786 Binary files /dev/null and b/pics/net3.png differ diff --git a/pics/py.png b/pics/py.png new file mode 100644 index 0000000..df60bf6 Binary files /dev/null and b/pics/py.png differ diff --git a/pics/py_check.png b/pics/py_check.png new file mode 100644 index 0000000..361d35f Binary files /dev/null and b/pics/py_check.png differ diff --git a/pics/tcp_get.png b/pics/tcp_get.png new file mode 100644 index 0000000..f479646 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..e44af5b 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..8f20a3f 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..86f0e44 --- /dev/null +++ b/report.md @@ -0,0 +1,67 @@ +# Отчёт по работе №1: Практика Linux (VirtualBox) +ФИО: Ситжанова Элина Кайдаровна
+День рождения: 23.05.2002 + +--- + +**Этап 1: Создание виртуальных машин и настройка пользователей.** +Создаём одну ВМ на основе скачанного образа и создаём две её копии. +Далее настраиваем сетевые адаптеры по заданию (две подсети: servernet и clientnet + сетевой мост). +После этого на каждой машине вручную задаем новый hostname и user. +```shell + 1. Linux A: user=sitzhanova_1, hostname=sitzhanovaserver + 2. Linux B: user=sitzhanova_2, hostname=sitzhanovagateway + 3. Linux C: user=sitzhanova_3, hostname=sitzhanovaclient +``` + +

+ +**Этап 2: Netplan конфигурации.** +Необходимо переписать конфиги *netplan* согласно заданию и применить их командой *sudo netplan apply*: + +![Netplan конфиг A](pics/net1.png) +![Netplan конфиг B](pics/net2.png) +![Netplan конфиг C](pics/net3.png) + +
+ +На Linux А был для 'enp0s3' был выставлен автоматический айпи-адрес, а для 'enp0s8' - "192.168.23.10/24". +На Linux B был для 'enp0s3' был также выставлен автоматический айпи-адрес, для 'enp0s8' - "192.168.23.1/24", а для enp0s9 - "192.168.5.1/24". +На Linux С был для 'enp0s3' выставлен автоматический айпи-адрес, а для 'enp0s8' - "192.168.5.1/24". + +

+ +**Этап 3: Донастройка каждой виртуальной машины.** +*Linux A*:
+Необходимо реализовать простое приложение на Flask (предварительно скачав его и Python) с тремя эндпоинтами (/get, /post, /put), +а также написать под него сервис, задача которого состоит в запуске приложение через автозагрузку: + +![Flask app](pics/py.png) + +
+ +*Linux B*:
+Необходимо настроить iptables для маршрутизации пакетов от машины A до машины C с фильтрацией пакетов по 5000-му порту: +Также необходимо включить ip_forward в настройках системы: + +![iptables](pics/iptables.png) + +

+ +**Этап 4: Тестирование системы.** +*Linux A*:
+Запускаем на Linux A приложение командой `python3 app.py` и проверяем, на каких адресах работает.
+ +*Linux B*:
+Запускаем `tcpdump` для просмотра логов передачи пакетов между клиентом и сервером.
+ +*Linux С*:
+Отправляем три запроса (/get, /post, /put) для проверки: + +![Linux A_py](pics/py_check.png) +![Linux C_curl](pics/curl.png) +![tcpGET](pics/tcp_get.png) +![tcpPOST](pics/tcp_post.png) +![tcpPUT](pics/tcp_put.png) + +Представленные скриншоты подтверждают работоспособность системы: все виртуальные машины успешно настроены, связь и фильтрация пакетов налажена, а Flask приложение отрабатывает все запросы.