Блокирането на VPN в Русия вече не е маловероятно събитие. В края на май 2023 година цялата руска мрежа се възпламени от съобщения на потребителите и информационните агенции за неработоспособността на VPN и подозренията за умишлена блокировка на VPN трафика (връзки: habr, securitylab, tproger). Нека настроим нашето VPN връзка да изглежда като защитена връзка HTTPS. VPN трафикът, маскиран като уеб трафик, ще бъде пропуснат през обичайния порт за уеб трафик 443. А работата на VPN сървъра на порт 443 ще бъде скрита зад работата на обикновен уеб сървър на същият порт 443. Това ще ни позволи да избегнем блокировката на VPN.

Блокиране на VPN

В съобщенията на информационните агенции (вижте връзките по-горе) се каза, че са блокирани точно връзките с OpenVPN. Също така се сблъсквах със съобщения от потребители за неработоспособност на PPTP тунели.

Видове VPN протоколи

Представям ви списък с популярните VPN протоколи:

  1. PPTP (Point-to-Point Tunneling Protocol). Това е един от най-разпространените VPN протоколи. Въпреки това, той не се смята за най-сигурния вариант, тъй като неговото криптиране може да бъде уязвимо.
  2. L2TP/IPsec (Layer 2 Tunneling Protocol/IP Security). Този VPN протокол осигурява по-високо ниво на сигурност, тъй като използва IPsec за криптиране на данните. Често се използва в комбинация с други протоколи, като PPTP.
  3. OpenVPN. OpenVPN е отворен и гъвкав VPN протокол. Предлага високо ниво на сигурност и се поддържа в различни операционни системи. Използва SSL/TLS протоколи за криптиране на данните и обмен на ключове. Това е популярен избор за много VPN услуги.
  4. SSTP (Secure Socket Tunneling Protocol). SSTP е проприетарен протокол, разработен от Microsoft. Той използва SSL/TLS за криптиране на данните и работи през TCP порт 443, което го прави по-трудно за блокиране.
  5. WireGuard. WireGuard – нов протокол за виртуална частна мрежа (VPN). Основната цел на разработката е да осигури простота, сигурност и висока производителност. Цялата комуникация се извършва чрез UDP.
  6. OpenConnect. Отворена реализация на протокола Cisco AnyConnect VPN, базирана на SSL. При настройка на работа само с TCP (по подразбиране работи с UDP), трафикът става подобен на обикновен HTTPS.

Възможности на OpenConnect VPN

Основната възможност на OpenConnect VPN, чрез която ще настройваме именно OpenConnect VPN, е възможността за маскиране на VPN трафика като обикновен уеб трафик (трафик при преглеждане на HTTPS сайтове от Интернет). Другими думи, основната възможност на OpenConnect VPN е устойчивостта срещу дълбоко пакетно инспектиране (Deep Packet Inspection, съкратено DPI) поради неотличимостта на VPN пакетите от обикновения уеб трафик.

Основни възможности на OpenConnect VPN:

  • Стабилност на дълбоко пакетно инспектиране (DPI).
  • Висока скорост на предаване на данни: можете да гледате видео от YouTube в 4K.
  • Сървърът OpenConnect VPN – под Linux.
  • Клиентско софтуерно обезпечение – за Linux, Windows, MacOS.
  • Мобилното клиентско софтуерно приложение за Android и iOS е клиент на Cisco AnyConnect.
  • Аутентификация по парола или по сертификат.
  • Лесна настройка.

Уеб сървър и VPN сървър на порт 443

Ще настроим OpenConnect VPN сървър да слуша порт 443. Така VPN трафикът ще бъде замаскиран като уеб трафик на стандартния порт 443 за уеб трафик. Много неподозрителна опция!

За да се маскира работата на OpenConnect VPN сървъра, същият порт 443 ще бъде слушан от обикновен уеб сървър (Nginx). Съвместната работа на двата сервиза на един и същи порт е възможна благодарение на три неща: Server Name Indication (SNI), High Availability Proxy (HAProxy) и DNS over HTTPS (DoH).

DNS над HTTPS (DoH)

