Поднимаем 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. Настройка клиентов)
Больше информации об анонимности и безопасности личных данных в сети на канале Шифропанк
Поддержать канал
Bitcoin: bc1qx07rnee8n78k3tac0ra690309ujyjg7hnkeu0v
Ethereum: 0xf9FCac64C6510A7DB29706f903d38FB532dfbDc0
Litecoin: LPdVENDq5ataHCqRrQnEEemVqFQmJ7aUqJ
DASH: XeLtyRNnMET2nF1gRApzBWzFoN15C2tWgj
Zcash: t1acDtEboR4oPPmAPKADNQ3tyoU11KdpqEZ
Monero: 487g4zkuCVE5n4a9pDeHLSdNCwp3nCMhp4Ki1T5UkBpWG1mVcB9ghmoUmjGXisSNaKiLhpVqZSNhvGsv3trszHhnSpW6nR5