Используемые термины: VPN, OpenVPN, CentOS.
Мы внесем небольшие правки в настройки. Настроим время для правильного формирования клиентских сертификатов, отключим систему безопасности SELinux, откроем нужные порты брандмауэра.
Установим правильную временную зону:
timedatectl set-timezone Europe/Moscow
* в данном примере мы укажем московское время.
Устанавливаем утилиту для синхронизации времени:
dnf install chrony
Разрешаем автозапуск службы chronyd и запускаем ее:
systemctl enable chronyd
systemctl start chronyd
Проверить корректность времени можно командой:
В нашей инструкции мы просто отключим SELinux. Если необходимо его настроить и оставить включенным, используем инструкцию Настройка SELinux в CentOS 7 (для CentOS 8 она также подходит).
И так, отключаем Selinux командой:
setenforce 0
Чтобы Selinux не включился после перезагрузки, открываем на редактирование файл:
vi /etc/selinux/config
… и редактируем опцию SELINUX:
…SELINUX=disabled…
Создаем правило для firewalld:
firewall-cmd –permanent –add-port=443/udp
* в данной инструкции мы настроим работу OpenVPN на порту 443 по UDP. Если в вашем случае необходим другие порт и протокол, меняем значения на соответствующие. По умолчанию, OpenVPN использует порт 1194.
Применяем настройку:
firewall-cmd –reload
Использование сертификатов является обязательным условием при использовании VPN. Поэтому сразу после установки мы создадим все необходимые ключи.
Устанавливаем репозиторий epel:
dnf install epel-release
Устанавливаем необходимые пакеты следующей командой:
dnf install openvpn easy-rsa
Переходим в каталог easy-rsa:
cd /usr/share/easy-rsa/3
* в зависимости от версии easy-rsa, последний каталог может быть другим. Увидеть точное название каталога можно командой ls /usr/share/easy-rsa/.
Чтобы упростить и ускорить процесс создания ключей, создаем следующий файл:
export KEY_COUNTRY=”RU”export KEY_PROVINCE=”Sankt-Petersburg”export KEY_CITY=”Sankt-Petersburg”export KEY_ORG=”DMOSK COMPANY”export KEY_EMAIL=”[email protected]”export KEY_CN=”DMOSK”export KEY_OU=”DMOSK”export KEY_NAME=”name-openvpn-server.admins24.com”export KEY_ALTNAMES=”name-openvpn-server”
* где KEY_CN и KEY_OU: рабочие подразделения (например, можно указать название отдела); KEY_NAME: адрес, по которому будет выполняться подключение (можно указать полное наименование сервера); KEY_ALTNAMES — альтернативный адрес.* так как мы генерируем самоподписный сертификат, значения данных полей никак не повлияют на работу OpenVPN, однако, для удобства, лучше подставить реальные данные.
Запускаем созданный файл на исполнение:
1. Инициализируем PKI:
./easyrsa init-pki
Мы должны увидеть:
init-pki complete; you may now create a CA or requests.Your newly created PKI dir is: /usr/share/easy-rsa/3/pki
… а в текущем каталоге появится папка pki.
2. Генерируем корневой сертификат (CA):
./easyrsa build-ca
… после ввода Enter обязательно задаем пароль дважды. На запрос ввести Common Name можно просто нажать ввод или написать свое имя:
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:
3. Создаем ключ Диффи-Хеллмана:
./easyrsa gen-dh
4. Для создания сертификата сервера необходимо сначала создать файл запроса:
./easyrsa gen-req vpn-server nopass
* на запрос ввода Common Name просто вводим Enter, чтобы использовать настройку из файла vars; nopass можно упустить, если хотим повысить безопасность с помощью пароля на сертификат.
… и на его основе — сам сертификат:
./easyrsa sign-req server vpn-server
После ввода команды подтверждаем правильность данных, введя yes:
Confirm request details: yes
… и вводим пароль, который указывали при создании корневого сертификата.
5. Для создания ta ключа используем команду:
openvpn –genkey –secret pki/ta.key
6. Сертификаты сервера готовы и находятся в каталоге pki.
Создаем каталог в /etc/openvpn, в котором будем хранить сертификаты:
mkdir -p /etc/openvpn/server/keys
Переходим в каталог pki:
Копируем в него необходимые сертификаты:
cp ca.crt issued/vpn-server.crt private/vpn-server.key dh.pem ta.key /etc/openvpn/server/keys/
Создаем конфигурационный файл для сервера openvpn:
vi /etc/openvpn/server/server.conf
И вставляем в него следующее:
local 192.168.0.15port 443proto udpdev tunca keys/ca.crtcert keys/vpn-server.crtkey keys/vpn-server.keydh keys/dh.pemtls-auth keys/ta.key 0server 172.16.10.0 255.255.255.0ifconfig-pool-persist ipp.txtkeepalive 10 120max-clients 32persist-keypersist-tunstatus /var/log/openvpn/openvpn-status.loglog-append /var/log/openvpn/openvpn.logverb 0mute 20daemonmode servertls-servercomp-lzo no
* где из всех параметров, обязательно, внести изменения нужно в следующие — local: IP-адрес, на котором будет обрабатывать запросы OpenVPN; port: сетевой порт (443 позволит избежать проблем при использовании Интернета в общественных местах, но может быть уже занят в вашей системе — посмотреть список используемых портов можно командой ss -tunlp. Если порт занят, используйте любой из свободных, например 1194).
Создаем каталог для логов сервера:
mkdir /var/log/openvpn
Разрешаем автоматический старт сервиса vpn:
systemctl enable [email protected]
И запускаем его:
systemctl start [email protected]
Проверить работоспособность можно командой:
systemctl status [email protected]
Для настройки клиента необходимо на сервере сгенерировать сертификаты, а на клиентском компьютере установить программу openvpn и настроить ее.
На сервере генерируем сертификаты для клиента. Для этого снова переходим в каталог easy-rsa:
Запускаем еще раз vars:
Создаем клиентский сертификат:
./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1
Мы должны увидеть запрос на подтверждение намерения выпустить сертификат — вводим yes:
* в данном примере будет создан сертификат для client1.
На сервере скопируем ключи во временную директорию, выполнив последовательно 3 команды:
mkdir /tmp/keys
cp pki/issued/client1.crt pki/private/client1.key pki/dh.pem pki/ca.crt pki/ta.key /tmp/keys
chmod -R a+r /tmp/keys
* сертификаты скопированы в каталог /tmp для удобства переноса их на клиентский компьютер.
Сертификаты готовы для скачивания.
В качестве примере, выполним подключение к нашему серверу с компьютера Windows. Более подробно процесс настройки клиента описан в инструкции Настройка OpenVPN клиента.
Пошагово, выполняем следующие действия:
1. Заходим на официальную страницу загрузки openvpn и скачиваем клиента для Windows:
Запускаем скачанный файл и устанавливаем программу, нажимая «Далее».
2. Переходим в папку C:\Program Files\OpenVPN\config.
Копируем в нее файлы ca.crt, client1.crt, client1.key, dh.pem, ta.key из каталога /tmp/keys на сервере, например, при помощи программы WinSCP.
После переноса файлов, не забываем удалить ключи из временного каталога на сервере:
rm -R /tmp/keys
3. Возвращаемся к компьютеру с Windows, открываем блокнот от имени администратора и вставляем следующие строки:
clientresolv-retry infinitenobindremote 192.168.0.15 443proto udpdev tuncomp-lzo noca ca.crtcert client1.crtkey client1.keydh dh.pemtls-clienttls-auth ta.key 1floatkeepalive 10 120persist-keypersist-tunverb 0
* где 192.168.0.15 443 — IP-адрес OpenVPN-сервера и порт, на котором он принимает запросы.
Сохраняем файл с именем config.ovpn в папке C:\Program Files\OpenVPN\config.
4. Запускаем с рабочего стола программу «OpenVPN GUI» от имени администратора.
Нажимаем правой кнопкой по появившемуся в трее значку и выбираем «Подключиться»:
Произойдет подключение и значок поменяет цвет с серого/желтого на зеленый.
5. Для автозапуска клиента, открываем службы Windows, находим и настраиваем службу OpenVPNService для автозапуска:
Мы можем настроить проверку пользователя по логину и паролю. Это даст дополнительный уровень защиты, а также позволит использовать один и тот же сертификат для всех подключений.
Открываем конфигурационный файл openvpn:
И добавляем следующие строчки:
username-as-common-nameplugin /usr/lib64/openvpn/plugins/openvpn-plugin-auth-pam.so login
* где username-as-common-name указывает на то, что openvpn должен использовать логины, как основные идентификаторы клиента; plugin указывает на путь к самому плагину и для чего он используется.* как путь, так и название файла openvpn-plugin-auth-pam.so могут отличаться. Это зависит от версии Linux и OpenVPN. Чтобы найти путь до нужного файла, можно воспользоваться командой find / -name “openvpn-*auth-pam*” -print.
Перезапускаем сервер:
systemctl restart [email protected]
При необходимости, создаем учетную запись для авторизации:
useradd vpn1 -s /sbin/nologin
И задаем ей пароль:
passwd vpn1
В конфигурационный файл клиента добавляем:
auth-user-pass
Теперь при подключении программа будет запрашивать логин и пароль.
Если необходимо настроить авторизацию, но автоматизировать вход клиента, открываем конфигурационный файл последнего и строку для авторизации меняем на:
auth-user-pass auth.txt
* где auth.txt — файл, в котором мы будем хранить логин и пароль.
Создаем текстовый файл auth.txt в той же папке, где находится файл конфигурации со следующим содержимым:
usernamepassword
* где username — логин пользователя, а password — пароль.
Переподключаем клиента.
Описанный метод аутентификации является базовым и требует наличие обычной системной учетной записи. Если необходима более сложная авторизация на базе LDAP, можно воспользоваться инструкцией настройка OpenVPN сервера с аутентификацией через LDAP (написана на базе Linux Ubuntu).
В случае, когда необходимо прекратить действие определенного сертификата, можно его отозвать (revoke). Чтобы настроить отзыв сертификата в OpenVPN, нужно указать файл для проверки отозванных сертификатов, затем отозвать сам сертификат.
Открываем конфигурационный файл:
Добавляем строку:
…crl-verify keys/crl.pem
* в данном примере, сервер будет проверять список отозванных сертификатов в файле keys/crl.pem.
В нашем примере мы создали сертификат client1 — сделаем его отзыв. Переходим в каталог:
Отзываем сертификат командой:
./easyrsa revoke client1
* здесь мы отзываем сертификат для клиента client1.
Подтверждаем наши намерения:
Continue with revocation: yes
… и вводим пароль для центра сертификации.
После этого создаем/обновляем файл crl.pem:
./easyrsa gen-crl
* необходимо будет ввести пароль центра сертификации.
Копируем файл crl.pem в каталог openvpn:
cp pki/crl.pem /etc/openvpn/server/keys/
После перезагружаем сервис openvpn:
Ранее мы настроили более безопасный сценарий подключения — туннели, которые не позволяют подключенным клиентам видеть друг друга. Но если мы хотим сделать так, чтобы все подключенные к VPN устройства видели друг друга по сети, нам нужно изменить некоторые настройки на сервере и клиенте.
Открываем файл настроек:
client-to-client
* данная настройка как раз и говорит, что клиенты могут видеть друг друга через нашу сеть VPN.
Теперь находим настройку:
… и меняем ее на:
* туннели создают небольшие подсети на 4 адреса для каждого подключения, таким образом, изолируя клиентов друг от друга. Нам же нужно сделать так, чтобы клиенты были в одной сети VPN. Поэтому мы меняем тип интерфейса на tap.
Перезапускаем нашу службу сервиса:
На клиенте нам нужно изменить только тип сетевого интерфейса на tap:
После можно подключаться к серверу.
OpenVPN позволяет на стороне сервера определить некоторые настройки, которые получит наш клиент. Для этого открываем конфигурационный файл сервера:
client-config-dir ccd
* данная настройка задает каталог (cdd), в котором будут находиться файлы с настройками пользователей.
Создаем каталог:
mkdir /etc/openvpn/server/ccd
Создаем файл с настройкой. Название файла должно соответствовать либо имени сертификата, либо имени пользователя (если в конфигурации есть опция username-as-common-name).
а) например, имя сертификата:
vi /etc/openvpn/server/ccd/client1
б) например, имя пользователя:
vi /etc/openvpn/server/ccd/vpn1
Добавляем следующее содержимое:
push-resetpush “route 192.168.0.10 255.255.255.255”push “dhcp-option DOMAIN admins24.local”push “dhcp-option DNS 192.168.0.2”push “dhcp-option DNS 192.168.0.3”
* в данном примере мы предоставим пользователю доступ только к узлу 192.168.0.10, зададим доменный суфикс и укажим серверы DNS.
Для применения настроек перезапускаем сервис:
Также Вам может быть интересным:
1. Настройка доступа к локальной сети клиентам OpenVPN в CentOS
2. Настройка OpenVPN клиента
3. Как настроить сервер OpenVPN сервер на Windows
4. Настройка и использование OpenVPN на Ubuntu
Продолжая использовать данный сайт вы принимаете политику конфиденциальности и cookies