# Сетевая безопасность. Лабораторная работа №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.