diff --git a/pentest/01-network/03-vpn-dmz-wifi/01-vpn/README.md b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/README.md new file mode 100644 index 0000000..00be572 --- /dev/null +++ b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/README.md @@ -0,0 +1,234 @@ +# Сетевая безопасность. Лабораторная работа №1 (HW) +## Ход работы + +Для стенда мы будем использовать 2 виртуальные машины `Ubuntu Linux 22.04`: + +| hostname | ip address | +| ----- | ----- | +| ubuntu | 192.168.103.100 | +| ubuntu2 | 192.168.103.101 | + +`ubuntu` будет использоваться в качестве сервера, а `ubuntu2` -- в качестве клиента. + +С помощью инструмента `iperf3` и замерим скорость передачи данных в условиях открытой сети. + +![alt text](img/03.png) + +Как видим, при отсутствии VPN скорость между хостами около 18 Гбит/с. + +### Настройка OpenVPN +1. Для настройки OpenVPN установим необходимые пакеты на обе машины с помощью `sudo apt install openvpn` + +`ubuntu` + +![alt text](img/01.png) + +`ubuntu2` + +![alt text](img/02.png) + +2. Настроим сервер OpenVPN на `ubuntu` + 1. Создадим каталог `/etc/openvpn/easy-rsa` и скопируем в него исполняемый файл `easy-rsa` + + ```bash + root@ubuntu:/home/marker# mkdir /etc/openvpn/easy-rsa + root@ubuntu:/home/marker# cp -R /usr/share/easy-rsa /etc/openvpn/ + root@ubuntu:/home/marker# cd /etc/openvpn/easy-rsa/ + ``` + + 2. Выполним инициализацию PKI + + ```bash + ./easyrsa init-pki + ``` + ![alt text](img/10.png) + + 3. Выпустим корневой сертификат + + ```bash + ./easyrsa build-ca + ``` + + ![alt text](img/11.png) + + 4. Сгенерируем последовательность Диффи-Хелмана (DH) + + ```bash + ./easyrsa gen-dh + ``` + + ![alt text](img/12.png) + + 5. Создадим CRL + + ```bash + ./easyrsa gen-crl + ``` + + ![alt text](img/13.png) + + 6. Сгенерируем ключ TLS-Auth + + ```bash + openvpn --genkey tls-auth /etc/openvpn/ta.key + ``` + + ![alt text](img/14.png) + + 7. Сгенерируем серверный сертификат + + ```bash + ./easyrsa build-server-full server nopass + ``` + + ![alt text](img/15.png) + + 8. Скопируем криптографическую информацию в папку `/etc/openvpn/` + + ```bash + cp ./pki/ca.crt /etc/openvpn/ca.crt + cp ./pki/dh.pem /etc/openvpn/dh2048.pem + cp ./pki/crl.pem /etc/openvpn/crl.pem + cp ./pki/issued/server.crt /etc/openvpn/server.crt + cp ./pki/private/server.key /etc/openvpn/server.key + ``` + + 9. Создадим файл `/etc/openvpn/server.conf` и наполним его следующим: + + ``` + port 1194 + # TCP or UDP server? + ;proto tcp + proto udp + dev tun + ca ca.crt + cert server.crt + key server.key # This file should be kept secret + dh dh2048.pem + server 10.8.0.0 255.255.255.0 + ifconfig-pool-persist /var/log/openvpn/ipp.txt + keepalive 10 120 + tls-auth ta.key 0 # This file is secret + cipher CHACHA20-POLY1305 + data-ciphers CHACHA20-POLY1305 + persist-key + persist-tun + status /var/log/openvpn/openvpn-status.log + verb 3 + ``` + + Таким образом мы указали, что мы будем работать по протоколу UDP на порту 1194, использовать ранее сгенерированные криптопоследовательности, а частной сетью будет `10.8.0.0/24` (у сервера будет адрес `10.8.0.1`) + + 10. Сгенерируем клиентский сертификат + + ```bash + ./easyrsa build-client-full client nopass + ``` + + ![alt text](img/16.png) + + 11. Скопируем криптографическую информацию клиента в папку `/etc/openvpn/clients/client` + ```bash + mkdir /etc/openvpn/clients + mkdir /etc/openvpn/clients/client + cp /etc/openvpn/easy-rsa/pki/ca.crt /etc/openvpn/clients/client/ + cp /etc/openvpn/ta.key /etc/openvpn/clients/client/ + cp /etc/openvpn/easy-rsa/pki/issued/client.crt /etc/openvpn/clients/client/ + cp /etc/openvpn/easy-rsa/pki/private/client.key /etc/openvpn/clients/client/ + ``` + 12. Создадим файл конфигурации клиента `/etc/openvpn/clients/client/client.conf` + ``` + client + dev tun + ;proto tcp + proto udp + remote 192.168.103.100 1194 + nobind + persist-key + persist-tun + ca ca.crt + cert client.crt + key client.key + remote-cert-tls server + tls-auth ta.key 1 + cipher CHACHA20-POLY1305 + data-ciphers CHACHA20-POLY1305 + verb 3 + ``` + 13. Папку с конфигурацией клиента и криптографической информацией передадим на машину `ubuntu2` с помощью `scp` + + `scp /etc/openvpn/clients/client/* marker@192.168.103.101:/home/marker/client` + + ![alt text](img/17.png) + + 14. Запустим сервер и клиент. + + ![alt text](img/18.png) + + 15. Проверим наличие сетевых интерфейсов. + + ![alt text](img/19.png) + +3. Проверим скорость соединения с помощью `iperf3` + + ![alt text](img/20.png) + + Мы получили среднюю скорость около 850 Мбит/c. Теперь проверим, как этот результат изменится, в случае использования TCP. + +4. Изменяем строку `proto udp` на `proto tcp` в конфигах сервера и клиента. +5. Перезапускаем сервер и клиент и проверяем скорость. + + ![alt text](img/21.png) + + Мы получили среднюю скорость в 1.1 Гбит/с. Что довольно странно, учитывая, что мы используем TCP. Я предполагаю, что дело в том, что в данном тесте мы используем одно L2 пространство, где нет маршрутизирующих устройств, а при режиме UDP OpenVPN по сути просто инкапсулирует SSL/TLS в UDP, отсюда появляется значимый оверхед, который нивелируется в реальном использовании. + + +### Настройка Wireguard + +1. С помощью `sudo apt install wireguard` установим необходимые пакеты на виртуальные машины + +`ubuntu`: + +![alt text](img/05.png) + +`ubuntu2`: + +![alt text](img/04.png) + +2. С помощью утилиты `wg genkey` сгенерируем на машинах пары приватный-публичный ключ. + +![alt text](img/06.png) + +3. Составим конфиги для машин на основании полученных пар ключей. + +![alt text](img/07.png) + +4. Запустим демонов, которые поднимут указанные интерфейсы и проверим связность по VPN интерфейсам. + +![alt text](img/08.png) + +5. Мы обеспечили связность через VPN. Теперь замерим скорость между машинами с помощью `iperf3` + +![alt text](img/09.png) + +Средняя скорость 7.7 Гбит/с. + +## Выводы + +Итак, мы получили следующие результаты: + +| VPN Protocol | Bitrate | +| ----- | ----- | +| OpenVPN (UDP) | 850 Mbps | +| OpenVPN (TCP) | 1.1 Gbps | +| Wireguard | 7.7 Gbps | + +OpenVPN в режиме TCP показал более высокую скорость, но только в рамках стенда, как показывает практика режим UDP является более предпочтительным для обеспечения большей скорости передачи. + +Wireguard обеспечивает значительно более высокую производительность благодаря своей более легковесной архитектуре, использованию более современных алгоритмов шифрования и механизмам оптимизации. + +Wireguard работает поверх протокола UDP, чем и объясняется такая скорость, а легковесная архитектура позволяет максимизировать это преимущество. + + + +**Выполнил:** Харитонов Марат Русланович, студенческий билет М235314. \ No newline at end of file diff --git a/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/01.png b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/01.png new file mode 100644 index 0000000..daeaf42 Binary files /dev/null and b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/01.png differ diff --git a/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/02.png b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/02.png new file mode 100644 index 0000000..e4dfb9a Binary files /dev/null and b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/02.png differ diff --git a/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/03.png b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/03.png new file mode 100644 index 0000000..8b927d4 Binary files /dev/null and b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/03.png differ diff --git a/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/04.png b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/04.png new file mode 100644 index 0000000..6546ab9 Binary files /dev/null and b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/04.png differ diff --git a/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/05.png b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/05.png new file mode 100644 index 0000000..c894a46 Binary files /dev/null and b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/05.png differ diff --git a/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/06.png b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/06.png new file mode 100644 index 0000000..2812f8e Binary files /dev/null and b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/06.png differ diff --git a/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/07.png b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/07.png new file mode 100644 index 0000000..7798194 Binary files /dev/null and b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/07.png differ diff --git a/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/08.png b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/08.png new file mode 100644 index 0000000..23c52e8 Binary files /dev/null and b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/08.png differ diff --git a/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/09.png b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/09.png new file mode 100644 index 0000000..5db7b1e Binary files /dev/null and b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/09.png differ diff --git a/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/10.png b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/10.png new file mode 100644 index 0000000..bb170ea Binary files /dev/null and b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/10.png differ diff --git a/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/11.png b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/11.png new file mode 100644 index 0000000..7cd755f Binary files /dev/null and b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/11.png differ diff --git a/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/12.png b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/12.png new file mode 100644 index 0000000..7bf4b18 Binary files /dev/null and b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/12.png differ diff --git a/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/13.png b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/13.png new file mode 100644 index 0000000..8475a3f Binary files /dev/null and b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/13.png differ diff --git a/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/14.png b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/14.png new file mode 100644 index 0000000..54bab7f Binary files /dev/null and b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/14.png differ diff --git a/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/15.png b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/15.png new file mode 100644 index 0000000..00dbbd7 Binary files /dev/null and b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/15.png differ diff --git a/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/16.png b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/16.png new file mode 100644 index 0000000..a03fc9d Binary files /dev/null and b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/16.png differ diff --git a/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/17.png b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/17.png new file mode 100644 index 0000000..ffa0904 Binary files /dev/null and b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/17.png differ diff --git a/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/18.png b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/18.png new file mode 100644 index 0000000..87996e3 Binary files /dev/null and b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/18.png differ diff --git a/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/19.png b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/19.png new file mode 100644 index 0000000..2164c8f Binary files /dev/null and b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/19.png differ diff --git a/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/20.png b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/20.png new file mode 100644 index 0000000..8cba4ca Binary files /dev/null and b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/20.png differ diff --git a/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/21.png b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/21.png new file mode 100644 index 0000000..1f118e3 Binary files /dev/null and b/pentest/01-network/03-vpn-dmz-wifi/01-vpn/img/21.png differ