# Отчет по модулю “Локальные сети”
## Занятие 1-2. Настройка окружения PNETLab
Для запуска PNETLab необходим образ виртуальной машины и VMWare player. После запуска видим сообщение об успешном выполнении и адресе веб админки.

Логины и пароли от виртуалок и админки находятся в файле `creds.md`
После запуска создадим новую лабораторную работу. Назовем ее lab1
### Создадим ноды:
* **VPC** - образ Virtual PC. Легковесный образ. Очень ограничен в использовании. В основном необходим для раздачи IP адресов и заполнения сети для дальнейшего тестирования. 128MB RAM
* **Win7** - образ windows 7. Образ десктопной версии windows 7. 1GB RAM
* **Winserver16** - образ Windows server 16. Серверная версия windows. 2 CORE, 2GB RAM
* **KaliLinux** - образ kali linux 22. Образ дистрибутива Kali Linux 2022. MIN 2CORE, 3GB RAM
* **Switch** - образ Cisco IOL -> L2. Образ свича производителя CISCO. NVRAM 1024KB, 256MB RAM
* **Net** - network нода. Представляет из себя виртуальный адаптер pnet-lab. Выбираем cloud#. Где cloud0 - соответствует виртуальный адаптер под номером 1, и так далее соответственно.
**Итоговая топология выглядит следующим образом:**

### Настройка работы Wireshark:
1. Сохранить fingerprint сервера pnet-lab на локальной машине. Для этого через putty подключаемся к серверу pnet через протокол ssh и сохраняем навсегда данный fingerprint сервера
2. Закрываем putty и открываем `C:\Program Files\EVE-NG` правим файл `wireshark_wrapper.bat` и меняем графу `SET PASSWORD`. Указываем в кавычках пароль от сервера pnet.
3. DONE
## Занятие 3. Уровень L2. Коммутация. ARP-spoofing
### Настройка коммутатора L2
1. Открываем окно терминала с коммутатором
2. Включаем привилегированный режим командой `enable`
3. Чтобы перейти в режим настройки `configure terminal`
4. Далее можем перейти в настройки интерфейса выполнив `interface e0/0`, где *e0/0* название интерфейса
5. Далее можем включить или выключить интерфейс командой `no shutdown` или `shutdown` соответственно
#### Настройка VLAN
Настройка **ACCESS PORT** и создание VLAN
Для разделения сети на разные широковещательные домены. Разделение выполняется на уровне L2. То есть фреймы из одного VLAN не перейдут в другой и будут распространяться только внутри одного VLAN
1. Создадим VLAN. Для этого перейдем в режим конфигурации
2. `vlan 2`, где 2 - номер VLAN. Первый VLAN является дефолтным
3. Даем имя VLAN (optional). `name YourName`
4. Переходим в режим конфигурации интерфейса `interface e0/0`
5. Задаем описание порта (optional) `description yourDescription`
6. Указываем режим работы порта. access означает - порт доступа. Для переключения режима порта выполняем `switchport mode access`
7. Задаем VLAN для порта. `switchport access vlan 104`, где 104 - номер вашего VLAN
8. Для проверки соответствия порта и VLAN - `show vlan`
**Настройка TRUNK PORT**
Trunk port предназначен для передачи и приема тегированных фреймов. Тегированный фрейм - фрейм внутри которого содержится тег к какому VLAN он принадлежит.
Таким образом для правильной работы необходимо настроить trunk port как на исходящем порте отправителя, так и на порту получателя.
1. Создаем необходимые нам VLAN по части инструкции выше
2. Переходим в настройки интерфейса
3. `switchport trunk encapsulation dot1q` - переключаем тип инкапсуляции для trunk порта
4. `switchport trunk allowed 2-4,6` - устанавливаем доступные теги VLAN которые отправит или получит порт.
5. `switchport mode trunk` - включаем trunk мод для порта
### ARP-spoofing
Для начала запустим все ноды лабораторной. Далее необходимо выяснить IP адреса и MAC-адреса машин Win7, Winserver16 и KaliLinux
В данном варианте атаку ARP-spoofing будет реализовывать машина **KaliLinux**
**Win7**:
- IP: *192.168.255.145*
- MAC: *50-F8-06-00-18-00*
**Winserver16**:
- IP: *192.168.255.140*
- MAC: *50-52-B7-00-17-00*
**KaliLinux**:
- IP: *192.168.255.142*
- MAC: *50-B3-45-00-1B-00*
#### Дополнительные подготовления образа KaliLinux для реализации данной атаки:
1. `sudo -i` - переходим в интерактивный режим суперпользователя
2. `apt update`
3. `apt install binutils -y`
4. `apt install dsniff -y`
#### Исходные ARP таблицы (до реализации атаки) на машинах выглядят следующим образом:
*Win7*:

