Установка и настройка VPN на CentOS 7 для доступа в интернет
Настроить VPN на сервере для того, чтобы с его помощью выходить в интернет очень легко. По крайней мере так пишут на всех сайтах. На деле оказывается много подводных камней. И безопасность сервера иногда бывает под угрозой. Представляю вам пошаговую инструкцию — как настроить VPN на сервере и как с его помощью обеспечить доступ в интернет с мобильных телефонов на операционных системах Android и iOS и компьютерах под управлением Windows 10 (равно как и Windows 7 и более старших).
Содержание
Описание процесса. Шаги настройки
Я против того, чтобы бездумно копировать команды в терминал и не понимать, что происходит. Поэтому постараюсь объяснить что мы сейчас будем делать. Если в двух словах, то нам нужно сделать следующее:
- Установить всё нужное программное обеспечение на сервер
- Произвести все необходимые настройки программ на сервере
- Создать центр сертификации на сервере. Он позволит давать ключи и серверам (одному или многим, и клиентам).
- Сгенерировать ключи на сервере. Подписать их ключами центра сертификации.
- Изменить настройки файрвола так, чтобы сервер не блокировал VPN. И чтобы запросы от нашего клиентского компьютера попадали в интернет и обратно.
- Сгенерировать клиентские ключи (те, которые будут на нашем клиенте).
- Обеспечить запуск и загрузку серверного программного обеспечения VPN. Его автозапуск.
- Установить необходимое программное обеспечение на клиенте. То есть, упрощенно, на нашем компьютере под Windows 10
- Установить ключи с сервера на клиенте и запустить VPN.
А теперь обо всём подробнее
Установка программного обеспечения VPN на сервер
В качестве VPN-сервера будем использовать OpenVPN, в качестве программы для создания и ведения инфраструктуры открытых ключей (PKI) в openVPN — Easy-RSA.
Добавляем репозиторий EPEL и обновляем все пакеты
yum install epel-release -y
yum update -y
В случае, если EPEL у вас уже был установлен, ничего страшного не произойдет.
Установим последние версии программного обеспечения — OpenVPN и Easy-RSA 3
yum install openvpn easy-rsa -y
Сразу же поставим программу zip для создания архивов. Вдруг у вас ее нет. Она нам пригодится в дальнейшем.
yum install zip unzip -y
Настройка программ на сервере. Easy-RSA 3 и OpenVPN
Для начала скопируем все данные из каталога easy-rsa в каталог openvpn
cp -r /usr/share/easy-rsa /etc/openvpn/
Создадим описание нашего сертификата. Для этого перейдем в каталог /etc/openvpn/easy-rsa/3/ и создадим файл vars, в который впишем актуальные для нас данные (помечены цветом)
cd /etc/openvpn/easy-rsa/3/
vi vars
Содержимое файла:
set_var EASYRSA "$PWD"
set_var EASYRSA_PKI "$EASYRSA/pki"
set_var EASYRSA_DN "cn_only"
set_var EASYRSA_REQ_COUNTRY "RU"
set_var EASYRSA_REQ_PROVINCE "Vash gorod"
set_var EASYRSA_REQ_CITY "Vash gorod"
set_var EASYRSA_REQ_ORG "Vasha organizatiya"
set_var EASYRSA_REQ_EMAIL "admin@yourserver.ru"
set_var EASYRSA_REQ_OU "IT department"
set_var EASYRSA_KEY_SIZE 2048
set_var EASYRSA_ALGO rsa
set_var EASYRSA_CA_EXPIRE 7500
set_var EASYRSA_CERT_EXPIRE 3650
set_var EASYRSA_NS_SUPPORT "no"
set_var EASYRSA_NS_COMMENT "CERTIFICATE AUTHORITY"
set_var EASYRSA_EXT_DIR "$EASYRSA/x509-types"
set_var EASYRSA_SSL_CONF "$EASYRSA/openssl-1.0.cnf"
set_var EASYRSA_DIGEST "sha512"
Делаем файл исполняемым
chmod +x vars
Генерация ключа VPN на сервере
Для начала надо создать главный ключ сертификационного центра ключей (аббревиатура CA). Для этого на этом шаге надо с помощью easyrsa создать инфраструктуру ее каталогов (чтобы все лежало там, где надо. Таковы правила хранения и использования ключей).
cd /etc/openvpn/easy-rsa/3/
./easyrsa init-pki
Теперь нам надо придумать главный пароль для наших ключей. Он пригодится во время выполнения следующей команды. Еще система предложит ввести имя для нашего создаваемого центра сертификации, можно согласиться на то, что она предлагает (нажать Enter).
./easyrsa build-ca
Создадим ключ сервера с учетом того, что название сервера srv-openvpn
./easyrsa gen-req srv-openvpn nopass
nopass — для того, чтобы сервер сертификации работал без пароля. Не стоит переживать, обращение к нему только внутри машины. Не забудьте внутри команды нажать Enter на предложенном имени.
Теперь система создала два файла для нашего сервера. Один из них, srv-openvpn, необходимо подписать
./easyrsa sign-req server srv-openvpn
Не забыли еще пароль, который придумали выше? Он нам потребуется, чтобы воспользоваться «услугами» центра сертификации и подписать ключи для нашего сервера (да, сложно, но конец уже близок!). Но прежде система попросит вас впечатать слово «yes» чтобы убедиться, что ключи вы выдаете вполне сознательно.
Я же говорил, что уже почти всё! ). В итоге:
- Корневой сертификат находится в файле: ‘pki/ca.crt’
- Закрытый ключ сервера: ‘pki/private/srv-openvpn.key’
- Сертификат сервера: ‘pki/issued/srv-openvpn.crt’
Обеспечение безопасности для передачи данных через VPN
Одних ключей мало. Чтобы данные не были перехвачены и использованы злоумышленниками против нашего сервера, необходимо сгенерировать так называемый ключ Диффи-Хеллмана. Внимание! Времени на генерацию может потребоваться очень много!
./easyrsa gen-dh
Рисует множество точек, в промежутках — плюсы
Отзыв клиентских сертификатов ключей VPN
Если мы в дальнейшем планируем отзывать клиентские сертификаты (а мы планируем! Мало ли что!), нам еще необходимо сгенерировать CRL ключ. Не забудьте про пароль, который мы уже использовали:
./easyrsa gen-crl
Теперь, если вдруг нам надо будет отозвать сертификат (ЭТУ КОМАНДУ ПОКА НЕ ВВОДИТЕ! Пригодится когда нужна будет).
./easyrsa revoke client-ban
client-ban — имя ключей пользователя, которые надо отозвать. Например client-01, client-02 и т.д.
Создание ключей клиентов
Клиентам можно давать номера. 01, 02 и т.д. Теперь посмотрим как создать комплект ключей для клиента 01. Все остальные — аналогично. Процесс полностью повторяет шаги в главе выше. Тоже надо сначала создать ключ, а потом его подписать. В процессе подписания сначала ввести «yes», а потом пароль от центра сертификации.
./easyrsa gen-req client-01 nopass
./easyrsa sign-req client client-01
Копирование готовых ключей в рабочие каталоги OpenVPN
Все ключи созданы, теперь их надо переместить по каталогам. Туда, где они потребуются.
cp pki/ca.crt /etc/openvpn/server/
cp pki/issued/srv-openvpn.crt /etc/openvpn/server/
cp pki/private/srv-openvpn.key /etc/openvpn/server/
Сертификаты клиента
cp pki/ca.crt /etc/openvpn/client/
cp pki/issued/client-01.crt /etc/openvpn/client/
cp pki/private/client-01.key /etc/openvpn/client/
Ключи DH и CRL
cp pki/dh.pem /etc/openvpn/server/
cp pki/crl.pem /etc/openvpn/server/
Редактирование конфигурации OpenVPN сервера
Создадим файл конфигурации
cd /etc/openvpn/
vi server.conf
Содержимое файла:
# OpenVPN Port, Protocol and the Tun
port 1194
proto udp
dev tun
# OpenVPN Server Certificate - CA, server key and certificate
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/srv-openvpn.crt
key /etc/openvpn/server/srv-openvpn.key
# DH and CRL key
dh /etc/openvpn/server/dh.pem
crl-verify /etc/openvpn/server/crl.pem
# Network Configuration - Internal network
# Redirect all Connection through OpenVPN Server
server 10.10.1.0 255.255.255.0
push "redirect-gateway def1"
# Using the DNS from https://dns.watch
push "dhcp-option DNS 84.200.69.80"
push "dhcp-option DNS 84.200.70.40"
# Enable multiple client to connect with same Certificate key
duplicate-cn
# TLS Security
cipher AES-256-CBC
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256
auth SHA512
auth-nocache
# Other Configuration
keepalive 20 60
persist-key
persist-tun
comp-lzo yes
daemon
user nobody
group nobody
# OpenVPN Log
log-append /var/log/openvpn.log
verb 3
Настройка файрвола
Активируем модуль ядра port-forwarding
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p
Должно быть net.ipv4.ip_forward = 1
Добавим службу openvpn в firewalld, и интерфейс tun0 в доверенную зону
firewall-cmd --permanent --add-service=openvpn
firewall-cmd --permanent --zone=trusted --add-interface=tun0
Активируем ‘MASQUERADE’ для доверенной зоны firewalld
firewall-cmd --permanent --zone=trusted --add-masquerade
Активируем NAT
SERVERIP=$(ip route get 84.200.69.80 | awk 'NR==1 {print $(NF-2)}')
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.10.1.0/24 -o $SERVERIP -j MASQUERADE
Перезапустим firewalld
firewall-cmd --reload
Запустим OpenVPN и добавим его в автозагрузку
systemctl start openvpn@server
systemctl enable openvpn@server
Проверим
netstat -plntu
Настройка OpenVPN клиента (Windows, Android и т.д.)
Сначала на сервере нам необходимо подготовить файлы для передачи клиенту
Создадим файл конфигурации client-01.ovpn
cd /etc/openvpn/client
vi client-01.ovpn
Содержимое файла (замените xxx.xxx.xxx.xxx IP-адресом вашего сервера! ):
client
dev tun
proto udp
remote xxx.xxx.xxx.xxx 1194
ca ca.crt
cert client-01.crt
key client-01.key
cipher AES-256-CBC
auth SHA512
auth-nocache
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256
resolv-retry infinite
compress lzo
nobind
persist-key
persist-tun
mute-replay-warnings
verb 3
Теперь для надо заархивировать сертификаты (ca.crt, client-01.crt), ключ клиента (client-01.key), файл конфигурации (client-01.ovpn), и передать их на ПК, который будет подключаться к OpenVPN серверу
cd /etc/openvpn/
zip client/client-01.zip client/*
Настройка Windows
Скачиваем дистрибутив клиента для Windows здесь — https://openvpn.net/community-downloads/ Устанавливаем.
Теперь нам надо перекачать содержимое файла client-01.zip с сервера на машину с Windows. Этот zip-файл мы создали выше. Файлы, что внутри, положить в каталог C:\Program Files\openvpn\config
Пробуем подключиться с другого ПК к OpenVPN серверу и смотрим лог:
tail -f /var/log/openvpn.log
Если все нормально, интернет появится. По поисковому запросу «Мой Ip» в гугле можно убедиться, что мы теперь в интернете с IP адресом нашего сервера.
Решение проблем при установке VPN
Хотя проблемы возникают редко, чтобы сэкономить ваше время на поиск решений при настройке VPN вот вам краткий обзор некоторых проблем при установке
Сервис VPN не запускается
Посмотрите что находится в журнале
tail -f /var/log/openvpn.log
Скорее всего не хватает какого-нибудь файла, который мы копировали выше (команда cp). Вернитесь на шаги назад и проверьте — все ли файлы скопировались.
VPN подключился, но интернета нет
Скорее всего проблема в настройках NAT. Вернитесь к пункту «Активируем NAT» выше и перепроверьте снова
Сообщение FirewallD is not running
На вашей машине не запущен файрвол. Необходимо запустить его сервис (отдельный мануал 🙂 ). По умолчанию он не блокирует доступ через ssh (через telnet), но правила для http и https необходимо будет добавить, если на вашем сервере крутятся сайты. Это не сложно. Вот эти команды (плюсом еще доступ по ftp)
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --permanent --add-service=ftp
Плюс надо будет заново пройтись по секции с firewall-cmd этого текста (заново ввести правила и команды для файрвола).