Skip to content

Latest commit

 

History

History
230 lines (202 loc) · 13.2 KB

File metadata and controls

230 lines (202 loc) · 13.2 KB

Практика Linux (с virtualbox)

Создание виртуальной машины

  1. Скачиваем Virtual Box
  2. Скачиваем дистрибутив Ubuntu Server 20.04.iso
  3. Создаем виртуальную машину в virtualbox. Создаем новый виртуальный диск, назначаем 1gb Ram, 10gb Rom. При запуске указываем путь до iso файла
  4. Следуем инструкциям при конфигурировании ОС. Создаем юзера и название машины согласно инструкции. Сетевые настройки оставляем по умолчанию.
  5. Клонируем 2 раза созданную виртуальную машину (vdi диск). Переименовываем пользователя и хоста в каждой машине согласно инструкции.

Настройка виртуальных машин

Linux A

  1. В настройках виртуальной машины заходим в сетевые интерфейсы:
    1. Nat меняем на сетевой мост
    2. Добавляем Внутреннюю сеть (называем servernet)
  2. Подключаемся к виртуальной машине. Вводим команду
ip addr

Убеждаемся, что один из интерфейсов подключен к той же подсети, что и хост. Запоминаем ip адрес

  1. С помощью команды ping с хоста (ноутбука) пробуем пинговать виртуальную машину:
ping 192.168.0.109 -n 4

Если пинг идет успешно, значит виртуальная машина подключена к подсети с вашим ноутбуком.

  1. Для удобства стоит прописать ssh ключ к виртуальной машине.

Сгенерировать ключ можно командой (из терминала Linux или MobaExtern)

ssh-keygen -t rsa -N "" -f my.key

По-умолчанию можно со всем согласиться.

Далее необходимо скопировать ключ на виртуальную машину

ssh-copy-id -i my.key.pub alekseev_1@192.168.0.109

Ввести пароль при запросе.

Далее можно подключаться к виртуальной машине по ssh:

ssh -i my.key alekseev_1@192.168.0.109
  1. Необходимо настроить сеть. В ubuntu 20.04 по-умолчанию сеть настраивается утилитой netplan. Откроем конфигурационный файл и настроим наши адаптары следующим образом:
sudo nano /etc/netplan/00-installer-config.yaml

Добавим в конфигурационный файл следующее содержимое (ip адреса использовать согласно заданию):

network:
  ethernets:
    enp0s3: # этот интерфейс используем для доступа с ноутбука
      dhcp4: true 
    enp0s8: # этот интерфейс настравиваем на передачу запросов
      dhcp4: no
      addresses: [192.168.<день рождения>.10/24]
      gateway4: 192.168.<день рождения>.1
  version: 2

Далее сохраняем файл. Применяем настройки

sudo netplan apply
  1. Проверяем настройки с помощью ip addr. Сетевая настройка завершена

Linux B

  1. В настройках виртуальной машины заходим в сетевые интерфейсы:
    1. Nat меняем на сетевой мост
    2. Добавляем Внутреннюю сеть 2 штуки (называем servernet и clientnet)
  2. Подключаемся к виртуальной машине. Меняем имя хоста и юзера согласно заданию.
  3. Для удобства также стоит прописать ssh ключ к виртуальной машине (Например командами добавить нового пользователя adduser (не забыть добавить в группу sudo), сменить название хоста hostname newname).
  4. Необходимо настроить сеть. В ubuntu 20.04 по-умолчанию сеть настраивается утилитой netplan. Откроем конфигурационный файл и настроим наши адаптары следующим образом:
sudo nano /etc/netplan/00-installer-config.yaml

Добавим в конфигурационный файл следующее содержимое (ip адреса использовать согласно заданию):

network:
  ethernets:
    enp0s3: # этот интерфейс используем для доступа с ноутбука
      dhcp4: true 
    enp0s8: # этот интерфейс настравиваем на передачу запросов сервера (Помните про виртуальную сеть в VirtualBox)
      dhcp4: no
      addresses: [192.168.<день рождения>.1/24]
    enp0s9: # этот интерфейс настравиваем на передачу запросов клиента
      dhcp4: no
      addresses: [192.168.<месяц рождения>.1/24]
  version: 2

Далее сохраняем файл. Применяем настройки

sudo netplan apply
  1. Проверяем настройки с помощью ip addr. Сетевая настройка завершена

