From c5303e710f8abef20d21c490d7d953b7c46d752b Mon Sep 17 00:00:00 2001 From: golubspb5 Date: Mon, 24 Mar 2025 21:35:20 +0300 Subject: [PATCH 1/2] Update Manual.md --- guide/Manual.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/guide/Manual.md b/guide/Manual.md index d4cabdf..6f28a3e 100644 --- a/guide/Manual.md +++ b/guide/Manual.md @@ -159,11 +159,13 @@ sudo ip6tables-save > /etc/iptables/rules.v6 ### Веб-сервер (Машина А) 1. Для установки веб-сервера на машине А рекомендуется использовать python flask -2. Python установлен по-умолчанию. Для установки flask необходимо ввести: +2. Если нет доступа к интернету с виртуальной машины нужно проверить нет ли у вас задвоения дефодетых маршрутов и если есть, то удалить лишнее. +```ip r +4. Python установлен по-умолчанию. Для установки flask необходимо ввести: ```shell pip install flask ``` -3. Создайте файл app.py и поместите следующее содержимое: +4. Создайте файл app.py и поместите следующее содержимое: ```python from flask import Flask @@ -227,4 +229,4 @@ ip route add / via ``` 6. Также развернуть веб сервер на машине С и помощью curl получить ответ от веб сервера 7. настроить файрвол можно пожеланию (задание опциональное) -8. написать bash скрипт для каждой виртуальной машине, который повторяет действия сделанные вручную (в качестве проверке создайте заново 3 виртуалки, результат скрипта - сurl клиента принимает ответ от сервера из разных подсетей) \ No newline at end of file +8. написать bash скрипт для каждой виртуальной машине, который повторяет действия сделанные вручную (в качестве проверке создайте заново 3 виртуалки, результат скрипта - сurl клиента принимает ответ от сервера из разных подсетей) From ba141e11d9cad82e3fbc4114b35a0e20248a21f0 Mon Sep 17 00:00:00 2001 From: golubspb5 Date: Thu, 27 Mar 2025 17:23:18 +0300 Subject: [PATCH 2/2] Add files via upload --- Linux/LinuxPractice/Linux Practice.png | Bin 0 -> 34423 bytes Linux/LinuxPractice/README.md | 43 ++++ Linux/LinuxPractice/guide/Manual.md | 234 ++++++++++++++++++ .../vms/ubuntu_a/application/app.py | 18 ++ .../configs/network/netplan/client.yml | 9 + Linux/report.md | 57 +++++ ...21\203\320\274\320\265\320\275\321\202.py" | 10 + ...\203\320\274\320\265\320\275\321\202.yaml" | 7 + ...260\320\275\320\260 2025-03-24 223359.png" | Bin 0 -> 3826 bytes 9 files changed, 378 insertions(+) create mode 100644 Linux/LinuxPractice/Linux Practice.png create mode 100644 Linux/LinuxPractice/README.md create mode 100644 Linux/LinuxPractice/guide/Manual.md create mode 100644 Linux/LinuxPractice/vms/ubuntu_a/application/app.py create mode 100644 Linux/LinuxPractice/vms/ubuntu_a/configs/network/netplan/client.yml create mode 100644 Linux/report.md create mode 100644 "Linux/\320\235\320\276\320\262\321\213\320\271 \321\202\320\265\320\272\321\201\321\202\320\276\320\262\321\213\320\271 \320\264\320\276\320\272\321\203\320\274\320\265\320\275\321\202.py" create mode 100644 "Linux/\320\235\320\276\320\262\321\213\320\271 \321\202\320\265\320\272\321\201\321\202\320\276\320\262\321\213\320\271 \320\264\320\276\320\272\321\203\320\274\320\265\320\275\321\202.yaml" create mode 100644 "Linux/\320\241\320\275\320\270\320\274\320\276\320\272 \321\215\320\272\321\200\320\260\320\275\320\260 2025-03-24 223359.png" diff --git a/Linux/LinuxPractice/Linux Practice.png b/Linux/LinuxPractice/Linux Practice.png new file mode 100644 index 0000000000000000000000000000000000000000..212b38a28258243adb5a7159ca934116f16f9f5c GIT binary patch literal 34423 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 literal 0 HcmV?d00001 diff --git a/Linux/LinuxPractice/README.md b/Linux/LinuxPractice/README.md new file mode 100644 index 0000000..9c0279e --- /dev/null +++ b/Linux/LinuxPractice/README.md @@ -0,0 +1,43 @@ +# Введение +Данная практика посвещена базовым принципам администрирования Linux. Для выполнения практики необходимо развернуть 3 виртуальные машины Linux. + +Как пример, можно использовать Virtual Box + Ubuntu Server 20.04. + +# Задание +Для выполнения данного задания необходимо: +1. Развернуть три виртуальные машины Linux, согласно схеме ниже + + +![info](Linux%20Practice.png) + +2. Linux A + 1. Сконфигурировать Hostname следующим образом: _server (пропустить если делаете через Play with docker) + 2. Создать пользователя _1 (пропустить если делаете через Play with docker) + 3. Сконфигурировать виртуальный интерфейс со следующим ip адресом: 192.168.<день рождения>.10/24 + 4. Развернуть Http сервер на виртуальной машине на порту 5000. Необходимо реализовать минимум три эндпоинта (запрос /get, /post, /put) +3. Linux B + 1. Сконфигурировать Hostname следующим образом: _gateway (пропустить если делаете через Play with docker) + 2. Создать пользователя _2 (пропустить если делаете через Play with docker) + 3. Сконфигурировать 2 виртуальных интерфейс со следующими ip адресом: 192.168.<день рождения>.1/24, 192.168.<месяц рождения>.10/24 + 4. С помощью утилит ip route и iptables настроить маршрут пакетов от Linux A до C. Должны быть запрещены все пакеты, кроме http пакетов через порт 5000 (маршруты обязательно, файрвол опционально) + 5. Запустить программу tcpdump с фильтрацией по портам 5000 +4. Linux C + 1. Сконфигурировать Hostname следующим образом: _client (пропустить если делаете через Play with docker) + 2. Создать пользователя _3 (пропустить если делаете через Play with docker) + 3. Сконфигурировать виртуальный интерфейс со следующим ip адресом: 192.168.<месяц рождения>.100/24 + 4. С помощью команды curl на машине C послать 3 запроса на машину А в http сервер (/get, /post, /put) +5. При перезагрузки системы все сервисы и сетевая архитектура должны также функционировать (сохранить свои настройки) +6. Сделать скриншоты всех этапов задания +7. Оформить отчет в виде Markdown файла. Приложить конфигурационные файлы в репозиторий +8. Для play with docker также нужно написать bash скрипты для воспроизведения на новых вм + + +Репозиторий оформить следующим образом: +- application - исходный код http сервера +- configs - конфигурационные файлы сетевых настроек виртуальных машин +- report.md - Отчет markdown + + +P.S. +Если не получилось использовать разные утилиты для настройки сети, используйте netplan +Смотрите [мануал](./guide/Manual.md) - там информация для virtual box и Play with docker diff --git a/Linux/LinuxPractice/guide/Manual.md b/Linux/LinuxPractice/guide/Manual.md new file mode 100644 index 0000000..736df56 --- /dev/null +++ b/Linux/LinuxPractice/guide/Manual.md @@ -0,0 +1,234 @@ +# Практика Linux (с virtualbox) + +## Создание виртуальной машины +1. Скачиваем [Virtual Box](https://www.virtualbox.org/) +2. Скачиваем дистрибутив [Ubuntu Server 20.04.iso](https://ubuntu.com/download/server) +3. Создаем виртуальную машину в virtualbox. Создаем новый виртуальный диск, назначаем 1gb Ram, 10gb Rom. При запуске указываем путь до iso файла +4. Следуем инструкциям при конфигурировании ОС. Создаем юзера и название машины согласно инструкции. Сетевые настройки оставляем по умолчанию. +5. Клонируем 2 раза созданную виртуальную машину (vdi диск). Переименовываем пользователя и хоста в каждой машине согласно инструкции. +## Настройка виртуальных машин +### Linux A +1. В настройках виртуальной машины заходим в сетевые интерфейсы: + 1. Nat меняем на сетевой мост + 2. Добавляем Внутреннюю сеть (называем servernet) +2. Подключаемся к виртуальной машине. Вводим команду +```shell +ip addr +``` +Убеждаемся, что один из интерфейсов подключен к той же подсети, что и хост. Запоминаем ip адрес + +3. С помощью команды ping с хоста (ноутбука) пробуем пинговать виртуальную машину: +```shell +ping 192.168.0.109 -n 4 +``` +Если пинг идет успешно, значит виртуальная машина подключена к подсети с вашим ноутбуком. + +4. Для удобства стоит прописать ssh ключ к виртуальной машине. + +[Сгенерировать ключ](https://losst.ru/avtorizatsiya-po-klyuchu-ssh) можно командой (из терминала Linux или MobaExtern) +```shell +ssh-keygen -t rsa -N "" -f my.key +``` +По-умолчанию можно со всем согласиться. + +Далее необходимо скопировать ключ на виртуальную машину +```shell +ssh-copy-id -i my.key.pub alekseev_1@192.168.0.109 +``` + +Ввести пароль при запросе. + +Далее можно подключаться к виртуальной машине по ssh: +```shell +ssh -i my.key alekseev_1@192.168.0.109 +``` + +5. Необходимо настроить сеть. В ubuntu 20.04 по-умолчанию сеть настраивается утилитой netplan. Откроем конфигурационный файл и настроим наши адаптары следующим образом: +```shell +sudo nano /etc/netplan/00-installer-config.yaml +``` + +Добавим в конфигурационный файл следующее содержимое (ip адреса использовать согласно заданию): + +```yaml +network: + ethernets: + enp0s3: # этот интерфейс используем для доступа с ноутбука + dhcp4: true + enp0s8: # этот интерфейс настравиваем на передачу запросов + dhcp4: no + addresses: [192.168.<день рождения>.10/24] + gateway4: 192.168.<день рождения>.1 + version: 2 +``` + +Далее сохраняем файл. Применяем настройки +```shell +sudo netplan apply +``` +6. Проверяем настройки с помощью ip addr. Сетевая настройка завершена + +### Linux B +1. В настройках виртуальной машины заходим в сетевые интерфейсы: + 1. Nat меняем на сетевой мост + 2. Добавляем Внутреннюю сеть 2 штуки (называем servernet и clientnet) +2. Подключаемся к виртуальной машине. Меняем имя хоста и юзера согласно заданию. +3. Для удобства также стоит прописать ssh ключ к виртуальной машине (Например командами добавить нового пользователя adduser (не забыть добавить в группу sudo), сменить название хоста hostname newname). +4. Необходимо настроить сеть. В ubuntu 20.04 по-умолчанию сеть настраивается утилитой netplan. Откроем конфигурационный файл и настроим наши адаптары следующим образом: +```shell +sudo nano /etc/netplan/00-installer-config.yaml +``` +Добавим в конфигурационный файл следующее содержимое (ip адреса использовать согласно заданию): + +```yaml +network: + ethernets: + enp0s3: # этот интерфейс используем для доступа с ноутбука + dhcp4: true + enp0s8: # этот интерфейс настравиваем на передачу запросов сервера (Помните про виртуальную сеть в VirtualBox) + dhcp4: no + addresses: [192.168.<день рождения>.1/24] + enp0s9: # этот интерфейс настравиваем на передачу запросов клиента + dhcp4: no + addresses: [192.168.<месяц рождения>.1/24] + version: 2 +``` + +Далее сохраняем файл. Применяем настройки +```shell +sudo netplan apply +``` +6. Проверяем настройки с помощью ip addr. Сетевая настройка завершена + +### Linux C +1. В настройках виртуальной машины заходим в сетевые интерфейсы: + 1. Nat меняем на сетевой мост + 2. Добавляем Внутреннюю сеть 2 штуки (называем servernet и clientnet) +2. Подключаемся к виртуальной машине. Меняем имя хоста и юзера согласно заданию. +3. Для удобства также стоит прописать ssh ключ к виртуальной машине (Например командами добавить нового пользователя adduser (не забыть добавить в группу sudo), сменить название хоста hostname newname). +4. Необходимо настроить сеть. В ubuntu 20.04 по-умолчанию сеть настраивается утилитой netplan. Откроем конфигурационный файл и настроим наши адаптары следующим образом: +```shell +sudo nano /etc/netplan/00-installer-config.yaml +``` +Добавим в конфигурационный файл следующее содержимое (ip адреса использовать согласно заданию): + +```yaml +network: + ethernets: + enp0s3: # этот интерфейс используем для доступа с ноутбука + dhcp4: true + enp0s8: # этот интерфейс настравиваем на передачу запросов + dhcp4: no + addresses: [192.168.<месяц рождения>.10/24] + gateway4: 192.168.<месяц рождения>.1 + version: 2 +``` + +Далее сохраняем файл. Применяем настройки +```shell +sudo netplan apply +``` +6. Проверяем настройки с помощью ip addr. Сетевая настройка завершена + +### Конфигурация маршрутов + +1. Наиболее простой способ с текущей конфигурацией, это разрешить переброс пакетов ip в нашем gateway +```shell +echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward 1 + + nano /etc/sysctl.conf # Также можно добавить 1 в файл для автозагрузки +``` +Таким образом виртуальные машины А и С будут видеть друг друга в сети +2. Чтобы разрешить переброс только конкретных пакетов по конкретному порту, следуюет настроить маршрут [следующим образом](https://www.digitalocean.com/community/tutorials/how-to-forward-ports-through-a-linux-gateway-with-iptables): +```shell +iptables -A FORWARD -i eth0 -o eth1 -p tcp --syn --dport 5000 -m conntrack --ctstate NEW -j ACCEPT + +iptables -A FORWARD -i eth0 -o eth1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT +iptables -A FORWARD -i eth1 -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT + +iptables -P FORWARD DROP + +``` +Также необходимо сохранить правила iptables +```shell +sudo apt-get install iptables-persistent +sudo iptables-save > /etc/iptables/rules.v4 +sudo ip6tables-save > /etc/iptables/rules.v6 +``` +3. Посмотреть трафик можно [с помощью](https://unix.stackexchange.com/questions/313180/iptables-forward-chain-traffic-not-seen-by-tcpdump) + +### Веб-сервер (Машина А) +1. Для установки веб-сервера на машине А рекомендуется использовать python flask +2. Если нет доступа к интернету с виртуальной машины нужно проверить нет ли у вас задвоения дефодетых маршрутов и если есть, то удалить лишнее. +```shell +ip r +``` +3. Python установлен по-умолчанию. Для установки flask необходимо ввести: +```shell +pip install flask +``` +4. Создайте файл app.py и поместите следующее содержимое: +```python +from flask import Flask + +app = Flask(__name__) + +@app.route("/") +def hello_world(): + return "

