# Практика №5-6. OpenVPN L2-3 - туннелирование ## Построить инфраструктуру в системе EVE-NG (есть возможность ее импортировать) Для работы был скачан образ pnet-lab не требующий импорта. Образ был успешно разархивирован и запущен в vmware. ![](https://i.imgur.com/PZdgk5n.jpg) Далее в редакторе была построена инфраструктура организации. - Kali Linux - Linux Kali 2022 (2CPU, 2GB RAM) - pfSense - PfSense Firewall 2.6.0, default config (Qemu version 4.1.0, 2CPU, 2GB RAM, Primary Console VNC) - Switch - Cisco IOL-L2-ADVIPSERVICESK9 (2 port-groups) - Debian - Linux Debian 10 (1CPU, 1GB RAM) - Linux-vulnerable - Linux Debian 10 (1CPU, 1GB RAM) - Win-10 - Windows 10 (full) (2CPU, 2GB RAM) - Win-7 - Windows 7 (full) (QEMU 2.12, 4CPU, 4GB RAM) - Network: - Pfsense Default config (WAN-DHCP, LAN - static IP) - Internet - Cloud-1 - VLAN-10 - 172.16.10.0/24, GW 172.16.10.254 - VLAN-20 - 172.16.20.0/24, GW 172.16.20.254 ![](https://hackmd.io/_uploads/HkP1BjoE3.jpg) :::spoiler Switch config ``` version 15.2 service timestamps debug datetime msec service timestamps log datetime msec no service password-encryption service compress-config ! hostname Switch ! boot-start-marker boot-end-marker ! ! ! no aaa new-model ! ! ! ! ! ! ! ! ip cef no ipv6 cef ! ! ! spanning-tree mode pvst spanning-tree extend system-id ! vlan internal allocation policy ascending ! ! ! ! ! ! ! ! ! ! ! ! ! ! interface Ethernet0/0 description Debian switchport trunk encapsulation dot1q switchport mode trunk ! interface Ethernet0/1 description Linux-Vulnerable switchport mode access ! interface Ethernet0/2 description win-7 switchport access vlan 10 switchport mode access ! interface Ethernet0/3 ! interface Ethernet1/0 description win-10 switchport access vlan 20 switchport mode access ! interface Ethernet1/1 ! interface Ethernet1/2 ! interface Ethernet1/3 ! ip forward-protocol nd ! ! no ip http server no ip http secure-server ! ! ! ! ! control-plane ! ! line con 0 logging synchronous line aux 0 line vty 0 4 login ! ! end ``` ::: :::spoiler Настройка файервола ``` WAN (wan) -> vtnet0 -> v4/DHCP4: 192.168.19.163/24 LAN (lan) -> vtnet1 -> v4: 172.16.1.1/24 OPT1 (opt1) -> vtnet1.10 -> v4: 172.16.10.254/24 OPT2 (opt2) -> vtnet1.20 -> v4: 172.16.20.254/24 ``` Настроенные VLAN ![](https://i.imgur.com/KcDS8r7.jpg) На дефолт vlan ![](https://i.imgur.com/6b8Lkq4.jpg) На vlan10 ![](https://i.imgur.com/bfCFrDz.jpg) На vlan20 ![](https://i.imgur.com/Sl8MHkB.jpg) Настройка правил фаерволла для созданных vlan ![](https://i.imgur.com/ySuq2vJ.jpg) ![](https://i.imgur.com/RqxHEFM.jpg) ::: ## Настроить каждое устройство в соответсвии со следующими параметрами ### Kali-2021, Win-7, Win-10, Debian - получение адреса DHCP pfSense выступает в роли DHCP сервера и выдает ip для машин. ### Настройка Kali Получение ip по DHCP ![](https://i.imgur.com/qiyRuP5.jpg) Нужно отредактировать пароль пользователя root, чтобы в последствии возможно было подключаться от root. `sudo passwd root` ![](https://i.imgur.com/PQWGRXh.jpg) *пароль был поставлен такой же, как и от юзер акка* #### Настройка OpenVPN Скачиваем скрипт по развертыванию сервера `curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh chmod +x openvpn-install.sh` Потом запускаем его `./openvpn-install.sh`. Меняем public IPv4 address так, чтобы он совпадал с нашим основным ip. ![](https://hackmd.io/_uploads/SkCSQTL4n.jpg) Далее оставляем все по умолчанию. Называем клиента client ![](https://hackmd.io/_uploads/SJPkVpL4n.jpg) Время править конфиг. В конфиге сервера `nano /etc/openvpn/server.conf` правим следующие строки: ``` dev tun1 #Для уровня L3 dev tap #Для уровня L2 server 10.8.1.0 255.255.255.0 #push "dhcp-option DNS 94.140.14.15" #push "dhcp-option DNS 94.140.14.15" #push "redirect-gateway def1 bypass-dhcp" ``` Интерфейс и подсеть были исправлены, дабы избежать конфликтов с SSH настройками. DNS должен быть от файервола, а не от OpenVPN сервера, и дефолт-гейтвеем должен быть pfsense. ![](https://hackmd.io/_uploads/Byi-Sa8E3.jpg) ### Win-7 ![](https://i.imgur.com/rrOIbwj.jpg) ### Win-10 ![](https://i.imgur.com/ajapyAk.jpg) ### Debian *dhclient, чтобы он запросил IP у DHCP сервера* `apt install bridge-utils` `nano /etc/network/interfaces` ![](https://i.imgur.com/UyBNl4P.jpg) После - ребутнуть либо через `systemctl restart networiking`, либо всю машину целиком ![](https://i.imgur.com/7B2Gq3H.jpg) *dhclient, чтобы он запросил IP у DHCP сервера* `apt update` `apt install openvpn` Забираем сгенерированный конфиг через `scp root@192.168.19.165:/home/user/client.ovpn ./client.conf` ![](https://hackmd.io/_uploads/SJOXD6I42.jpg) Правим конфиг: ``` dev tap #Для уровня L2 #explicit-exit-notify #ignore-unknown-option block-outside-dns #setenv opt block-outside-dns # Prevent Windows 10 DNS leak ``` Explicit-exit-notify. В режиме клиента, при выходе/перезапуске, эта опция указывает серверу немедленно закрыть объект экземпляра клиента, а не ждать таймаута. Ignore-unknown-option (игнорирует ошибку https://community.openvpn.net/openvpn/ticket/570?cversion=0&cnum_hist=1) block-outside-dns (запрещает все dns запросы, которые пытаются идти в обход туннеля). Подробнее про большинство настроек конфига: https://github.com/OpenVPN/openvpn/blob/master/sample/sample-config-files/client.conf ![](https://hackmd.io/_uploads/ryVHOa842.jpg) Перемещаем конфиг в нужную директорию `mv client.conf /etc/openvpn/` ### Linux-vulnerable *dhclient, чтобы он запросил IP у DHCP сервера* `apt update` `apt install openvpn` Забираем сгенерированный конфиг через `scp root@192.168.19.165:/home/user/client.ovpn ./client.conf` ![](https://hackmd.io/_uploads/SJOXD6I42.jpg) Правим конфиг: ``` #explicit-exit-notify #ignore-unknown-option block-outside-dns #setenv opt block-outside-dns # Prevent Windows 10 DNS leak ``` Explicit-exit-notify. В режиме клиента, при выходе/перезапуске, эта опция указывает серверу немедленно закрыть объект экземпляра клиента, а не ждать таймаута. Ignore-unknown-option (игнорирует ошибку https://community.openvpn.net/openvpn/ticket/570?cversion=0&cnum_hist=1) block-outside-dns (запрещает все dns запросы, которые пытаются идти в обход туннеля). Подробнее про большинство настроек конфига: https://github.com/OpenVPN/openvpn/blob/master/sample/sample-config-files/client.conf ![](https://hackmd.io/_uploads/ryVHOa842.jpg) Перемещаем конфиг в нужную директорию `mv client.conf /etc/openvpn/` ## L3 Туннелирование ~~Выставить в /etc/openvpn/server.conf dev tun1~~ Первым делом подключаемся с Linux по vpn к Кали `openvpn /etc/openvpn/client.conf` ![](https://hackmd.io/_uploads/SkC55pLN2.jpg) Проверяем, что с Кали идет пинг на Linux ![](https://hackmd.io/_uploads/SyOEiaUVh.jpg) Добавляем маршрутизацию для туннеля vpn `sudo nano /etc/openvpn/ccd/client` ![](https://hackmd.io/_uploads/SJajjp84h.jpg) ### Настройка Linux Теперь пропишем правило, которое будет менять ip Kali на ip Linux'a. Чтобы при взаимодействии другие устройства понимали, куда отправлять пакеты. `iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE` Также необходимо отредактировать `nano /etc/sysctl.conf`, чтобы пакеты могли передаваться между интерфейсами Linux'a ![](https://i.imgur.com/y55JBLc.jpg) `sysctl -p` чтобы сохранить ### Настройка Kali Также необходимо прописать маршруты в ip route, чтобы пакеты *уходили* в нужную сторону. ``` ip route add 172.16.1.0/24 dev tun1 ip route add 172.16.10.0/24 dev tun1 ip route add 172.16.20.0/24 dev tun1 ``` ![](https://hackmd.io/_uploads/HyuX268V3.jpg) ### Проверка Kali может пропинговать win-7 (`172.16.10.5`) и зайти в админ панель pfsense. Однако, в админ панели отображается, что вход был выполнен с устройства `172.16.1.13`, что является айпишником Linux'a. ![](https://hackmd.io/_uploads/SyN5pT8E3.jpg) ![](https://hackmd.io/_uploads/BkmJAa8Nn.jpg) ## L2 Туннелирование ~~Выставить в /etc/openvpn/server.conf dev tap~~ Первым делом подключаемся с Debian по vpn к Кали `openvpn /etc/openvpn/client.conf` ![](https://hackmd.io/_uploads/ByS_8AIE2.jpg) Потом объединяем `tap0` интерфейс в bridge `brctl addif br0 tap0` ![](https://i.imgur.com/ynKxBfi.jpg) Теперь можно на Кали запросить ip по DHCP `dhclient tap0` и быть *легитимным* участником чужой сети. ![](https://hackmd.io/_uploads/r1SJPR8Vn.jpg)