# Writeup: Сеть трех локаций Minecraft

**Категория:** Сети  
**Класс:** 11  
**Флаги:** 3

---

## Задание 1: Сеть трех локаций Minecraft (1/3)
---
На карте изображена сеть из трех локаций: деревня Стива и Алекс, серверная шахта с отдельной серверной сетью и DMZ, а также форпост Херобрина и Эндермена. Между серверной шахтой и форпостом дополнительно поднят VPN-туннель.

![alt text](Network_11.png)

**Что нужно найти:**
Наибольшую по размеру подсеть, которую можно назначить локальной сети деревни с `PC Steve` и `PC Alex`, так, чтобы диапазон этой подсети не включал адреса других сетей на схеме. Ответ укажите в формате `/24`.

**Рекомендуемые утилиты:** черновик, калькулятор степеней двойки
**Цель работы:** определить допустимый префикс подсети по схеме адресации
**Критерий оценки:** предоставление корректного ответа

**Разбор задания:**

У деревни на схеме адреса `192.168.10.5` и `192.168.10.32`.
Другие крупные сети используют `192.168.20.0/24`, `192.168.30.0/24`, `192.168.40.0/24`.

Нужен самый широкий блок, который включает `192.168.10.x`, но не включает сети `20.x`, `30.x`, `40.x`.

- Блок `/19` уже охватывает диапазон третьего октета `0`–`31`, то есть захватывает и `192.168.20.x`, и `192.168.30.x`.
- Блок `/20` покрывает `192.168.0.0`–`192.168.15.255`, включает `192.168.10.5` и `192.168.10.32`, но не пересекается с `192.168.20.x`, `30.x`, `40.x`.

**Ответ:** `/20`

---

## Задание 2: Сеть трех локаций Minecraft (2/3)
---
Между `R2` и `R3` поднят VPN, который должен обеспечивать связность сети форпоста `192.168.40.0/24` с серверной сетью `192.168.20.0/24` и DMZ `192.168.30.0/24`.

На маршрутизаторах получены листинги, представленные в книге `Listings.txt`. Выберите все верные утверждения из книги `Statements.txt`.

**Что нужно найти:**
Номера всех верных утверждений. Ответ запишите через подчеркивание в порядке возрастания, например: `1_3_5`.

**Рекомендуемые утилиты:** текстовый редактор, черновик
**Цель работы:** разобрать маршрутизацию через VPN, NAT и фильтрацию
**Критерий оценки:** предоставление корректного ответа

`Listings.txt:`

```bash
R2:
$ ip route
192.168.20.0/24 dev eth3 proto kernel scope link src 192.168.20.1
192.168.30.0/24 dev eth2 proto kernel scope link src 192.168.30.1
default via 203.0.113.9 dev eth1
10.8.0.0/30 dev tun0 proto kernel scope link src 10.8.0.1
192.168.40.0/24 via 10.8.0.2 dev tun0

$ iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A POSTROUTING -o eth1 -j MASQUERADE

$ iptables -S FORWARD
-P FORWARD DROP
-A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -s 192.168.40.0/24 -d 192.168.30.10/32 -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT

R3:
$ ip route
192.168.40.0/24 dev eth2 proto kernel scope link src 192.168.40.1
default via 203.0.113.13 dev eth1
10.8.0.0/30 dev tun0 proto kernel scope link src 10.8.0.2
192.168.20.0/24 via 10.8.0.1 dev tun0
192.168.30.0/24 via 10.8.0.1 dev tun0

$ iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A POSTROUTING -o eth1 -j MASQUERADE

PC Herobrine:
$ ip route
default via 192.168.40.1 dev eth0
192.168.40.0/24 dev eth0 proto kernel scope link src 192.168.40.10
```

`Statements.txt:`