Hello, World!

" + +app.run(host='0.0.0.0', port=5000) +``` +4. Запустить скрипт можно командой +```shell +python app.py +``` +5. С помощью systemd необходимо создать сервис, который запускает скрипт через автозагрузку +```shell +nano /lib/systemd/system/web-server.service +``` +Вставить следующее содержимое в файл: +```ini +[Unit] +Description=Web-Server +[Service] +Type=idle +WorkingDirectory=/home/user/server/ +ExecStart=python app.py +[Install] +WantedBy=multi-user.target +``` +Перезапустить службы и активировать автозагрузку +```shell +systemctl daemon-reload +systemctl enable web-server +``` +### Веб-клиент (Машина С) +1. Чтобы послать запрос на машину А, необходимо ввести следующую команду: +```shell +curl 'http://192.168.<день рождения>.10:5000/ +``` +2. Если поменять на сервере порт отличный от 5000 и попробовать отправить запрос, шлюз не должен пропустить пакеты + +# Практика Linux (с play with docker) +тоже самое, что "Практика Linux (с virtualbox)", но +1. вместо создание ВМ на virtualbox создаем три ВМ на https://labs.play-with-docker.com/ +2. чтобы по ssh зайти на каждую машину, нужно сгенерировать ключ протоколом ed25519 +```bash +ssh-keygen -t ed25519 +ssh @direct.labs.play-with-docker.com +``` +3. в pwd используется дистрибутив alpine, поэтому часть функционала (systemd, netplan) отсутсвует +4. настройку сети необходимо сделать с помощью ipvlan. Серевер А и С - по одному адаптеру согласно схеме. Сервер В - два адаптера согласно схеме, подсети должны быть разные +```shell +ip link add macvlan1 link eth0 type macvlan mode bridge # создаем новый адаптер с типом bridge и делаем связь адаптера с eth0 +ip address add dev macvlan1 xxx.xxx.xxx.xxx/ # добавляем ip адрес адаптеру +ip link set macvlan1 up # включаем адаптер +``` +5. прописать маршруты у клиента А и С к их подсетям через шлюз машину В +```shell +ip route add / via +``` +6. Также развернуть веб сервер на машине С и помощью curl получить ответ от веб сервера +7. настроить файрвол можно пожеланию (задание опциональное) +8. написать bash скрипт для каждой виртуальной машине, который повторяет действия сделанные вручную (в качестве проверке создайте заново 3 виртуалки, результат скрипта - сurl клиента принимает ответ от сервера из разных подсетей) diff --git a/Linux/LinuxPractice/vms/ubuntu_a/application/app.py b/Linux/LinuxPractice/vms/ubuntu_a/application/app.py new file mode 100644 index 0000000..2ad890e --- /dev/null +++ b/Linux/LinuxPractice/vms/ubuntu_a/application/app.py @@ -0,0 +1,18 @@ +from crypt import methods +from flask import Flask + +app = Flask(__name__) + +@app.route("/", methods=['GET']) +def hello_world(): + return "