Linux C

  1. В настройках виртуальной машины заходим в сетевые интерфейсы:
    1. Nat меняем на сетевой мост
    2. Добавляем Внутреннюю сеть 2 штуки (называем servernet и clientnet)
  2. Подключаемся к виртуальной машине. Меняем имя хоста и юзера согласно заданию.
  3. Для удобства также стоит прописать ssh ключ к виртуальной машине (Например командами добавить нового пользователя adduser (не забыть добавить в группу sudo), сменить название хоста hostname newname).
  4. Необходимо настроить сеть. В ubuntu 20.04 по-умолчанию сеть настраивается утилитой netplan. Откроем конфигурационный файл и настроим наши адаптары следующим образом:
sudo nano /etc/netplan/00-installer-config.yaml

Добавим в конфигурационный файл следующее содержимое (ip адреса использовать согласно заданию):

network:
  ethernets:
    enp0s3: # этот интерфейс используем для доступа с ноутбука
      dhcp4: true 
    enp0s8: # этот интерфейс настравиваем на передачу запросов
      dhcp4: no
      addresses: [192.168.<месяц рождения>.10/24]
      gateway4: 192.168.<месяц рождения>.1
  version: 2

Далее сохраняем файл. Применяем настройки

sudo netplan apply
  1. Проверяем настройки с помощью ip addr. Сетевая настройка завершена

Конфигурация маршрутов

  1. Наиболее простой способ с текущей конфигурацией, это разрешить переброс пакетов ip в нашем gateway
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward 1

 nano /etc/sysctl.conf # Также можно добавить 1 в файл для автозагрузки

Таким образом виртуальные машины А и С будут видеть друг друга в сети 2. Чтобы разрешить переброс только конкретных пакетов по конкретному порту, следуюет настроить маршрут следующим образом:

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

sudo apt-get install iptables-persistent
sudo iptables-save > /etc/iptables/rules.v4
sudo ip6tables-save > /etc/iptables/rules.v6
  1. Посмотреть трафик можно с помощью

Веб-сервер (Машина А)

  1. Для установки веб-сервера на машине А рекомендуется использовать python flask
  2. Python установлен по-умолчанию. Для установки flask необходимо ввести:
pip install flask
  1. Создайте файл app.py и поместите следующее содержимое:
from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "<p>Hello, World!</p>"

app.run(host='0.0.0.0', port=5000)
  1. Запустить скрипт можно командой
python app.py
  1. С помощью systemd необходимо создать сервис, который запускает скрипт через автозагрузку
nano /lib/systemd/system/web-server.service

Вставить следующее содержимое в файл:

[Unit]
Description=Web-Server
[Service]
Type=idle
WorkingDirectory=/home/user/server/
ExecStart=python app.py
[Install]
WantedBy=multi-user.target

Перезапустить службы и активировать автозагрузку

systemctl daemon-reload
systemctl enable web-server

Веб-клиент (Машина С)

  1. Чтобы послать запрос на машину А, необходимо ввести следующую команду:
curl 'http://192.168.<день рождения>.10:5000/
  1. Если поменять на сервере порт отличный от 5000 и попробовать отправить запрос, шлюз не должен пропустить пакеты

Практика Linux (с play with docker)

тоже самое, что "Практика Linux (с virtualbox)", но

  1. вместо создание ВМ на virtualbox создаем три ВМ на https://labs.play-with-docker.com/
  2. чтобы по ssh зайти на каждую машину, нужно сгенерировать ключ протоколом ed25519
ssh-keygen -t ed25519
ssh <domain-name>@direct.labs.play-with-docker.com
  1. в pwd используется дистрибутив alpine, поэтому часть функционала (systemd, netplan) отсутсвует
  2. настройку сети необходимо сделать с помощью ipvlan. Серевер А и С - по одному адаптеру согласно схеме. Сервер В - два адаптера согласно схеме, подсети должны быть разные
ip link add macvlan1 link eth0 type macvlan mode bridge # создаем новый адаптер с типом bridge и делаем связь адаптера с eth0 
ip address add dev macvlan1 xxx.xxx.xxx.xxx/<mask> # добавляем ip адрес адаптеру
ip link set macvlan1 up # включаем адаптер
  1. прописать маршруты у клиента А и С к их подсетям через шлюз машину В
ip route add <subnet A vm>/<mask> via <gateway ip B vm>
  1. Также развернуть веб сервер на машине С и помощью curl получить ответ от веб сервера
  2. настроить файрвол можно пожеланию (задание опциональное)
  3. написать bash скрипт для каждой виртуальной машине, который повторяет действия сделанные вручную (в качестве проверке создайте заново 3 виртуалки, результат скрипта - сurl клиента принимает ответ от сервера из разных подсетей)