DNS (Системата за имена на домейни) превръща домейните имена в IP адреси. По подразбиране DNS заявките и отговорите се изпращат в открит текст, в незащитен вид. И, съответно, могат да бъдат прочетени от трети страни, които следят предаванията.

DNS over HTTPS (DoH) – това е протокол за криптиране на DNS трафика, за да не може трето лице да интерпретира предаваните данни. DoH използва порт 443, който се използва и за всички останали HTTPS трафици.

Индикация наименования сервера (SNI)

TLS (Transport Layer Security) – това са протоколи за криптиране на предаваната информация, за аутентикация, цялостност и поверителност на информацията в Интернет.

Server Name Indication (SNI) – това е TLS разширение, което позволява на сървъра да хоства няколко уеб сайта с TLS поддръжка на един IP адрес, като изисква от клиентите да посочат към кой сайт искат да се свържат по време на първоначалното TLS ръкопляскане (ClientHello).

Искайки да се свържете с VPN, клиентът ще добави разширение SNI, съдържащо името на сайта vpn.yourdomain.com, в съобщението ClientHello. Искайки да се свържете с обикновен уеб сървър, клиентът ще добави разширение SNI с www.yourdomain.com в съобщението ClientHello. Без добавяне на разширение SNI, без указване на желания уеб сайт, клиентът ще бъде свързан с уеб сървър.

Във версията TLS 1.3 съдържанието на SNI разширението се криптира. Как става това? Сървърът публикува публичен ключ в известен DNS запис, който клиентът може да получи преди да се свърже. След това клиентът добавя криптираното SNI разширение в ClientHello. Сървърът, който притежава съответния частен ключ, декриптира разширението. Така криптираното SNI не може да бъде декриптирано и достъпно за трети лица.

По този начин, комбинацията от криптиран SNI с TLS 1.3 и DoH затваря една от малкото останали дупки, които позволяват наблюдение и цензура в Интернет.

Високо наличностен прокси (HAProxy)

High Availability Proxy (HAProxy) – безплатен и отворен прокси сървър и балансир на натоварването. Той ще разпределя входящия трафик към порт 443 между уеб сървъра и VPN сървъра, в зависимост от желанието на клиента да се свърже със сървъра, указан в SNI разширението.

Практическая реализация

От описания идеи сразу переходим к реализации. Блокировка VPN може да настъпи неочаквано, затова я срещаме с всички оръжия!

Виртуалният сървър не е в Русия.

На виртуален сървър ще разгърнем OpenConnect VPN сървър. Създаването на виртуален сървър извън Русия и плащането в рубли е описано в: „Виртуален (VDS/VPS) сървър извън Русия“ (четете само един раздел).

Име на домейн

За да активирате HTTPS за OpenConnect VPN, ни е необходимо домейнно име. Аз предпочитам да регистрирам домейнно име в https://www.namecheap.com/. Тук има достъпни цени за домейни и безплатна пожизнена защита на личните данни в Whois. Тази защита скрива личната информация в публичната база данни на Whois и помага да се избегне спам. Всичко е добре, но не приемат руски банкови карти за плащане.

Пренасочване на DNS

След като сте регистрирали домейна, трябва да настроите DNS записите, за да посочите към кой IP адрес трябва да се пренасочва домейна. За целта ще създадем две DNS записи.

Първата запис с тип А, в полето host посочваме символа @, а в стойността на записа – публичният IP адрес на виртуалния сървър. Символът @ се използва за пренасочване на кореновия домейн, т.е. yourdomain.com, към IP адреса.

Втората запис е също с тип А, в полето host посочваме *, а в стойността на записа – отново публичният IP адрес на виртуалния сървър. Символът * се използва за пренасочване на всички поддомейни към IP адреса.

Създаване на DNS записи с тип А

Имайте предвид, че за да влязат в сила новите DNS записи, трябва да изчакате известно време.

DNS над HTTPS

Настройваме сигурен DNS (DNS over HTTPS), за да няма „изтичане“ към vpn.yourdomain.com или към www.yourdomain.com, към които ще се свържем. Настройваме го както на виртуален сървър, така и на компютъра, от който ще се свързваме към виртуалния сървър. Подробно ръководство: „DNS over HTTPS. Настройка в Linux (Debian) и Windows„.

