diff --git a/app/app.py b/app/app.py new file mode 100644 index 0000000..f61456d --- /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_check(): + return "GET checked\n" + +@app.route('/post', methods=['POST']) +def post_check(): + return f"POST checked: {request.json}\n" + +@app.route('/put', methods=['PUT']) +def put_check(): + return f"PUT checked: {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/linux_A.yaml b/configs/linux_A.yaml new file mode 100644 index 0000000..e69de29 diff --git a/configs/linux_B.yaml b/configs/linux_B.yaml new file mode 100644 index 0000000..e69de29 diff --git a/configs/linux_C.yaml b/configs/linux_C.yaml new file mode 100644 index 0000000..e69de29 diff --git a/pics/iptables1.png b/pics/iptables1.png new file mode 100644 index 0000000..c480406 Binary files /dev/null and b/pics/iptables1.png differ diff --git a/pics/iptables2.png b/pics/iptables2.png new file mode 100644 index 0000000..f78576d Binary files /dev/null and b/pics/iptables2.png differ diff --git a/pics/net1.png b/pics/net1.png new file mode 100644 index 0000000..f9e0a8e 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..6f491d1 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..25d64a1 Binary files /dev/null and b/pics/net3.png differ diff --git a/pics/python.png b/pics/python.png new file mode 100644 index 0000000..7aa36cb Binary files /dev/null and b/pics/python.png differ diff --git a/pics/python_check1.png b/pics/python_check1.png new file mode 100644 index 0000000..792b8fc Binary files /dev/null and b/pics/python_check1.png differ diff --git a/pics/tcpGET1.png b/pics/tcpGET1.png new file mode 100644 index 0000000..ff39378 Binary files /dev/null and b/pics/tcpGET1.png differ diff --git a/pics/tcpPOST.png b/pics/tcpPOST.png new file mode 100644 index 0000000..b604099 Binary files /dev/null and b/pics/tcpPOST.png differ diff --git a/pics/tcpPOST1.png b/pics/tcpPOST1.png new file mode 100644 index 0000000..b604099 Binary files /dev/null and b/pics/tcpPOST1.png differ diff --git a/pics/tcpPUT1.png b/pics/tcpPUT1.png new file mode 100644 index 0000000..5557572 Binary files /dev/null and b/pics/tcpPUT1.png differ diff --git a/pics/user.png b/pics/user.png new file mode 100644 index 0000000..91c2953 Binary files /dev/null and b/pics/user.png differ diff --git a/pics/vmC_check_curl1.png b/pics/vmC_check_curl1.png new file mode 100644 index 0000000..58acd8c Binary files /dev/null and b/pics/vmC_check_curl1.png differ diff --git a/report.md b/report.md new file mode 100644 index 0000000..276792e --- /dev/null +++ b/report.md @@ -0,0 +1,62 @@ +# Отчёт по работе №1: Практика Linux (VirtualBox) + +**Этап 1: Создание виртуальных машин и настройка пользователей.** +Создаём одну ВМ на основе скачанного образа и создаём две её копии. +Далее настраиваем сетевые адаптеры по заданию (две подсети: servernet и clientnet + сетевой мост). +После этого на каждой машине вручную задаем новый hostname и user. +
`Linux A: user=shipilov_1, hostname=shipilovserver` +
`Linux B: user=shipilov_2, hostname=shipilovgateway` +
`Linux C: user=shipilov_3, hostname=shipilovclient` + +

+ +**Этап 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.15.10/24". +На Linux B был для 'enp0s3' был также выставлен автоматический айпи-адрес, для 'enp0s8' - "192.168.15.1/24", а для enp0s9 - "192.168.11.1/24". +На Linux С был для 'enp0s3' выставлен автоматический айпи-адрес, а для 'enp0s8' - "192.168.11.1/24". + +

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

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