# **Инструкция по настройке сервера OpenVPN L2 (канальный уровень)** ###### tags: `L2` ***С помощью данного сервера можно проникнуть внутрь сети организации. Для выполнения данной работы необходимо подготовить следующий стенд (Если работы выполняются последовательно, то для выполнения данной работы стенд у вас уже должен быть собран).*** * Машина атакующего (желательно машина с Kali Linux на борту) * Машина клиента-жерты (в теории можно использовать любую машину с клиентом OpenVPN, в данном примере Debian10) * Машина с OpenVPN Server (в данной работе использовался Debian 10) * Межсетевой экран/маршрутизатор (для имитации защищенной организации, в примере pfsense) * Коммутатор (любой, в примере cisco) * Несколько рабочих машин (любые ОС, для возможности спроицировать атаку на них после проникновения) **В результате у вас должен быть следующий стенд.** ![](https://i.imgur.com/F98fnNa.png) *Итак, начнем!* 1. По результатам предыдущих работ, стенд уже должен быть собран, если нет, то его необходимо собрать. (как собрать стенд можно посмотреть в предыдущих инструкциях в начале каждой из работ) 2. Для дальнейшего выполнения работы, нам необходимо настроить наш коммутатор, так как мы будем пробрасывать туннель L2, то необходимо прокинуть VLAN. Настраивать будем следующим образом, два интерфейса настроим в trunk mode(для примера направим на основную атакуемую машину и на pfsense), к еще одному интерфейсу установим VLAN 10 и последнему VLAN20 (машины, которые будут в этих VLAN будут под ОС Windows для примера атаки на них). Также, необходимо будет настроить наш pfsense на работу с VLAN, для его настройки добавим машину kali-lan(как мы делаем это обычно) и подключим к нашему коммутатору(если у вас изначально коммутатор был настроен на одну группу портов, то есть всего доступно 4 порта, то выключите его и добавьте еще одну группу в настройках коммутатора). Интерфейс на kali-lan настроим в vlan 1. ![](https://i.imgur.com/oLFKYor.png) Данный linux мы будем использовать для настройки нашего pfsense, так как он работает быстрее винды и "ест" меньше ресурсов. Можно сразу после подключения включить его. ![](https://i.imgur.com/pSglCRQ.png) Итак, переходим непосредственно к настройки нашего коммутатора cisco (как расположены vlan у меня, можно увидеть на самом первом скрине выше). Запускаем его и видим консоль, для настройки используем следующие команды: > **ena** Для перехода в режим root, где можно использовать соответствующие команды. > **conf t** Для перехода в режим глобальной конфигурации. Далее переходим непосредственно к выбору интерфейса и его настройки. > **int e0/0** (команда для выбора настраемого интерфейса) > **Description "To Pfsense"** (описание выбранного интерфейса) > **switchport trunk encapsulation dot1q** (команда указывающая каким способом будет экапсулироваться трафик, тут это стандарт IEEE 802.1Q(dot1q)) > **switchport mode trunk** (команда для перевода интерфейса в транковый режим) Таким образом, мы назначили транковый порт в сторону pfsense. Теперь аналогично назначим транковый порт в сторону атакуемой машины linux, которая у меня находится на интерфейсе e0/2. > **int e0/2** (команда для выбора настраемого интерфейса) > **Description "To Debian"** (описание выбранного интерфейса) > **switchport trunk encapsulation dot1q** (команда указывающая каким способом будет экапсулироваться трафик, тут это стандарт IEEE 802.1Q(dot1q)) > **switchport mode trunk** (команда для перевода интерфейса в транковый режим) Далее, настраиваем остальные интерфейсы в соответствующие VLAN(мои vlan, как уже сказано ранее на первом скриншоте выше), для настройки VLAN используем следующие команды: > **int e0/1** (команда для выбора настраемого интерфейса) > **Description "To Win7"** (описание выбранного интерфейса) > **switchport mode access** (переводим интерфейс в режим access) > **switchport access vlan 10** (команда для назначения нужного вам vlan, если у вас не был создан vlan ранее выйдет оповещение, что vlan создан так как его не было). Аналогичным образом создаем vlan 20 и vlan 1, для указанных выше машин. > **int e0/3** (команда для выбора настраемого интерфейса) > **Description "To Win10"** (описание выбранного интерфейса) > **switchport mode access** (переводим интерфейс в режим access) > **switchport access vlan 20** (команда для назначения нужного вам vlan, если у вас не был создан vlan ранее выйдет оповещение, что vlan создан так как его не было). > **int e1/0** (команда для выбора настраемого интерфейса) > **Description "To Kali"** (описание выбранного интерфейса) > **switchport mode access** (переводим интерфейс в режим access) > **switchport access vlan 1** (команда для назначения нужного вам vlan, если у вас не был создан vlan ранее выйдет оповещение, что vlan создан так как его не было). В конце, необходимо сохранить изменения в конфигурации командой: > **do wr** ![](https://i.imgur.com/5gCeSJX.png) А для просмотра текущей конфигурации cisco воспользуйтесь командой(пробел - спуск по тексту): > **do show run** ![](https://i.imgur.com/3mX5Ubq.png) Настройка нашего коммутатора завершена. 3. На данном этапе настроим pfsense на возможность работы с VLAN. Для начала подключимся к нашему pfsense. Для этого заходим на специально выделенную kali и через браузер заходим на стандартный адрес нашего pfsense (192.168.100.254) для входа используем стандартные логин и пароль (admin и pfsense). После того, как мы вошли, выбираем следующую вкладку Interface > Interface Assigment. Тут нам нужно добавить наши vlan, поэтому дальше щелкаем по вкладке vlan. ![](https://i.imgur.com/oBfBuUn.png) Как мы помним основные vlan, которые мы создали это VLAN 10 и VLAN 20, добавим их сюда. Для этого щелкаем **add**. Для VLAN 10 указываем параметры как на скриншоте и нажимае Save. ![](https://i.imgur.com/P7ZepUu.png) Для VLAN 20 создаем аналогично 10. ![](https://i.imgur.com/ebdBkyl.png) Возвращаемся во вкладку Interface Assigment и добавляем наши VLAN там. Просто щелкаем кнопку add для наших VLAN и сохраняем настройки. ![](https://i.imgur.com/bplK2ke.png) Затем настраиваем каждый из них отдельно, для этого щелкаем во владку Interface и выбираем первый наш VLAN10 (в списке он буде называться OPT 1). Указываем следующие настройки, Description - название нашего VLAN, укажем VLAN_10(обязательно нижнее подчеркивание) вместо OPT1, так наш psfense будет шлюзом для win7, то в Configuration IP4 укажем Static IPv4, а IPv4 Address укажем адрес шлюза и адресацию сети в целом (+ маска). Можно выбрать любую адресацию какую вам удобно, у меня это 192.168.10.254/24 ![](https://i.imgur.com/fiIhTyn.png) Сохраняем изменения, больше ничего изменять не требуется. Применяем изменения в предложенном сообщении. ВАЖНО!!! Только после первого изменения щелкаем галочку **Enable interface**. Затем снова сохраняем и применяем настройки. Это нужно из-за того, что настройки могут не применится(баг pfsense). Настраиваем VLAN 20 аналогичным образом, только адресацию указываем нужную, у меня это 192.168.20.254/24. Теперь, необходимо настроить правила для наших VLAN. Переходим на вкладку **Firewall > Rules**. И там сначало выбираем вкладку LAN. Нам нужно, что весь трафик с VLAN 10 шел куда угодно, для удобство скопируем аналогичное правило LAN (кнопку и нужное правило указал на скриншоте). ![](https://i.imgur.com/IxKVM5F.png) В скопированном правиле, укажем, что действием будет распространятся на VLAN10, а цель соответственно вся сеть VLAN10. ![](https://i.imgur.com/nTSMTQv.png) Сохраняем и применяем настройки. Аналогично копируем правило и применяем для VLAN20. Теперь, назначив на наших машиных нужную адресацию мы сможем выходить в интернет. У меня указан следующая. ![](https://i.imgur.com/Pj4Qaje.png) Настройка VLAN на pfsense завершена. 4. Переходим к настройке непосредственно нашего L2 туннеля: Основная настройка будет происходить на атакуемой машине, то есть Debian машина внутри инфраструктуры (которая opanvpn client). К этой машинет подходит trunk интерфейс, это было сделано для примера проведения атаки в инфраструктуру. Открываем нашу машину и для начала проверим имеем ли мы доступ ко всем vlan через наш trunk интерфейс. Для этого, поправим сетевую конфигурацию на машине: > nano /etc/network/interfaces В данный конфиг добавляем следующие параметры: auto ens3 iface ens3 inet dhcp > auto ens3.10 > iface ens3.10 inet static > address 192.168.10.20/24 > auto ens3.20 > iface ens3.20 inet static > address 192.168.20.20/24 ![](https://i.imgur.com/3XZ5Dsz.png) Затем, нажимаем Ctrl+X, сохраняем и выходим. После необходимо перезагрузить сетевую службу командой - **systemctl restart networking**. Изменения в конфиге необходимы, чтобы показать, что данная машина может взаимодействовать со всеми vlan. Теперь попробуем выполнить пинг на любую из машин, должно проходить без проблем. Также, можем посмотреть наши, что все интерфейсы настроены верно - **ip a** ![](https://i.imgur.com/bFNLPMD.png) 5. Переходим к редактирования настроек OpenVPN. Для начала, "заставим" настроенный в прошлом уроке openvpn загружаться вместе с ОС, для этого выполним следующую команду - **systemctl enable openvpn** Затем, необходимо, что конфигурационный файл клиента openvpn автоматически применялся и цеплялся к серверу, для этого необходимо выполнить следующее: > nano /etc/default/openvpn Внутри данного конфига, необходимо убрать комментарий со строчки > AUTOSTART="all" Данная строчка заставляет при запуске openvpn запускать все конфиг файлы по пути /etc/openvpn/*.conf Затем, нажимаем Ctrl+X, сохраняем и выходим. Но, у нас по данному пути нет никаких конфигурационных файлов, поэтому переместим наш конфиг файл по данному пути следующей командой: **mv <путь файла с прошлого урока>/<название файла>.conf /etc/openvpn/** Для полной проверки внесенных изменений, перезагружаем машину - **reboot** (после запуска у нас автоматически должно быть подключение к openvpn server). После перезагрузки проверим отработал ли наш конфги командой **ip a**. Должен появится туннель openvpn. ![](https://i.imgur.com/EIfWp32.png) 6. На данном шаге будем настраивать OpenVPN на подключение по уровню L2. Для этого, настраиваем конфги как на сервере, так и на обоих наших клиентах, как атакующего, так и атакуемого. Начнем с сервера, заходим на него и правим конфиг сервера следующими командами: > nano /etc/openvpn/server.conf В данном конфиге необходимо изменить строчку: **dev tun** на **dev tap** ![](https://i.imgur.com/9vy0SEH.png) Затем, нажимаем Ctrl+X, сохраняем и выходим. Перезапускаем openvpn server для применения настроек (команда **systemctl restart openvpn**). Аналогичные действия выполняем на клиентах. Переходим в нашу атакуемую машину (Debian), но только правим уже конфиг клиента, мы его ранее перенесли в /etc/openvpn/*.conf. > nano /etc/openvpn/<имя клиента>.conf В данном конфиге необходимо изменить строчку: **dev tun** на **dev tap** ![](https://i.imgur.com/23bbPNj.png) Затем, нажимаем Ctrl+X, сохраняем и выходим. Перезапускаем openvpn client для применения настроек (команда **systemctl restart openvpn**). 7. На данном шаге, для удобства объединим все предыдущие действия и выполним их уже на атакующей машине (kali). Заходим на нее и запускаем терминал. Не забываем добавить openvpn в автозагрузку **systemctl enable openvpn**. Необходимо, что конфигурационный файл клиента openvpn автоматически применялся и цеплялся к серверу, для этого необходимо выполнить следующее: > nano /etc/default/openvpn Внутри данного конфига, необходимо убрать комментарий со строчки > AUTOSTART="all" Данная строчка заставляет при запуске openvpn запускать все конфиг файлы по пути /etc/openvpn/*.conf Затем, нажимаем Ctrl+X, сохраняем и выходим. Далее меняем tun на tap. > nano /etc/openvpn/server.conf В данном конфиге необходимо изменить строчку: **dev tun** на **dev tap** ![](https://i.imgur.com/9vy0SEH.png) Затем, нажимаем Ctrl+X, сохраняем и выходим. Переместим наш конфиг файл по данному пути следующей командой: **mv <путь файла с прошлого урока>/<название файла>.conf /etc/openvpn/** Для полной проверки внесенных изменений, перезагружаем машину - **reboot** (после запуска у нас автоматически должно быть подключение к openvpn server). После запуска у вас также, должен появиться tap интерфейс. ![](https://i.imgur.com/Qj9nuZP.png) На данном этапе, мы перенастроили наши интерфейсы в L2. Проверим так ли это, запустим на Kali, wireshark и пропингуем нашу аткуемую машину, wireshark должен показать arp запросы. ![](https://i.imgur.com/dUvgcmz.png) Таким образом, мы настроили наш L2 туннель. 8. На данном шаге, создадим бридж на атакумеой и через нее сможем получать и передавать трафик в сеть через транковый интерфейс. ![](https://i.imgur.com/kwpdet4.png) Для этого, нужно настроить bridge на машине внутри инфраструктуры. Заходим на нашу машину debian, в которой нам для начала нужно будет установить утилиту для создания bridge. Для этого, сначало командой **apt update** обновляем репозиторий. А затем устанавливаем данную утилиту командой - **apt install bridge-utils** Затем нужно перенастроить сетевой конфиг следующим образом: > nano /etc/network/intefaces Закоментируем настройки, которые ранее мы добавляли, так как даннные параметры будут передаваться уже в атакующую машину. #auto ens3.10 #iface ens3.10 inet static #address 192.168.10.20/24 #auto ens3.20 #iface ens3.20 inet static #address 192.168.20.20/24 Далее, ens3 перенастраиваем следующим образом (отключаем dhcp, выставляем ручную настройку) auto ens3 iface ens3 inet manual И настраиваем наш tap интерфейс также на ручную настройку. auto tap0 iface tap0 inet manual И настраиваем наш bridge интерфейс, который будет создаваться через два наших интерфейса ens3 и tap0. auto br0 iface br0 inet dhcp bridge_ports ens3 tap0 Конечный конфиг должен выглядеть следующим образом: ![](https://i.imgur.com/6s5MBcd.png) Нажимаем Ctrl+X, сохраняем и выходим. Рекомендую сразу перезагрузить машину командой **reboot**, чтобы она получила все необходимые сетевые параметры корректно (можно проверить верно ли вы прописали конфиг командой **systemctl restart networking**, если ошибок нет то все хорошо). После перезагрузки, мы должны видеть, что создался bridge. Проверим командой **ip a** ![](https://i.imgur.com/RsKETvV.png) Как мы видим, bridge появился, но есть проблема, что наш tap0 интерфейс не был помещен в bridge, забегая вперед, необходимо отметить, что данная проблема возникает из-за того, что сеть поднимается раньше, чем создается openvpn туннель, поэтому, нам нужно просто перезагрузить сеть еще раз - **systemctl restart networking**(далее мы решим эту проблему глобально). 9. Настройка атакующий машины (kali) для возможности работать со всей сетью инфраструктуры через trunk интерфейс. Переходим в нашу kali, проверяем какой адрес есть на нашем tap0 интерфейсе командой **ip a**. Как видим есть только адрес openvpn, но так как на машине в инфраструктуре уже есть клиент с bridge через который мы можем войти в инфраструктуру, то попробуем присвоить адрес из сети данной инфраструктуры. Для этого выполним команду: > **ip addr add 192.168.100.XXX/24 (XXX-удобный вам адрес машины, я указал 35) dev tap0** Попробуем проверить, можем ли достучаться до сети инфраструктурыЮ для этого выполним ping на любую из машин в сети, например 192.168.100.254. Если вы делали по инструкции, то скорее всего у вас не будет пинговаться машина. Для того, чтобы пинги проходили нужно удалить маргурт, который ранее использовался для адреса tap0. Сделаем это командой: > **ip route delete 192.168.100.0/24** После этого все должно проходить. ![](https://i.imgur.com/o1DPCaG.png) Теперь же, так как мы получили доступ к trunk интерфейсу, то мы можем, как мы показывали ранее на машине debian, создать сабинтерфейсы vlan в инфраструктуре и получить доступ ко всей инфраструктуре. Для этого, исправим конфигурацию сети на kali, следующими командами: > nano /etc/network/intefaces В сам конфиг прописываем следующие параметры: auto eth0 iface eth0 inet dhcp auto tap0 iface tap0 inet dhcp auto tap0.10 iface tap0.10 inet manual auto tap0.20 iface tap0.20 inet manual Необходимо отметить, что ручные настройки мы выставляем так как не знаем какая адресация во vlan. Конечный конфиг должен выглядеть следующим образом: ![](https://i.imgur.com/FIQScii.png) Нажимаем Ctrl+X, сохраняем и выходим. Затем перезапускаем сеть **systemctl restart networking**. Сеть должна выглядеть вот так ![](https://i.imgur.com/W0Xdfnl.png) Если вы делали все последовательно, то вы уже сейчас сможете просканировать инфраструктуру, но предварительно на наши сабинтерфесы нужно присвоить ip как мы это делали ранее - > **ip addr add 192.168.10.35/24 dev tap0.10** Проверяем доступность, например роутера, через vlan 10. Как видим, все работает. Соответственно, через данный vlan мы уже можем сканировать сеть. ![](https://i.imgur.com/ZxzlcZ5.png) 10. Автоматизация создания bridge на openvpn client. Ранее, я указывал, что есть проблема при перезапуске машины, в этом случае, openvpn туннель создается после запуска сети и bridge не пробрасывается. Для того, чтобы решить данную проблему воспользуемся возможностью openvpn выполнять определенные действие при запуске. Таким образом, openvpn после создания туннеля "заставит" перезапустить сеть. Итак, для этого нам нужно выполнить следующие действия на машине debian, что внутри инфраструктуры: > **nano /etc/openvpn/<название конфигурационного файла>.conf** Внутри конфига прописываем (перед строкой **verb3**): **script-security 2 up /etc/openvpn/up.sh** Нажимаем Ctrl+X, сохраняем и выходим. Данные строчки позволят openvpn client запускать скрипт **up.sh**, который мы сейчас создадим. **nano /etc/openvpn/up.sh** Создастся пустой файл, в него мы добавим команду рестарта сети следующим образом: **#!/bin/bash /usr/bin/systemctl restart networking.service** ![](https://i.imgur.com/o7zSqH1.png) Нажимаем Ctrl+X, сохраняем и выходим. Далее, необходимо сделать наш скрипт выполняемым, для этого выполним следующую команду - **chmod +x /etc/openvpn/up.sh** Проверим его выполнения - **/etc/openvpn/up.sh** Скрипт успешно выполняется. Если вы попытаетесь перезапустить openvpn, то у вас сеть будет иметь те же настройки, что означает, что все работает корректно. Для конечной проверки правильности настройки перезапускаем сервер командой - **reboot** После перезагрузки, видим, что все успешно отработало: ![](https://i.imgur.com/cWIbbGu.png) 11. Заключительный шаг данной работы, попробуем провести air-spoofing attack на наш vlan, для этого выполним следующую команду(предварительно мы можем просканировать диапазон **nmap**): **arpspoof -i tap0.10 -t 192.168.10.5 -r 192.168.10.254** Указываем весь диапазон. После открываем wireshark, где указываем просмотр tap0.10 интерфейса, в котором мы можем наблюдать все пакеты проходящие через машина указанного диапазона. ![](https://i.imgur.com/9KtSJjX.png) На этом урок завершен.