1. На `R3` есть маршрут к `192.168.20.10` через `tun0`, значит при рабочем туннеле трафик должен идти в VPN, а не по `default`.
2. На `R2` сеть `192.168.40.0/24` тоже направляется через `tun0`, то есть у обоих концов VPN есть маршруты к удаленной приватной сети.
3. На `R2` новые подключения из `192.168.40.0/24` к `192.168.30.10` разрешены только для `tcp/22`; остальное будет отброшено политикой по умолчанию.
4. Успешный ping с `PC Herobrine` до `203.0.113.10` автоматически доказывает работу доступа к `192.168.20.10` через VPN.
5. Для ответного трафика `192.168.30.10 → 192.168.40.10` на `R2` отдельное правило для нового соединения не нужно, потому что уже есть `ESTABLISHED,RELATED`.
6. `PC Herobrine` не обязан знать о VPN: у него только `default via 192.168.40.1`, а выбор пути делает `R3`.
7. В листингах нет `DNAT`; показаны маршрутизация через VPN и фильтрация между приватными сетями.
8. Маршрут `192.168.40.0/24 via 10.8.0.2 dev tun0` на `R2` означает, что сеть форпоста локально подключена к `eth2`.


**Разбор задания:**

1. Верно. На `R3` есть маршрут `192.168.20.0/24 via 10.8.0.1 dev tun0`, значит доступ к серверной сети идет через VPN, а не через `default`.
2. Верно. На `R2` есть обратный маршрут `192.168.40.0/24 via 10.8.0.2 dev tun0`, то есть обе стороны знают, как дойти до удаленной частной сети.
3. Верно. На `R2` в `FORWARD` явно разрешен только `tcp --dport 22` от `192.168.40.0/24` к `192.168.30.10`, а политика цепочки — `DROP`.
4. Неверно. Успешный ping до публичного адреса `203.0.113.10` ничего сам по себе не доказывает про доступ к `192.168.20.10` через VPN.
5. Верно. Для ответного трафика не нужно отдельное правило на новые соединения, потому что уже разрешен `ESTABLISHED,RELATED`.
6. Верно. У `PC Herobrine` только `default via 192.168.40.1`; о VPN знает роутер `R3`, а не конечный хост.
7. Верно. В листингах показаны маршруты через `tun0`, `MASQUERADE` на внешний интерфейс и `FORWARD`-фильтрация; правил `DNAT` там нет.
8. Неверно. Маршрут `192.168.40.0/24 via 10.8.0.2 dev tun0` на `R2` означает удаленную сеть за туннелем, а не локальную сеть на `eth2`.

**Ответ:** `1_2_3_5_6_7`

---

## Задание 3: Сеть трех локаций Minecraft (3/3)
---
Между серверной шахтой и форпостом поднят VPN-туннель. На стороне `R2` находятся серверная сеть и DMZ, на стороне `R3` — сеть форпоста. Нужно открыть только ограниченный доступ из форпоста к серверу в DMZ `192.168.30.10`.

Зайди на `R2` по SSH и настрой `iptables` так, чтобы из сети `192.168.40.0/24`, приходящей через VPN, был разрешен только `tcp/22` к `192.168.30.10`, а остальной новый трафик в DMZ оставался запрещен.

**Рекомендуемые утилиты:** ssh, bash, iptables
**Цель работы:** настроить корректное правило фильтрации `iptables`
**Критерий оценки:** получение правильного флага

**Разбор задания:**

На `R2` уже настроены:

- `FORWARD DROP`
- `ESTABLISHED,RELATED ACCEPT`

Нужно разрешить только новый SSH-трафик из `192.168.40.0/24` к `192.168.30.10`.

Подходит правило:

```bash
iptables -A FORWARD -p tcp -s 192.168.40.0/24 -d 192.168.30.10 --dport 22 -m conntrack --ctstate NEW -j ACCEPT
```

Почему оно корректно:

- разрешается только `tcp/22`
- только к одному хосту `192.168.30.10`
- только из сети форпоста
- только для новых соединений
- все остальное остается под политикой `DROP`

После добавления правила запускаем:

```bash
python3 /opt/router/check_rule.py
```

**Флаг:** `vsosh{iptables_f1lt3r_f0rw4rd}`