Уеб сървърът Nginx

На виртуален сървър ни е необходим уеб сървър за маскиране на порт 443 на OpenConnect VPN сървъра. Инсталирането и настройката на уеб сървъра Nginx са описани в: „Инсталиране и настройка на Nginx“ (четете само един раздел).

Резултатът трябва да бъде виртуален хост www.yourdomain.com с инсталиран сертификат.

Виртуален хост vpn.yourdomain.com и TLS сертификат.

TLS сертификат – това е модерна версия на SSL сертификат. Тъй като SSL (Secure Sockets Layer) протоколът е остарял и е заменен с по-модерен и сигурен протокол TLS (Transport Layer Security). И SSL сертификатите се наричат обикновено TLS сертификати, тъй като използват TLS протокола за установяване на защитена връзка с уебсайта и криптиране на предаваните данни.

Създаваме конфигурационен файл /etc/nginx/sites-available/vpn.yourdomain.com.conf:

touch /etc/nginx/sites-available/vpn.yourdomain.com.conf

И добавяме следното съдържание във файла:

server {
      listen 80;
      server_name vpn.yourdomain.com;

      root /var/www/ocserv/;

      location ~ /.well-known/acme-challenge {
         allow all;
      }
}

Създаваме символична връзка:

ln -s /etc/nginx/sites-available/vpn.yourdomain.com.conf /etc/nginx/sites-enabled/vpn.yourdomain.com.conf

Създаваме основната уеб директория /var/www/ocserv/:

mkdir -p /var/www/ocserv

-p – опция, която указва, че ако е необходимо, да се създават промежуточни директории, за да се достигне указаният път.

Рестартираме уеб сървъра Nginx, за да започне да работи виртуалният хост vpn.yourdomain.com:

nginx -s reload

Стартираме Certbot, за да получим TLS сертификат от Let’s Encrypt:

certbot certonly --webroot --agree-tos -d vpn.yourdomain.com -w /var/www/ocserv --register-unsafely-without-email

certonly – получете TLS сертификат, но не го инсталирате.

--webroot – специален плъгин, който помага да се получи TLS сертификат, ако на сървъра работи уеб сървър, който слуша портове 80 и 443.

--agree-tos – приемам условията за ползване на Let’s Encrypt.

-d vpn.yourdomain.com – TLS сертификат ще принадлежи на домейна vpn.yourdomain.com.

-w /var/www/ocserv – пътят към основната уеб директория /var/www/ocserv/.

--register-unsafely-without-email – получете TLS сертификат без да посочвате имейл адрес (email).

Получаване на TLS сертификат от Lets Encrypt

Ура! Получен TLS сертификат. Това са два файла: /etc/letsencrypt/live/vpn.yourdomain.com/fullchain.pem и /etc/letsencrypt/live/vpn.yourdomain.com/privkey.pem.

OpenConnect VPN

По подразбиране, сървърът за виртуални частни мрежи (VPN) OpenConnect слуша порт 443 за TCP и UDP протоколите. Но същият порт 443 вече се използва от уеб сървъра Nginx за TCP протокола. За да настроим и проверим работата на OpenConnect VPN на порт 443, временно ще спрем уеб сървъра. В следващия раздел на статията ще настройваме едновременната работа на уеб сървъра и VPN сървъра на порт 443.

На виртуален сървър спираме Nginx уеб сървъра:

nginx -s stop

След това, на виртуалния сървър трябва да инсталираме и настроим OpenConnect VPN сървъра. А на компютъра, от който ще се свързваме към VPN, трябва да инсталираме VPN клиента. Следваме инструкциите от „OpenConnect VPN. Подробно ръководство„.

VPN сървър и Nginx едновременно на порт 443 с помощта на HAProxy

Порт 443 ще бъде слушан от прокси-сървърът HAProxy. Чрез използване на функцията SNI (Server Name Indication) в TLS, прокси-сървърът HAProxy ще разпознава трафика на VPN и обикновения HTTPS трафик. Когато vpn.yourdomain.com се появи в клиентското TLS Hello, прокси-сървърът HAProxy ще пренасочва трафика към OpenConnect VPN сървъра. Когато www.yourdomain.com се появи в клиентското TLS Hello, прокси-сървърът HAProxy ще пренасочва трафика към уеб-сървъра Nginx. Ако клиентът не предостави името на сървъра в клиентското TLS Hello, тогава HAProxy ще пренасочва трафика към уеб-сървъра Nginx.

