Vpn client linux centos

Установка OpenVPN в CentOS 7

На этом сайте уже неоднократно публиковались статьи по настройке OpenVPN, но время летит, инструменты немного изменяются, узнаются новые опции, поэтому решил обновить кладовую пошаговых how-to. Большинство из того, что здесь описано, касается не только CentOS, но и других дистрибутивов Linux, но у меня традиционно все для CentOS. С примерами рабочих конфигов сервера и клиента, разумеется.

Актуальность статьи: текущий момент 🙂 ПО: CentOS 7 minimal, SELinux включен. Все ПО обновлено с помощью yum update.

offtop: сделайте над собой усилие, не отключайте SELinux сразу после установки CentOS! В конце статьи кратко затрагивается и это. Даже встроенный firewall Windows может сослужить хорошую службу, что уж говорить про SELinux.

Оглавление:

Установка

# yum install epel-release
# yum install openvpn

# yum install wget

Инфраструктура публичных ключей PKI

Директория для ключей:

# mkdir /etc/openvpn/keys
# cd /etc/openvpn/keys

Вообще, все операции с ключами OpenVPN можно совершать с помощью OpenSSL. Но есть утилита Easy-RSA, которая раньше шла в составе с OpenVPN, а теперь это отдельный проект https://github.com/OpenVPN/easy-rsa. Вот эту утилиту мы и скопируем себе на сервер:

# wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.8/EasyRSA-3.0.8.tgz
# tar xvf EasyRSA-3.0.8.tgz
# cd /etc/openvpn/keys/EasyRSA-3.0.8

Вообще, есть еще вариант с yum install easy-rsa, но тут есть минус в том, что при дальнейшем обновлении можно получить версию easy-rsa новее, чем ту, с которой вы работаете сейчас, а вы все равно копируете эти скрипты и работаете в дальнейшем с копиями, поэтому — не знаю, можно и yum. А можно и wget. Если через yum, не забудьте скопировать файлы из /usr/share/easy-rsa/3.0.8 (на данный момент).

Создаем файл настроек, с пониманием того, что будет. Например, опция EASYRSA_PKI (по-умолчанию, «$PWD/pki») указывает путь, где будет создана директория для ключей.
Команда «init-pki» выполнит «rm -rf» содержимого директории, будьте внимательны! Вы еще инициализируете инфраструктуру ключей, её еще нет, но если там что-то есть, то это будет стерто. Большинство опций — дефолт, на свой вкус отредактируйте страну, OU, email и т.п. Обратите внимание на сроки (в днях) валидности сертифкатов CA, CRL, CERT.

Внимание! В разных руководствах есть разные наборы опций, обдумайте их все. Например, где-то видел: set_var EASYRSA_SSL_CONF «$EASYRSA/openssl-1.0.cnf»
А оно вам точно надо? Вот что в описании написано: if you need to use a specific openssl config file, you can reference it here. Normally this file is auto-detected from a file named openssl-easyrsa.cnf from theEASYRSA_PKI or EASYRSA dir (in that order.) NOTE that this file is Easy-RSA specific and you cannot just use a standard config file, so this is an advanced feature.

ADVANCED, Карл! Если вам нужны какие-то особые опции OpenSSL, указывайте файл конфига, понимая, что он как минимум, у вас есть и понимая, зачем вам это.

В файле конфига vars старайтесь указывать или важные для вас опции, или те, которые вы переопределяете, но не стоит весь дефолтный конфиг сюда лить.

Сложного ничего там нет, посмотрите сами.

Создаем инфраструктуру публичных ключей (PKI, Public Key Infrastructure):

При этом будет создан каталог /etc/openvpn/keys/EasyRSA-3.0.8/pki/ .

Внимание! После создания инфраструктуры никогда больше не запускайте команду init-pki! Эта команда, в числе прочего, выполнит «rm -rf» содержимого директории, будьте внимательны!

Чтобы при подключении клиентов к серверу OpenVPN можно было бы быть уверенным, что сертификат сервера и клиента — не поддельные, нужен кто-то, кто отвечает за «кристальную чистоту партийных рядов». Этот кто-то — удостоверяющий центр, CA (Certificate Authority). CA бывают свои (чаще самоподписанные) и публичные, типа Thawte, StartSSL и др. В данном примере рассмотрим ситуацию, когда используется свой CA — как минимум, это значительно дешевле. Даже свой CA не обязан быть на том же сервере, где будет запущен сервер OpenVPN, но чаще всего расположение CA для OpenVPN на том же сервере, что и сам OpenVPN.