*Winserver16*:

*Kali*:

#### Реализация ARP-spoofing атаки
Суть атаки заключается стать человеком посередине (Man-In-The-Middle, сокр. MITM) путем подмены значений в ARP таблице хостов, прослушивать сетевой траффик. Также необходимо настроить пересылку фреймов на конечный хост, чтобы сетевое подключение от источника к конечному хосту не терминировалось.
Для проведения атаки arp-spoofing должны быть разрешены транзитные пакеты. Разрешить IPv4 forwarding можно отредактировав файл `/etc/sysctl.conf`
Нужно раскоментировать строку
`net.ipv4.ip_forward=1`
После чего выполнить команду
`sysctl -p /etc/sysctl.conf`
Команды для выполнения в *KaliLinux*:
1. `arpspoof -i eth0 -t 192.168.255.145 -r 192.168.255.140`
После выполнения атаки весь траффик идет через хост KaliLinux. Как видно из скриншота ICMP запросы идут от 140 хоста и направляются в 145, только трафик виден на KaliLinux.

#### ARP таблицы во время атаки с подмененными MAC-адресами:
*Win7*:

*Winserver16*:

#### ARP-spoofing телефона и домашнего роутера
Телефон - iOS

На локальной машине Kali Linux выполняю
`arpspoof -i eth0 -t 192.168.1.45 -r 192.168.1.1`
Результат в Wireshark