Нека започнем с настройките. Редактираме конфигурационния файл на OpenConnect VPN сървъра /etc/ocserv/ocserv.conf.

OpenConnect VPN сървърът ще получава връзки от прокси-сървъра HAProxy, който поддържа Proxy протокола. За да VPN сървърът да получава правилни клиентски адреси, разкоментираме следния ред:

#listen-proxy-proto = true

За да тази линия да изглежда така:

listen-proxy-proto = true

OpenConnect VPN сървърът ще приема връзки на IP адрес 127.0.0.1. За тази цел, намираме реда:

#listen-host = [IP|HOSTNAME]

И привеждаме я във вид:

listen-host = 127.0.0.1

Запазваме конфигурационния файл и рестартираме OpenConnect VPN сървъра:

systemctl restart ocserv
Блокиране на VPN. OpenConnect VPN сървър на локалния адрес 127.0.0.1.

Редактираме конфигурационния файл на Nginx уеб сървъра /etc/nginx/sites-available/www.yourdomain.com.conf.

Nginx уеб сървърът ще приема връзки на IP адрес 127.0.0.2:443. За тази цел, намираме реда:

listen 443 ssl;

И променяме я на следния ред:

listen 127.0.0.2:443 ssl;

Запазваме конфигурационния файл.

Редактираме основния конфигурационен файл на Nginx уеб сървъра, който се нарича /etc/nginx/nginx.conf.

Ще използваме само TLS 1.3 протокол. Затова ще деактивираме предишните версии на TLS протокола. За тази цел, намираме реда:

ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;

И я променяме реда на:

ssl_protocols TLSv1.3;

Запазваме конфигурационния файл и стартираме Nginx уеб сървъра:

nginx
Блокиране на VPN. Nginx уеб сървър на локалния адрес 127.0.0.2.

Остава да инсталираме и настроим HAProxy прокси-сървър. Извършваме инсталацията:

apt install haproxy

На края на конфигурационния файл на прокси-сървъра /etc/haproxy/haproxy.cfg добавяме следния текст:

frontend https
   bind 12.34.56.78:443
   mode tcp
   tcp-request inspect-delay 5s
   tcp-request content accept if { req_ssl_hello_type 1 }

   use_backend ocserv if { req_ssl_sni -i vpn.yourdomain.com }
   use_backend nginx if { req_ssl_sni -i www.yourdomain.com }
   use_backend nginx if { req_ssl_sni -i yourdomain.com }

   default_backend nginx

backend ocserv
   mode tcp
   option ssl-hello-chk
   server ocserv 127.0.0.1:443 send-proxy-v2

backend nginx
   mode tcp
   option ssl-hello-chk
   server nginx 127.0.0.2:443 check

където 12.34.56.78 е публичният IP адрес на виртуалния сървър. Ако сървърът е задраскан зад маршрутизатор, тогава се посочва локалният IP адрес на сървъра.

Запазваме конфигурационния файл и рестартираме прокси-сървъра HAProxy:

systemctl restart haproxy

Грешките на прокси-сървъра HAProxy може да се наблюдават във файлът /var/log/haproxy.log.

Всичко е готово! Стартирайте VPN клиента и проверете връзката с VPN сървъра vpn.yourdomain.com. Ако въведете www.yourdomain.com в адресната лента на браузъра, уеб сървърът трябва вече да предостави желаната уеб страница.

Заключения

Мисля, че блокирането на VPN в Русия накрая ще се случи. Това е само въпрос на време. А за тези, които жизнено се нуждаят от застраховка, е написана тази статия.

Моля, задавайте всички въпроси в коментарите под статията.

Коментари

Вашият коментар

Этот сайт защищен reCAPTCHA, и к нему применяются Google Политика конфиденциальности и Условия использования.

Sign In

Register

Reset Password

Please enter your username or email address, you will receive a link to create a new password via email.