Читайте также:  Rufus как создать загрузочную флешку windows 10 legacy

Создаем свой CA:

Можно было бы избежать ввода пароля (./easyrsa build-ca nopass), но при этом если кто-то скопирует секретный ключ вашего CA, он сможет подписывать «левые» ключи. Вы должны охранять приватный ключ CA как зеницу ока, ведь все остальное верифицируется именно им. Поэтому пароль должен быть стойким к перебору. В конце концов, вы не каждый день будете им пользоваться.

Итак, у нас появились секретный ключ ca.key и сертификат ca.crt:
/etc/openvpn/keys/EasyRSA-3.0.8/pki/private/ca.key
/etc/openvpn/keys/EasyRSA-3.0.8/pki/ca.crt

Секретный ключ нужно оставить на сервере и никому не отдавать. Каждый раз при выпуске нового сертификата сервера или пользователя нам будет необходим пароль секретного ключа! Он важнее сертификата сервера, пользователя, да всего вообще.

Сертификат CA (ca.crt) — открытый, его мы будем вместе с пользовательскими сертификатами передавать клиентам.

Сертификаты сервера OpenVPN

Создаем запрос сертификата для сервера без пароля с помощью опции nopass, иначе придется вводить пароль с консоли при каждом запуске сервера:

# ./easyrsa gen-req server nopass
Keypair and certificate request completed. Your files are:
req: /etc/openvpn/keys/EasyRSA-3.0.8/pki/reqs/server.req
key: /etc/openvpn/keys/EasyRSA-3.0.8/pki/private/server.key

Подписываем запрос на получение сертификата у нашего CA:

# ./easyrsa sign-req server server

В процессе работы скрипта вводим пароль от CA, который указывали раньше и отвечаем на вопрос yes. Мы получили подписанный нашим удостоверяющим центром сертификат для сервера — /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/issued/server.crt

Создаем ключ Диффи-Хелмана:

