OpenVPN — это программный комплекс, позволяющий защитить от «прослушки» интернет-трафик пользователя, обеспечивая зашифрованную передачу данных от устройства клиента до сервера с установленным OpenVPN. Отлично подходит при использования публичных wifi точек доступа, где информация может быть перехвачена третьими лицами. Или в случае, когда ваш ip заблокирован на определённом сайте и нужно безопасно обойти это ограничение.
Помимо установки и настройки ОпенВПН на сервере, необходимо уметь настроить клиент для доступа с компьютера, где в качестве операционной системы будет использоваться Windows.
Установка необходимых компонентов
Используя стандартный менеджер пакетов, установим openvpn.
# aptitude install openvpn
Создание сертификатов
ОпенВПН в обязательном порядке требует генерации сертификатов для сервера и клиентов. Это и логично, ведь соединение от клиента до сервера должно быть зашифровано.
Перейдите в папку openvpn:
# cd /etc/openvpn
Генерировать ключи мы будем с помощью easy-rsa.
Создаём папку с конфигурационными файлами и ссылками на скрипты генерации сертификатов:
# make-cadir rsa # cd rsa
Откройте конфигурационный файл vars и измените параметры:
export KEY_COUNTRY=’US’ export KEY_PROVINCE=’CA’ export KEY_CITY=’SanFrancisco’ export KEY_ORG=’Fort-Funston’ export KEY_EMAIL=’me@myhost.mydomain’
KEY_COUNTRY — укажите код страны (RU, UA и т.д.), KEY_PROVINCE — данный пункт не актуален, если вы не проживаете в США. 🙂 Можно заменить на XX, KEY_CITY — ваш город, где вы проживаете, KEY_EMAIL — адрес вашей электропочты.
А также раскомментируйте строку export KEY_CN, в качестве значения для которой укажите имя сервера:
export KEY_CN=’example.com’
Все переменные заполняются латиницей.
Сохраните файл и запустите его выполнение:
# . vars
Затем запустите удаление старых сертификатов:
# ./clean-all
Создайте корневой сертификат:
# ./build-ca
Если при генерации корневого сертификата вы получите ошибку error:0E065068:configuration file routines:STR_COPY:variable has no value:conf_def.c:618:line 198, добавьте в файл vars строку:
export KEY_ALTNAMES=’something’
А после заново выполните предыдущие команды: . vars, ./clean-all, ./build-ca.
Следующий шаг — создание ключа и сертификата сервера.
# ./build-key-server server
После чего создайте сертификат и ключ для клиента:
# ./build-key client
Обратите внимание: для каждого клиента следует генерировать собственные сертификат и ключ. Нужно лишь указывать разные имена (вместо client) и изменять пути к ним в конфигурационных файлах. При этом, вы можете защитить ключи клиентов паролем, для этого используйте команду build-key-pass вместо build-key.
Далее нужно создать ключ Диффи-Хеллмана для возможности использования Forward Secrecy:
# ./build-dh
И ключ для tls-аутентификации:
# openvpn —genkey —secret /etc/openvpn/ta.key
Теперь необходимо скопировать серверные сертификаты и ключи в папку настроек OpenVPN:
# cp keys/ca.crt keys/server.crt keys/server.key keys/dh2048.pem /etc/openvpn/
А также выставить на них права, разрешающие чтение и изменение только для их владельца.
# chmod 0600 /etc/openvpn/ca.crt /etc/openvpn/server.crt /etc/openvpn/server.key /etc/openvpn/dh2048.pem /etc/openvpn/ta.key
Обязательно скопируйте себе на компьютер, например, на рабочий стол, из папки keys ключи, необходимые для подключения клиента: client.crt, client.key, ca.crt, ta.key.
На этом процесс подготовки сертификатов закончен.
Настройка сервера
В каталоге /usr/share/doc/openvpn/ располагается файл-пример для настройки сервера Openvpn. Скопируйте его в каталог /etc/openvpn/ и разархивируйте:
cd /etc/openvpn,cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/,gunzip server.conf.gz
Теперь рассмотрим необходимые для работы openvpn параметры.
Порт, на котором Openvpn будет принимать соединения. По-умолчанию, 1194. Рекомендую изменить его в целях сокрытия. Можно даже замаскировать опенвпн под Web-сервер, указав порт 80.
port 20100
Прописываем пути к файлам сертификатов и ключа сервера.
ca ca.crt cert server.crt key server.key
Путь к ключу Диффи-Хеллмана.
dh dh2048.pem
Могут быть указаны как пути относительно каталога /etc/openvpn (если файлы размещены в нём), так и абсолютные.
Находим и раскомментируем строку:
push ‘redirect-gateway def1 bypass-dhcp’
Она нужна для возможности выхода в интернет через сервер ОпенВПН. Если её не раскомментировать, то будут доступны лишь компьютеры внутри сети.
Также нужно указать dns-серверы для подключающихся клиентов.
push ‘dhcp-option DNS 213.183.57.55’ push ‘dhcp-option DNS 87.98.175.85’
В зависимости от местоположения сервера, можно подобрать другие dns-серверы, например, на проекте OpenNIC.
Далее находим и раскомментируем параметр tls-auth.
tls-auth ta.key 0
Внимание! В настройках клиента последняя цифра этого параметра должна быть заменена на 1 — tls-auth ta.key 1.
Чуть ниже в конфигурационном файле следует перечисление доступных шифров. Раскомментируйте шифр AES-128-CBC.
cipher AES-128-CBC # AES
При необходимости, его можно заменить на AES-256-CBC. В конфигурационном файле клиента шифр должен быть идентичен серверному шифру.
Также добавьте параметр auth. По-умолчанию, для аутентификации используются ключи sha1 длиной 160 бит, но алгоритм sha1 признан уязвимым. При указании нижеследующего параметра будут использоваться ключи SHA512 длиной 512 бит.
auth SHA512
А также параметр tls-version-min, который определяет используемую версию tls. В данном случае, последнюю версию 1.2:
tls-version-min 1.2
OpenVPN не следует запускать от имени root. Поэтому раскомментируйте строки:
user nobody group nogroup
Не лишним будет включение логов для OpenVPN. Особенно, на первых порах использования после настройки для поиска ошибок и т.д.
log /var/log/openvpn.log
Все остальные параметры конфигурационного файла /etc/openvpn/server.conf оставьте со значениями по-умолчанию. На этом настройка сервера OpenVPN закончена.
Активируйте openvpn командой:
# systemctl enable openvpn
И перезапустите:
# service openvpn restart
Также нелишним будет проверить лог на наличие ошибок.
Перенаправление трафика через OpenVPN
Чтобы иметь возможность выхода в интернет через сервер опенвпн, необходимо кое-что сделать для этого.
1. Настроить sysctl
В консоли запустите команду:
# sysctl net.ipv4.ip_forward
Если вывод команды будет равным net.ipv4.ip_forward = 1, то изменять что-либо не требуется. Если же значение переменной будет равно 0, то в файл /etc/sysctl.conf нужно добавить строку:
net.ipv4.ip_forward = 1
И перезагрузить правила командой:
# sysctl -p
2. Настроить iptables
Поочерёдно выполните в консоли следующие команды:
# iptables -A FORWARD -i eth0 -o tun0 -m state —state ESTABLISHED,RELATED -j ACCEPT # iptables -A FORWARD -s 10.8.0.0/24 -o eth0 -j ACCEPT # iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
Таким образом, мы разрешим пропускать трафик через сервер OpenVPN для подсети 10.8.0.0 в рамках уже установленных соединений.
Если клиенту openvpn нужно присвоить определённый внешний ip адрес сервера, то вместо последней команды из списка предыдущих для iptables, необходимо выполнить эту:
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT —to-source 127.0.0.1
Где после параметра —to-source следует указать внешний ip сервера.
OpenVPN клиент на Windows
Приступаем к настройке Openvpn клиента на Windows. Здесь всё просто: скачиваем клиент с официального сайта, устанавливаем, создаём конфигурационный файл и запускаем.
Стоит отметить, что запускать опенвпн на Windows следует с правами администратора, если активен контроль учётных записей.
Если вы не меняли путь установки, то примеры конфигурационных файлов на вашем ПК располагаются в каталоге C:\Program Files\OpenVPN\sample-config. Скопируйте отсюда файл client.ovpn и поместите его в каталог C:\Program Files\OpenVPN\config.
Помните о созданных для клиента сертификатах? Их тоже следует скачать с сервера и скопировать в этот каталог.
Откройте конфигурационный файл client.ovpn и найдите параметр remote my-server-1 1194. Вместо my-server укажите ip или доменное имя вашего сервера. Затем порт, который мы изменили ранее. В итоге строка может выглядеть так:
remote 192.168.0.1 20100
Далее нужно указать пути к сертификатам, которые вы сгенерировали на сервере. Для каждого клиента создаётся ключ с уникальным именем, который следует указывать ниже, вместо client.
ca ca.crt cert client.crt key client.key
Также следует раскомментировать параметр, который указывает путь к tls-ключу.
tls-auth ta.key 1
Ранее уже говорилось о том, что последняя цифра на сервере должна быть 0, на клиенте — 1.
И последние параметра — это шифры, которые вы установили на сервере.
cipher AES-128-CBC auth SHA512 tls-version-min 1.2
Это всё, что требуется для настройки клиента. Попробуйте запустить клиент OpenVPN и подключиться к вашему серверу. Необходимая информация о подключении будет отображена в окошке openvpn gui.