# Отчет по модулю “Локальные сети” ## Занятие 1-2. Настройка окружения PNETLab Для запуска PNETLab необходим образ виртуальной машины и VMWare player. После запуска видим сообщение об успешном выполнении и адресе веб админки. ![](https://i.imgur.com/vAAPxqP.png) Логины и пароли от виртуалок и админки находятся в файле `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, и так далее соответственно. **Итоговая топология выглядит следующим образом:** ![](https://i.imgur.com/UxZ7Qyo.png) ### Настройка работы 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*: ![](https://i.imgur.com/wSGzKWu.png) *Winserver16*: ![](https://i.imgur.com/AtlYD1z.png) *Kali*: ![](https://i.imgur.com/iZsLziJ.png) #### Реализация 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. ![](https://i.imgur.com/jyl7ap7.png) #### ARP таблицы во время атаки с подмененными MAC-адресами: *Win7*: ![](https://i.imgur.com/bhlZ7ux.png) *Winserver16*: ![](https://i.imgur.com/TpExJQh.png) #### ARP-spoofing телефона и домашнего роутера Телефон - iOS ![](https://i.imgur.com/uEiwqvH.jpg) На локальной машине Kali Linux выполняю `arpspoof -i eth0 -t 192.168.1.45 -r 192.168.1.1` Результат в Wireshark ![](https://i.imgur.com/vaHjRiO.png) ## Занятие 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. Самостоятельная работа Воссоздал топологию сети и распределил адреса в сети как на скриншоте снизу ![](https://i.imgur.com/Im2sRMO.png) 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) в зависимости от типа подключаемого устройства, чем и могут воспользоваться злоумышленники #### Реализация атаки ![](https://i.imgur.com/FMu7cx5.png) 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** ![](https://i.imgur.com/KUnPAad.png) ## Самостоятельное занятие. 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! Мы внутри локальной сети ![](https://i.imgur.com/6rKZphQ.png)