## Занятие 4. Уровень L3. Маршрутизация и DHCP
### Настройка DHCP сервера на роутере CISCO
1. Перейдем в консоль настройки роутера `configire terminal`
2. Создаем dhcp pool `ip dhcp pool pool-name` и переходим к его настройке
3. Задаем сеть для пула `network 192.168.10.0 255.255.255.0`
4. Устанавливаем IP адрес роутера по умолчанию (default gateway) `default-router 192.168.10.254`
5. Задаем параметр DNS-server `dns-server 192.168.10.254`
6. Устанавливаем доменное имя`domain-name cyber-ed.local`
7. Исключаем адреса для раздачи DHCP сервером (режим config) `ip dhcp excluded-address 192.168.10.1 192.168.10.100`. Адреса с 1 по 100 будут исключены для выдачи
8. Задаем IP адрес для интерфейса роутера. Для этого переходим в настройки интерфейса и вводим команду `ip address 192.168.10.254 255.255.255.0`
9. Включаем интерфейс `no shutdown`
10. Для проверки на VPC ноде запустим команду для получения конфигураций с DHCP сервера `dhcp`
*Итого: VPC получил свой IP адрес, зарезервировал его за собой, получил адрес шлюза по умолчанию*
## Занятие 5. Уровень L4. DNS и сканирование сети
Полезные материалы:
- [DNS BIND](https://habr.com/ru/post/137587/)
- [Про DNS](https://tproger.ru/explain/domain-name-system/)
- [DNS spoofing](https://ru.wikipedia.org/wiki/DNS_spoofing)
- [nslookup](https://ab57.ru/cmdlist/nslookup.html)
- [Domain Name System Security Extensions](https://ru.wikipedia.org/wiki/DNSSEC)
- [DNSSEC](https://www.icann.org/resources/pages/dnssec-what-is-it-why-important-2019-03-20-ru)
- [Корневые серверы DNS](https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D1%80%D0%BD%D0%B5%D0%B2%D1%8B%D0%B5_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D1%8B_DNS)
- [DNS - NSLOOKUP, что означает неавторизованный ответ?](https://qastack.ru/server/413124/dns-nslookup-what-is-the-meaning-of-the-non-authoritative-answer)
- [утилита dig](https://greendail.ru/node/474)
### Настройка DNS сервера на маршрутизаторе CISCO
В основном для DNS сервера используются windows сервера так как они более удобные в настройке.
1. Задаем доменное имя `(config)#ip domain name cyber-ed.local`
2. Устанавливаем IP адрес кэширующего DNS сервера, другими словами IP адрес сервера к которому будет перенаправлен DNS запрос для резолва доменного имени если заданное доменное имя не соответствует `(config)#ip name-server 8.8.8.8`
3. Включаем режим, который позволяет транслировать имена в адреса для нашего доменного имени `(config)#ip domain-lookup`
4. Активируем DNS сервер `(config)#ip dns server`
5. Для создания DNS записи выполняем команду `(config)#ip host pc1.cyber-ed.local 10.10.10.10`
### Методы сканирования сети
- **TCP SYN** - отправка TCP SYN. Если получаем **SYN/ACK**, значит порт открыт. Если получаем **RESET** - закрыт. Если сервер не отвечает значит **filtered**
- **TCP CONNECT** - то же самое что и TCP SYN, только с полным хэндшейком (после получения TCP SYN/ACK от сервера отвечаем ACK)
- **UDP scan** - отправляем пустую DATA в дэйтаграмме и в ответ получаем *ICMP host unreacheable* что означает - порт открыт, но приложение не может обработать такие данные
- ARP сканирование. Если используем тихий режим, то мы без отправки широковещательных пакетов просматриваем все пришедшие ARP пакеты и видим их IP и MAC-адреса. При активном сканировании мы сами рассылаем широковещательные пакеты
#### ARP-сканирование
Для ARP-сканирования заиспользуем команду netdiscover.
*-i* - указание интерфейса
*-p* - пассивный режим
*-r* - задание адреса сети с маской. То есть рассылка в рейндже
Для домашней локальной сети 192.168.1.0/24 для сканирования сети выполняем команду `netdiscover -i eth0 -r 192.168.1.0/24`
#### NMAP
Обладает множеством конфигураций для гибкого сканирования сети или хостов.
- `nmap 192.168.1.0/24 -sn` - PING сканирование сети
- `nmap 192.168.1.22` - Сканирование по 1000 самым популярным портам
- `nmap 192.168.1.22 -p22` - Сканирование определенного порта
- `nmap 192.168.1.22 -p1-65535` - Сканирование диапазона портов (только TCP)
## Занятие 6. Самостоятельная работа
Воссоздал топологию сети и распределил адреса в сети как на скриншоте снизу

1. Для интерфейса роутера e0/0 `(config-if)#ip address 192.168.10.254 255.255.255.0`
2. Для интерфейса роутера e0/0 `(config-if)#no shutdown`
### Настройка DHCP пула админов
1. `ip dhcp pool admin-pool`
2. `network 10.0.0.0 255.255.255.240`
3. `default-router 10.0.0.14`
4. `dns-server 192.168.10.254`
5. `domain-name cyber-ed.local`
### Настройка DHCP пула программистов
1. `ip dhcp pool programmers-pool`
2. `network 10.0.1.0 255.255.255.0`
3. `default-router 10.0.1.254`
4. `dns-server 192.168.10.254`
5. `domain-name cyber-ed.local`
### Настройка DHCP пула VIP
1. `ip dhcp pool vip-pool`
2. `network 10.0.0.32 255.255.255.224`
3. `default-router 10.0.0.62`
4. `dns-server 192.168.10.254`
5. `domain-name cyber-ed.local`
### Настройка DHCP пула технологов
1. `ip dhcp pool technologist-pool`
2. `network 10.0.0.128 255.255.255.128`
3. `default-router 10.0.0.254`
4. `dns-server 192.168.10.254`
5. `domain-name cyber-ed.local`
### Настройка DHCP пула серверов
1. `ip dhcp pool server-pool`
2. `network 10.0.2.0 255.255.255.0`
3. `default-router 10.0.2.254`
4. `dns-server 192.168.10.254`
5. `domain-name cyber-ed.local`
## Занятие 7. Безопасность локальной сети. Сегментирование, VLAN.
Настраиваем VLAN. Подробности настройки есть в занятии 3.
### Настройка роутера для поддержки VLAN
У роутера на один физический интерфейс может быть создано множество виртуальных субинтерфейсов. Каждый субинтерфейс будет соотнесен с нужным нам VLAN-ом.
1. `(config)#int e0/0.5` - создадим 5 сабинтерфейс. Номер интерфейса не обязательно должен быть равен номеру VLAN
2. `(config-subif)#encapsulation dot1Q 5` - включаем режим инкапсуляции для данного субинтерфейса и указываем номер VLAN к которому он будет привязан
3. `(config-subif)#ip address 10.0.1.254 255.255.255.0` - задаем IP-адрес для субинтерфейса. Роутер по IP адресу и маске подсети может сам высчитывать адрес сети.
### Конфигурация VTP
VTP работает в режиме сервер -> клиенты. Раздает конфигурации VLAN именно сервер
#### Настройка VTP сервера
1. `(config)#vtp mode server vlan`
2. `(config)#vtp domain cyber-ed.local` - конфигурации шарятся внутри одного домена
3. `(config)#vtp password qq123456` - пароль для получения конфигураций клиентами. ВНИМАНИЕ! Пароль хранится в незашифрованном виде
4. `(config)#vtp version 3` - используем 3 версию протокола так как в нем расширено количество возможно передаваемых VLAN
5. `#vtp primary` - включение primary режима для возможности внесения конфигураций VLAN на сервере. После перезагрузки свича режим primary пропадает
#### Настройка VTP клиентов
1. `(config)#vtp mode client`
2. Повторить пункты со 2 по 4 из "*Настройки VTP сервера*" включительно для установки реквизитов подключения
Необходимо помнить, что есть несколько режимов работы клиентов:
- Transparent mode - конфигурации VLAN не применяются на данном клиенте, но передаются другим свичам
### Донастройка стенда
1. Интерфейсы между свичами переводим в режим trunk
2. Чтобы не создавать vlan вручную включаем режим VTP клиента с доменом `cyber-ed.local`, прописываем пароль и 3 версию vtp
3. Интерфейсы до конечных станций переводим в режим access и проставляем нужный vlan
## Занятие 8. ACL, Port security, безопасность сети
### Атака VLAN hopping
Изначально все порты комутатора не сконфигурированы, поэтому при подключении новое устройство может представиться свичом и порт взаимодействия переключится в режим TRUNK благодаря DTP (dynamic trunking protocol). DTP помогает установить режим работы порта (access or trunk) в зависимости от типа подключаемого устройства, чем и могут воспользоваться злоумышленники
#### Реализация атаки

1. Запустить Kali Linux и установить пакет yersinia
2. Открыть вкладку DTP и нажать launch attack (enable trunking). Таким образом мы отправляем фрейм L2 в котором указываем тип подключения свич и режим работы порта автоматически становится TRUNK
3. `modprobe 8021q` - Подключаем модуль 8021q для тегирования фреймов
4. `vconfig add eth0 5` - Создаем виртуальный интерфейс который будет тегировать исходящие фреймы 5-м VLAN-ом
5. `ip link set eth0.5 up` - поднимаем интерфейс
6. `dhclient eth0.5` - получаем IP по DHCP для интерфейса eth0.5
7. Done. Теперь мы можем взаимодействовать с устройствами из 5 VLAN-а на канальном уровне
Данная атака опасна так как NTA (network traffic analyzer) устройства работают при межсетевом взаимодействии, но так как устройство злоумышленника находится в локальной сети жертвы, то пакеты до NTA просто не дойдут так как фреймы будут передаваться внутри одного свича
Способ защиты: проставить access режим работы порта принудительно. `switchport mode access`
### Port security L2
Для настройки необходимо выполнить команды:
1. Переходим в настройки нужного нам интерфейса на свиче
2. `(config-if)#switchport port-security mac-address sticky` - Переводим порт в режим port-security и режим выучивания адресов - sticky (динамическая запись)
3. `(config-if)#switchport port-security maximum 2` - максимальное количество mac-адресов - 2
4. `(config-if)# switchport port-security violation ?`. Есть несколько режимов работы ограничений:
- shutdown - административное выключение порта если к интерфейсу подключилось устройство с неизвестным MAC-адресом
- restrict - трафик не комутируется, генерируется уведомление о нарушении port security и порт не выключается
- protect - трафик не комутируется
5. `(config-if)# switchport port-security` - включаем режим port-security на данном интерфейсе
## Занятие 9. L3. Настройка NAT и SSH на роутере
### Настройка NAT
#### Сеть программистов (VLAN 5)
1. `(config)#access-list 99 permit 10.0.1.0 0.0.0.255`
2. `(config)#ip nat inside source list 99 interface e0/1 overload` - Изнутри наши ip адреса указанные в 99 ACL будут транслироваться вовне через интерфейс e0/1. overload - PAT (port address translation)
3. e0/1 `(config-if)#ip nat outside`
4. e0/0.5 `(config-if)#ip nat inside`
#### Сеть технологов (VLAN 2)
1. `(config)#access-list 98 permit 10.0.0.128 0.0.0.127`
2. `(config)#ip nat inside source list 98 interface e0/1 overload`
3. e0/0.2 `(config-if)#ip nat inside`
#### Сеть серверов (VLAN 3)
1. `(config)#access-list 97 permit 10.0.2.0 0.0.0.255`
2. `(config)#ip nat inside source list 97 interface e0/1 overload`
3. e0/0.3 `(config-if)#ip nat inside`
#### Сеть админов (VLAN 6)
1. `(config)#access-list 96 permit 10.0.0.0 0.0.0.15`
2. `(config)#ip nat inside source list 96 interface e0/1 overload`
3. e0/0.6 `(config-if)#ip nat inside`
#### Сеть VIP (VLAN 7)
1. `(config)#access-list 95 permit 10.0.0.32 0.0.0.31`
2. `(config)#ip nat inside source list 95 interface e0/1 overload`
3. e0/0.7 `(config-if)#ip nat inside`
### SSH настройка
1. Создаем VLAN для управления устройствами (VLAN 99)
2. Создаем sub-interface на роутере для подключения к нему по SSH и помещаем данный сабинтерфейс в VLAN 99
3. `(config)#enable password qq123456` - пароль на режим exec-privilege
4. `(config)#username user privilege 15 password 0 qq123456` - Создали пользователя user с паролем qq123456
5. `(config)#aaa new-model` - включили режим проверки пользователей в локальной БД. Небезопасно!
6. `(config)#line vty 0 4` - Настройка виртуальных терминалов
7. `(config-line)#transport input ssh`
8. `(config-line)#logging synchronous`
9. `(config-line)#exec-timeout 2 0` - таймаут на соединение 2 минуты 0 секунд
10. `(config)#crypto key generate rsa`
11. `(config)#ip ssh version 2`
**Скриншот результата подключения по ssh к роутеру через Putty**

## Самостоятельное занятие. ACL
### ACL
Для настройки ACL необходимо изначально создать его и потом применить на нужном нам интерфейсе либо на вход (IN), либо на выход (OUT).
В нашем случае рассмотрим создание расширенного списка (extended), так как его функционал позволяет фильтровать трафик не только по источнику, но и по получателю.
1. `(config)#ip access-list extended custom-acl`
2. `(config-ext-nacl)20 permit tcp 10.0.0.0 0.0.0.15 10.0.1.0 0.0.0.255` - 20 - номер правила в списке (обработка правил выполняется по возрастанию). Для сопоставления адресов правилам используется **wildcard**
3. `(config-if)#ip access-group custom-acl in` - устанавливаем ACL на входящий трафик с интерфейса
Более детальная настройка выполнена в рамках самостоятельного задания
## Занятие 10. VPN
### Настройка OpenVPN сервера на Kali Linux
Воспользуемся автоматическим скриптом установки openvpn сервера https://github.com/angristan/openvpn-install
Для этого выполним следующие команды:
1. `curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh` - загрузка скрипта на хост
2. `chmod +x openvpn-install.sh` - выдача прав на исполнение
3. `./openvpn-install.sh` - запуск установщика
4. Выбираем IPv4 интерфейса, котороый VPN сервер будет прослушивать - `192.168.255.149`
5. Выбираем публичный IPv4 для подключения клиентов извне - `192.168.255.149`
6. Порт. Используем стандартный порт `1194`
7. Протокол. Выбираем UDP так как он работает быстрее. Таким образом даже если взаимодействие приложений происходит через TCP протокол, то он будет упаковываться в UDP дэйтаграмы
8. DNS. Без разницы какой DNS сервер выбрать
9. Compression. Не используем сжатие данных. Применимо при слабом интернете и мощном CPU
10. Настройка шифрования. Используем стандартные настройки
11. Имя клиента. `rpi3`
12. Пароль. Для проостоты не используем пароль
13. Создался файл профиля `/home/user/rpi3.ovpn`
14. Коментируем строки `push ...` в конфигурации `/etc/openvpn/server.conf` для отключения проталкивания данных настроек на клиент
15. Редактируем профиль клиента `/home/user/rpi3.ovpn`. Коментируем строки:
- `explicit-exit-notify`
- `ignore-unknown-option block-outside-dns`
- `setenv opt block-outside-dns # Prevent Windows 10 DNS leak`
16. Отправляем через scp файл профиля vpn клиента на debian машину. `scp /home/user/rpi3.ovpn user@192.168.255.151:/home/user`
17. Устанавливаем OpenVPN клиент на debian. `apt install openvpn`
18. Запускаем OpenVPN клиент на debian. `openvpn /home/user/rpi3.ovpn`
19. Windows7 в локальной сети имеет адрес `192.168.1.100`. Мы не можем достучаться с Kali в локальную сеть так как на Kali нет маршрутов для данной сети. `ip r`. VPN адаптер - `tun0`
20. На Debian включаем форвард IPv4 пакетов. Правим файл `/etc/sysctl.conf`. Раскоментируем строку `net.ipv4.ip_forward=1`. Применяем конфигурацию `sysctl -p /etc/sysctl.conf`
21. Получим IP адрес на интерфейс br0 для Debian через DHCP. `dhclient -i br0`
22. `iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE` - по умолчанию трафик будет роутиться в сеть br0
23. Создадим распространяемые настройки для OpenVPN клиента `/etc/openvpn/ccd/rpi3`. Впишем строку `iroute 192.168.1.0 255.255.255.0` - позволяем трафику по VPN проходить для данной подсети
24. Добавляем маршрут на Kali для доступа во внутреннюю сеть `ip route add 192.168.1.0/24 via 10.8.0.2`
25. Перезагрузим OpenVPN клиент и сервер. Далее можем пинговать `192.168.1.101` - Win7. Done! Мы внутри локальной сети