В применении к OpenVPN файл Диффи-Хелмана нужен для обеспечения защиты трафика от расшифровки, если ключи были похищены. Имеется в виду тот трафик, который был записан и сохранен еще до похищения ключей [https://habrahabr.ru/post/233971/]. Тема широкая, захламлять статью лирическими отступлениями не решился.

Генерация занимает приличное время (по отношению к другим ключам). В конце концов получаем ключ /etc/openvpn/keys/ EasyRSA-3.0.8 /pki/dh.pem

Чтобы можно было отозвать клиентский сертификат (например, при утере мобильного устройства или при увольнении сотрудника), надо создать список отозванных сертификатов CRL:

Будет создан файл /etc/openvpn/keys/EasyRSA-3.0.8/pki/crl.pem , который будет содержать список отозванных сертификатов. Этот файл необходимо скопировать в директорию /etc/openvpn/, указать в конфиге сервера OpenVPN и перезапустить сервер OpenVPN.

Копируем в папку /etc/openvpn все необходимые для работы openvpn сервера ключи (напомню, мы находимся в директории /etc/openvpn/keys/EasyRSA-3.0.8 ):

# cp pki/ /etc/openvpn/
# cp pki/issued/server.crt /etc/openvpn/
# cp pki/private/server.key /etc/openvpn/

Создадим файл HMAC, для дополнительной верификации клиента и сервера (для защиты от DDoS, например):

# cd /etc/openvpn
# openvpn —genkey —secret ta.key

Файл ta.key должен быть скопирован и передан клиенту.

В нормальной конфигурации сервера после старта (от root) права меняются на непривилегированного пользователя (nobody или созданного специально). Этот пользователь должен иметь права на чтение к сертификатам для аутентификации клиентов:

# chmod 644 /etc/openvpn/ca.crt
# chmod 644 /etc/openvpn/crl.pem
# chmod 644 /etc/openvpn/dh.pem
# chmod 644 /etc/openvpn/server.crt

Ключи server.key, ta.key должны быть доступны только root (chmod 600).

Клиентские ключи

Создадим ключ для клиента openvpn:

# cd /etc/openvpn/keys/EasyRSA-3.0.8
# ./easyrsa gen-req client1 nopass
# ./easyrsa sign-req client client1

Опять можно отметить, что могут быть ситуации, когда лучше ключ клиента защищать паролем, хотя бы несложным. Тогда всякий раз при подключении к VPN необходимо будет ввести пароль. Это может быть удобным, если вы не хотите, например, чтобы ваш ребенок случайно подключился к вашей рабочей сети и натворил делов. Для этого просто не надо указывать «nopass» в конце команды выше.

Читайте также:  Openssl linux ��������� �����������

В итоге мы получим два файла:
Публичный сертификат клиента: /etc/openvpn/keys/EasyRSA-3.0.8/pki/issued/client1.crt
Приватный ключ клиента: /etc/openvpn/keys/EasyRSA-3.0.8/pki/private/client1.key

Клиенту вместе с конфигом (см ниже) нужно будет передать копии следующих файлов:
client1.crt;
client1.key;
ca.crt;
ta.key
которые все используются в клиентском конфиге. Никакие иные файлы, кроме тех, которые указаны в конфиге клиента, передавать клиенту не надо!

Конфигурационный файл сервера

Конфигурационный файл сервера по-умолчанию: /etc/openvpn/server.conf . Скорее всего, у вас не будет необходимости менять его расположение.

Обратите внимание на общие опции для клиента и сервера. Это тип шифрования, сжатие трафика и др. Некоторые опции зеркальные. Например, на сервере ta.key 0, на клиенте ta.key 1 и др.

Пример 1 (конфиг сервера OpenVPN):

Пример 2 (конфиг сервера OpenVPN):

Оба конфига рабочие.

Конфигурационный файл клиента

Некоторые опции должны быть симметричны опциям сервера, в частности тип шифрования (здесь BF-CBC), сжатия трафика и др. Все приведенные ниже конфиги рабочие.

Приведены примеры конфигов клиентов OpenVPN для Windows. Для Linux все то же, только пути до файлов ключей надо указать как в конфиге сервера (см. выше).

Пример 1 (конфиг клиента OpenVPN):

Пример 2 (соотв. примеру 2-го конфига сервера):

Запускаем сервер

# systemctl start openvpn@server

Проверяем, запустился или нет (считаем, что в конфиге указан порт 3876/udp):

# netstat -tulnp | grep 3876
udp 0 0 0.0.0.0:3876 0.0.0.0:* 10431/openvpn

Отлично, запустился на указанном порту.

Ну, или так проверяем:

# systemctl status -l openvpn@server

Если все ок, разрешаем автозапуск:

# systemctl enable openvpn@server

Если что-то не так, смотрим лог. Возможно, SELinux не разрешает запускать OpenVPN на выбранном вами порте.

# semanage port -a -t openvpn_port_t -p udp 3876

и еще раз пробуем запустить OpenVPN.

В любом случае, файл лога вам в помощь. После отладки лог можно и отключить (log /dev/null). VPN — он такой.

Отзыв сертификата

Для того, чтобы отозвать сертификат client1:

# cd /etc/openvpn/keys/EasyRSA-3.0.8/pki/
# ./vars
# ./easyrsa revoke client1

При этом будет создан новый файл crl.pem, который обязательно надо скопировать в директорию /etc/openvpn, заменив старый и перезапустить сервер OpenVPN.

А в файле index.txt соответствующий сертификат будет отмечен символом R (рабочие V, а отозванные — R).

Т.к. инфраструктура ключей OpenVPN это по сути обычный CA OpenSSL, то многое из того, что вы знаете про OpenSSL, подойдет и для OpenVPN. Например, список сертификатов с серийными номерами, указанием, отозваны ли они и другой информацией находится в файле index.txt.

При попытке подключиться к серверу с отозванным сертификатом в логе сервера могут быть такие события (уровень детализации verb 4):

Обратите внимание на строчку «CRL CHECK FAILED» (Ошибка Проверки Списка Отозванных Сертификатов): сертификат с серийным номером 04 отозван (is REVOKED)!

Справка по Easy-RSA

Если вы хотите получить справку по утилите Easy-RSA, выполните команду:

Для получения справки по конкретным командам, например build-ca:

# ./easyrsa help build-ca

Настройка iptables

Немного про настройку iptables. Чуть-чуть. По-умолчанию, таблицы INPUT, FORWARD (а порой и OUTPUT) должны быть в состоянии DROP. Поэтому необходимо разрешить прохождение пакетов из сети OpenVPN в интернет (eth0) и/или в локальную сеть (eth1). Пожалуйста, обратите внимание, это пример того, что вам может быть необходимо сделать. Все нижеприведенные команды уже не пошаговый how-to, как в разделах выше. Вы можете нарушить нормальную работу сети необдуманными действиями!

Читайте также:  Критическая ошибка драйвера windows

Разрешить доступ к серверу OpenVPN с внешнего интерфейса:

# iptables -A INPUT -i eth0 -p udp —dport 3876 -j ACCEPT

После этого клиенты OpenVPN смогут подключиться к серверу, но могут не иметь возможности выйти за его пределы, в зависимости от текущих настроек firewall.

Чтобы клиенты могли выходить в интернет или пользоваться ресурсами LAN, для начала на сервере OpenVPN разрешим маршрутизацию (действует до перезагрузки):

# echo 1 > /proc/sys/net/ipv4/ip_forward

или так (сохранится после перезагрузки):

# systemctl restart network.service

Чтобы клиенты OpenVPN могли выходить в интернет от лица сервера (внешний интерфейс eth0):

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

Возможно, у вас уже есть правило для NAT, что-то вроде:

# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

В таком случае нет необходимости в создании отдельного правила для маскарада из сети OpenVPN.

Чтобы клиенты OpenVPN могли работать с локальной сетью (интерфейс LAN eth1):

iptables -A FORWARD -i tun0 -o eth1 -m state —state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth1 -o tun0 -m state —state ESTABLISHED,RELATED -j ACCEPT

Пример рабочего скрипта для сервера OpenVPN (без подключения к локальной сети):

Дополняйте, улучшайте, делитесь с другими опытом 🙂 Вот, вроде бы и все. Удачи!

Не много не про это. Я не понял куда нужно вставить (где заменить) скрипт указанный в самом последнем абзаце

Пример рабочего скрипта для сервера OpenVPN (без подключения к локальной сети):
#!/bin/sh
IF_EXT=»eth0″
IF_OVPN=»tun0″
и далее. я про это.

И ещё расскажите пожалуйста как добавить второго клиента?
Спасибо.

Источник

linux-notes.org

Установка OpenVPN клиента на CentOS/RedHat/Fedora

Недавно я рассказывал в своей статье «Установка openvpn на RedHat/CentOS/Fedora» как установить OpenVPN сервер для CentOS, Fedora или RedHat, а сейчас, в своей новой статье «Установка OpenVPN клиента на CentOS/RedHat/Fedora» я хотел бы рассказать как же установить OpenVPN клиент и подключиться к серверу.

1. Для начала стоит прочитать и установить OpenVPN сервер, вот вам хороший и подробный мануал:
Установка openvpn на RedHat/CentOS/Fedora

2. Введите следующую команду из терминала для установки OpenVPN пакета для вашей машины:

Как говорилось в статье о настройке и установке OpenVPN, что нужно скопировать ключи, НЕ ЗАБЫВАЕМ ЭТО СДЕЛАТЬ:

Эти сертификаты тоже необходимо скачать на машину клиента:

Качаем ключ для клиента ( мы его генерировали, когда устанавливали сервер с OpenVPN):

Тек же скачиваем и сам конфиг с клиентом:

Проверяем его на ошибки:

Если все хорошо, то он начнет проверять все и выдаст много информации, а если у вас будут ошибки, то читаем в интернете и фиксим. Думаю что их не должно быть, я же все проверял на своей машине =)

После установки OpenVPN, запустите службу и сделайте так чтобы для автоматически она запускалась при каждой перезагрузке вашей ОС:

Теперь проверьте, tun0 (интерфейс VPN) создается:

Смотрим что нам выдаст, если все хорошо, то должен появится сетевой интерфейс tun ( у меня это tun0 с таким вот ИП адресом 10.8.0.6, собственно на сервере у меня 10.8.0.1). Чтобы окончательно проверить работу клиент-сервера, то выполните пинг:

ПРИМЕЧАНИЕ! Не забываем скопировать все нужные файлы на вашу машину ( я описывал что нужно скопировать в статье об установке OpenVPN).

После того как убедитесь что нормально вывелось в ifconfig-е, попробуйте пингануть OpenVPN сервер.

Источник

Оцените статью