Hello, World!

" + +@app.route("/", methods=['PUT']) +def hello_world_put(): + return "

Hello, World!

" + +@app.route("/", methods=['POST']) +def hello_world_post(): + return "

Hello, World!

" + +app.run(host='0.0.0.0', port=5000) \ No newline at end of file diff --git a/Linux/LinuxPractice/vms/ubuntu_a/configs/network/netplan/client.yml b/Linux/LinuxPractice/vms/ubuntu_a/configs/network/netplan/client.yml new file mode 100644 index 0000000..b15d788 --- /dev/null +++ b/Linux/LinuxPractice/vms/ubuntu_a/configs/network/netplan/client.yml @@ -0,0 +1,9 @@ +network: + ethernets: + enp0s3: # этот интерфейс используем для доступа с ноутбука + dhcp4: true + enp0s8: # этот интерфейс настравиваем на передачу запросов + dhcp4: no + addresses: [192.168.26.10/24] + gateway4: 192.168.26.1 + version: 2 \ No newline at end of file diff --git a/Linux/report.md b/Linux/report.md new file mode 100644 index 0000000..526bd90 --- /dev/null +++ b/Linux/report.md @@ -0,0 +1,57 @@ +# Отчёт по лабораторной работе: Настройка сети между виртуальными машинами + +## Цель работы +Настроить связь между тремя виртуальными машинами (A, B, C) с маршрутизацией через шлюз (Машина B) и развернуть веб-сервер. + +## Выполненные шаги + +### 1. Настройка сети +- **Машина A (Сервер)** + - IP: 192.168.25.10/24 + - Интерфейс: enp0s8 + ```yaml + # configs/machine_A_netplan.yaml + network: + version: 2 + ethernets: + enp0s8: + addresses: [192.168.25.10/24] + ``` + +- **Машина B (Шлюз)** + - IP: 192.168.25.1/24 (enp0s8) и 192.168.3.1/24 (enp0s9) + - Включен IP-форвардинг + ```bash + echo 1 > /proc/sys/net/ipv4/ip_forward + ``` + +### 2. Настройка маршрутов +```bash +# На Машине A: +sudo ip route add 192.168.3.0/24 via 192.168.25.1 + +# На Машине C: +sudo ip route add 192.168.25.0/24 via 192.168.3.1 +``` + +### 3. Развертывание веб-сервера +- Запущен Flask-сервер на Машине A: +```python +# application/app.py +from flask import Flask +app = Flask(__name__) + +@app.route("/") +def hello(): + return "Hello from Machine A" + +app.run(host='192.168.25.10', port=5000) +``` + +## Результаты +- Успешный ping между всеми машинами +- Доступ к веб-серверу с Машины C: + ```bash + curl http://192.168.25.10:5000 + > Hello from Machine A + ``` \ No newline at end of file diff --git "a/Linux/\320\235\320\276\320\262\321\213\320\271 \321\202\320\265\320\272\321\201\321\202\320\276\320\262\321\213\320\271 \320\264\320\276\320\272\321\203\320\274\320\265\320\275\321\202.py" "b/Linux/\320\235\320\276\320\262\321\213\320\271 \321\202\320\265\320\272\321\201\321\202\320\276\320\262\321\213\320\271 \320\264\320\276\320\272\321\203\320\274\320\265\320\275\321\202.py" new file mode 100644 index 0000000..26a0b56 --- /dev/null +++ "b/Linux/\320\235\320\276\320\262\321\213\320\271 \321\202\320\265\320\272\321\201\321\202\320\276\320\262\321\213\320\271 \320\264\320\276\320\272\321\203\320\274\320\265\320\275\321\202.py" @@ -0,0 +1,10 @@ +from flask import Flask +app = Flask(__name__) + +@app.route("/") +def hello(): + return "Hello World!" + + +if __name__ == "__main__": + app.run(host='192.168.25.10', port=5000) \ No newline at end of file diff --git "a/Linux/\320\235\320\276\320\262\321\213\320\271 \321\202\320\265\320\272\321\201\321\202\320\276\320\262\321\213\320\271 \320\264\320\276\320\272\321\203\320\274\320\265\320\275\321\202.yaml" "b/Linux/\320\235\320\276\320\262\321\213\320\271 \321\202\320\265\320\272\321\201\321\202\320\276\320\262\321\213\320\271 \320\264\320\276\320\272\321\203\320\274\320\265\320\275\321\202.yaml" new file mode 100644 index 0000000..5b6ba22 --- /dev/null +++ "b/Linux/\320\235\320\276\320\262\321\213\320\271 \321\202\320\265\320\272\321\201\321\202\320\276\320\262\321\213\320\271 \320\264\320\276\320\272\321\203\320\274\320\265\320\275\321\202.yaml" @@ -0,0 +1,7 @@ +network: + version: 2 + ethernets: + enp0s8: + addresses: [192.168.25.1/24] + enp0s9: + addresses: [192.168.3.1/24] \ No newline at end of file diff --git "a/Linux/\320\241\320\275\320\270\320\274\320\276\320\272 \321\215\320\272\321\200\320\260\320\275\320\260 2025-03-24 223359.png" "b/Linux/\320\241\320\275\320\270\320\274\320\276\320\272 \321\215\320\272\321\200\320\260\320\275\320\260 2025-03-24 223359.png" new file mode 100644 index 0000000000000000000000000000000000000000..e37224c3b0ccd809e19210bab22746cae55ba0c4 GIT binary patch literal 3826 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 I{h($ literal 0 HcmV?d00001