Поднимаем VPN на VPS. Часть 4. Настройка OpenVPN

Поднимаем VPN на VPS. Часть 4. Настройка OpenVPN

Шифропанк


VPN (Virtual Private Network) — виртуальная частная сеть. Технология, которая обеспечивает зашифрованное соединение поверх вашего интернет-соединения т.е это своего рода защищенный туннель, который связывает напрямую ваш компьютер и удаленный сервер. На данный момент наше интернет соединение выглядит следующим образом:


Как видите, у провайдера есть контент-фильтр, который просматривает весь ваш трафик. Фактически ваша точка выхода в интернет – это внешние маршрутизаторы вашего провайдера. Именно тут принимается решение какие ресурсы вам можно посещать, а какие нет.

После того, как мы настроим и запустим наш VPN-сервер, весь трафик, от клиента и до VPS хостинга, будет зашифрован и направлен в "тунель", минуя интернет-провайдера.


Теперь никто не знает, что содержится в трафике между нашими устройствами и нашим VPN сервером, весь трафик надёжно зашифрован. Фактически теперь наша точка выхода в интернет – это наш VPS. Именно его IP-адрес будут видеть все те интернет-ресурсы, на которые мы будем заходить. Но если кто-то сможет получить доступ к вашему VPS, то он узнает содержимое вашего трафика. Но правительству нашей страны это будет сделать крайне сложно. Наш VPS находится в другой стране и надавить на хостера не получится. Нужно затевать полноценное расследование, привлекать международные соглашения, Интерпол, направлять обоснованный (причем обоснованный с точки зрения законодательства страны хостера) запрос. Так что если вы не натворите чего-нибудь совсем плохого, никто ничего и не получит. Единственное, что от вас требуется: аккуратное обращение с ключами и паролями.


Все настройки выполнены на yourserver.se под Debian 8 (на других дистрибутивах настройки идентичны)


Установка сервера OpenVPN

Для начала нам нужно установить 2 пакета OpenVPN и easy-rsa.

apt install openvpn easy-rsa

Затем создаем директорию где будем генерировать ключи и перемещаемся в нее

mkdir etc/openvpn/easy-rsa && cd etc/openvpn/easy-rsa

Теперь нужно скопировать нужные файлы из easy-rsa в папку которую мы только что создали

cp -r /usr/share/easy-rsa/* /etc/openvpn/easy-rsa

Далее настраиваем переменные центра сертификации

nano vars

Для этого отредактируем некоторые строки файла vars (можно использовать стандартные значения , но не следует оставлять их пустыми). Меняем значения в кавычках на свои.

export KEY_COUNTRY="US"

export KEY_PROVINCE="CA"

export KEY_CITY="SanFrancisco"

export KEY_ORG="Fort-Funston"

export KEY_EMAIL="me@myhost.mydomain"

export KEY_OU="MyOrganizationalUnit"

. . .

export KEY_NAME="server"

После этого создаем центр сертификации

На все вопросы отвечаем нажатием Enter

source vars
./clean-all
./build-ca

Далее создаем ключ для сервера. На все вопросы также отвечаем нажатием Enter

./build-key-server server

Теперь мы создадим ключ Диффи-Хелмана. Этот ключ защитит наш трафик от расшифровки даже в случае похищения ключей сервера и клиентов. Т.е. если кто-то записывал весь ваш шифрованный трафик, а потом он вдруг заполучит все ваши ключи, то он всё равно не сможет расшифровать тот трафик, который у него записан.

./build-dh

Генерация ключа может занять несколько минут, все зависит от мощности процесора вашего сервера.

Генерируем ключ для TLS-аутентификации:

openvpn --genkey --secret keys/ta.key

Теперь все готово и можно создавать сертификат и пару ключей для первого клиента

source vars
./build-key client1

где "client1" имя клиента на ваш выбор.


Настройка сервиса OpenVPN

Теперь нужно скопировать наши ключи в директорию /etc/openvpn Переходим в папку keys/

cd keys/

здесь лежат все ключи и сертификаты, что мы делали.

Копируем файлы и сделаем текущей папку VPN-сервера

cp ca.crt ca.key dh2048.pem server.crt server.key ta.key /etc/openvpn && cd /etc/openvpn

Затем в папке сервера (/etc/openvpn) создаем файл конфигурации сервера

nano server.conf

Содержимое файла будет следующее:

port 443

proto udp

dev tun

ca ca.crt

cert server.crt

key server.key

dh dh2048.pem

server 10.8.0.0 255.255.255.0

ifconfig-pool-persist ipp.txt

push "redirect-gateway def1 bypass-dhcp"

push "dhcp-option DNS 208.67.222.222"

push "dhcp-option DNS 208.67.220.220"

keepalive 10 120

tls-auth ta.key 0

key-direction 0

cipher AES-256-CBC

auth SHA256

comp-lzo

user nobody

group nogroup

persist-key

persist-tun

status openvpn-status.log

log /dev/null

verb 3

OpenVPN по умолчанию работает на порту 1194 (можете его и поставить), я же советую оставить 443 т.к VPN будет использоваться не только на домашнем компьютере/ноутбуке, но и на смартфоне. И вполне возможно, что ваше устройства окажется в сети (например, корпоративный Wi-Fi), где все порты кроме самых базовых запрещены. 443 точно будет разрешен. Но можно выбрать другой порт. Желательно использовать распространенные порты, изначально предназначенные для зашифрованного соединения

HTTPS 443

POP3S 995

SMTPS 465

IMAPS 993

IMAP4 585

Менее предпочтительны распространенные порты, не предназначенные для зашифрованного соединения

HTTP 80 (дополнительный 8080)

POP3 110

SMTP 25

IMAP 143

IMAP3 220

Порты, используемые Apple Podcast Capture

HTTPS 8170

HTTP 8171

Поискать подходящие порты можно по этим ссылкам

https://ru.adminsub.net/tcp-udp-port-finder/imap

https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml


Далее настраиваем сетевую конфигурацию сервера

nano /etc/sysctl.conf

Для этого раскомментируем одну строку

net.ipv4.ip_forward=1

Чтобы применить настройки к текущей сессии выполняем команду

sysctl -p


Настройка правил фаервола

Для маскарадинга соединений клиентов нужно настроить правила фаервола

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o venet0 -j MASQUERADE

и сохраним эти настройки командой:

iptables-save

Теперь пробуем запустить сервер OpenVPN, указав имя файла конфигурации (/etc/openvpn/server.conf) в качестве переменной (@server) в конце имени юнита systemd, и проверяем результат

systemctl start openvpn@server

Проверяем, что запустился

systemctl status openvpn

В выдаче должна присутствовать строка зеленого цвета

Active: active (running)

Если выдаст active (exited) – это нормально


Далее проверяем доступность интерфейса OpenVPN

ip addr show tun0

Выдача должна содержать подобные строки

3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100

link/none

inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0

valid_lft forever preferred_lft forever

Если никаних проблем не возникло, то задаем автоматическую активацию сервиса при загрузке сервера

systemctl enable openvpn@server


На этом настройки сервера закончены и мы имеем рабочий Openvpn сервер. Осталось настроить клиенты для подключения, но об этом в следующей статье.


Предыдущая часть (Часть 3. Настройка SSH (вход по сертификату))

Следующая часть (Часть 5. Настройка клиентов)


Больше информации об анонимности и безопасности личных данных в сети на канале Шифропанк