Настройка сервера OpenVPN в Debian 8
Debian | Комментировать запись
OpenVPN – это полнофункциональное открытое средство VPN SSL, которое поддерживает широкий спектр конфигураций. Оно позволяет находиться в ненадежных сетях так, как если бы вы были подключены к частной сети. Трафик исходит от VPN-сервера и передается до места назначения.
Данный мануал научит вас настраивать OpenVPN на сервере Debian 8.
Требования
Для работы вам нужен свежий сервер Debian 8.1, полностью настроенный по этому мануалу.
1: Установка OpenVPN
Обновите индекс пакетов:
apt-get update
Пакет OpenVPN доступен в репозиториях по умолчанию, поэтому для установки можно использовать apt. Также вам понадобится пакет easy-rsa, который поможет создать внутренний центр сертификации (ЦС или CA) для VPN.
apt-get install openvpn easy-rsa
2: Настройка OpenVPN
Образец конфигурационного файла VPN нужно извлечь из /etc/openvpn и добавить его в свою установку. Для этого используйте команду:
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf
Затем откройте server.conf в текстовом редакторе:
nano /etc/openvpn/server.conf
В файл нужно внести пару изменений.
- Защитить сервер более высоким уровнем шифрования
- Перенаправить веб-трафик в пункт назначения
- Предотвратить утечку DNS-запросов за пределы VPN-соединения
- Установить права доступа.
Для начала увеличьте длину RSA-ключа вдвое. Для этого найдите строку:
# Diffie hellman parameters.
# Generate your own with:
# openssl dhparam -out dh1024.pem 1024
# Substitute 2048 for 1024 if you are using
# 2048 bit keys.
dh dh1024.pem
И измените ее значение на dh2048.pem:
dh dh2048.pem
Найдите раздел redirect-gateway и удалите точку с запятой в начале строки redirect-gateway, чтобы раскомментировать ее. Это позволит клиенту перенаправить свой трафик через сервер OpenVPN.
# If enabled, this directive will configure
# all clients to redirect their default
# network gateway through the VPN, causing
# all IP traffic such as web browsing and
# and DNS lookups to go through the VPN
# (The OpenVPN server machine may need to NAT
# or bridge the TUN/TAP interface to the internet
# in order for this to work properly).
;push "redirect-gateway def1 bypass-dhcp"
В итоге строка должна выглядеть так:
push "redirect-gateway def1 bypass-dhcp"
Также нужно позволить серверу использовать OpenDNS для разрешения DNS, если это возможно. Это поможет предотвратить утечку DNS-запросов за пределы VPN-соединения.
# Certain Windows-specific network settings
# can be pushed to clients, such as DNS
# or WINS server addresses. CAVEAT:
# http://openvpn.net/faq.html#dhcpcaveats
# The addresses below refer to the public
# DNS servers provided by opendns.com.
;push "dhcp-option DNS 208.67.222.222"
;push "dhcp-option DNS 208.67.220.220"
Раскомментируйте строки push “dhcp-option DNS 208.67.222.222” и push “dhcp-option DNS 208.67.220.220”.
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
Теперь определите права доступа в server.conf:
# You can uncomment this out on
# non-Windows systems.
;user nobody
;group nogroup
Раскомментируйте обе строки:
user nobody
group nogroup
По умолчанию OpenVPN работает как пользователь root и, таким образом, имеет полный корневой доступ к системе. OpenVPN нужно ограничить в правах, и для этого нужно использовать nobody и nogroup. Это непривилегированный пользователь, не имеющий возможности входа в систему по умолчанию, часто зарезервированный для запуска ненадежных приложений.
Сохраните и закройте файл.
3: Маршрутизация пакетов
Это параметр sysctl, который сообщает ядру сервера пересылать трафик с клиентских устройств в Интернет. В противном случае трафик остановится на сервере. Включить пересылку пакетов можно с помощью этой команды:
echo 1 > /proc/sys/net/ipv4/ip_forward
Сделайте это значение постоянным, чтобы оно восстанавливалось после перезагрузки:
nano /etc/sysctl.conf
Найдите строку net.ipv4.ip_forward.
# Uncomment the next line to enable packet forwarding for IPv4
#net.ipv4.ip_forward=1
Раскомментируйте ее:
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1
Сохраните и закройте файл.
4: Настройка брандмауэра ufw
ufw является интерфейсом iptables. Настройка ufw довольно проста. Вам нужно добавить несколько правил и внести пару изменений в конфигурации, а затем включить его.
Читайте также: Настройка фаервола с помощью UFW на облачных серверах Ubuntu и Debian
Установите ufw:
apt-get install ufw
Включите поддержку SSH:
ufw allow ssh
В мануале OpenVPN работает по UDP, откройте этот трафик по порту 1194.
ufw allow 1194/udp
Необходимо также настроить политику маршрутизации UFW. Мы сделаем это в главном файле конфигурации UFW.
nano /etc/default/ufw
Найдите DEFAULT_FORWARD_POLICY=”DROP”. Значение в кавычках замените на ACCEPT.
DEFAULT_FORWARD_POLICY="ACCEPT"
Сохраните и закройте файл.
Затем добавьте дополнительные правила ufw для преобразования сетевых адресов и IP-маскарадинга подключенных клиентов.
nano /etc/ufw/before.rules
Начало файла before.rules нужно отредактировать так, как показано ниже. Необходимо добавить выделенный красным раздел:
# rules.before
#
# Rules that should be run before the ufw command line added rules. Custom
# rules should be added to one of these chains:
# ufw-before-input
# ufw-before-output
# ufw-before-forward
#
# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to eth0
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
# END OPENVPN RULES
# Don't delete these required lines, otherwise there will be errors
*filter
Сохраните и закройте файл.
Теперь можно включить брандмауэр:
ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)?
Выберите y:
Firewall is active and enabled on system startup
Теперь проверьте правила и состояние брандмауэра:
ufw status
Status: active
To Action From
-- ------ ----
22 ALLOW Anywhere
1194/udp ALLOW Anywhere
22 (v6) ALLOW Anywhere (v6)
1194/udp (v6) ALLOW Anywhere (v6)
5: Создание центра сертификации
Для шифрования трафика OpenVPN использует сертификаты.
В этом разделе мы создадим ЦС в два этапа: первый – установка переменных, второй – генерирование ЦС.
OpenVPN поддерживает двунаправленную аутентификацию на основе сертификатов, что означает, что клиент должен аутентифицировать сертификат сервера, а сервер должен аутентифицировать сертификат клиента для установления взаимного доверия.
Скопируйте сценарии Easy-RSA:
cp -r /usr/share/easy-rsa/ /etc/openvpn
Создайте каталог для ключей:
mkdir /etc/openvpn/easy-rsa/keys
Easy-RSA предоставляет файл переменных, который можно редактировать, чтобы создавать сертификаты с заранее определенными значениями по умолчанию. Эта информация копируется в сертификаты и ключи и поможет идентифицировать ключи позже.
nano /etc/openvpn/easy-rsa/vars
Значения, выделенные красным, нужно заменить своими данными:
export KEY_COUNTRY="US"
export KEY_PROVINCE="TX"
export KEY_CITY="Dallas"
export KEY_ORG="My Company Name"
export KEY_EMAIL="8host@example.com"
export KEY_OU="MYOrganizationalUnit"
В том же файле vars отредактируйте строку, приведенную ниже. Для простоты мы в качестве имени рекомендуется использовать server. Если вы хотите использовать другое имя, вам необходимо будет обновить файлы конфигурации OpenVPN, ссылающиеся на server.key и server.crt. Найдите:
# X509 Subject Field
export KEY_NAME="EasyRSA"
И измените ее значение:
# X509 Subject Field
export KEY_NAME="server"
Сохраните и закройте файл.
Теперь нужно сгенерировать ключ Диффи-Хеллмана; это может занять несколько минут. Флаг -out указывает, куда сохранять новые параметры.
openssl dhparam -out /etc/openvpn/dh2048.pem 2048
Перейдите в каталог:
cd /etc/openvpn/easy-rsa
Инициализируйте PKI (инфраструктуру открытого ключа). Обратите внимание на точку (.) и пробел перед ./varscommand. Это определяет текущий рабочий каталог.
. ./vars
Команда вернет такой результат. Поскольку в каталоге keys пока ничего нет, это нормальный вывод.
NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys
Теперь нужно очистить рабочий каталог от любых возможных старых ключей или образцов файлов, чтобы освободить место для новых ключей.
./clean-all
Эта последняя команда создает центр сертификации (CA), вызывая интерактивную команду OpenSSL. На выходе будет предложено подтвердить переменные, которые ранее вы определили в файле Easy-RSA (название страны, организация и т. д.).
./build-ca
Чтобы принять значения по умолчанию, просто нажмите Enter.
ЦС готов.
6: Генерирование ключей и сертификатов сервера
Оставаясь в каталоге /etc/openvpn/easy-rsa, теперь введите команду для создания ключа сервера. Значение server – это переменная export KEY_NAME, которую вы установили в файле Vars Easy-RSA.
./build-key-server server
Команда сгенерирует почти такой же вывод, как при запуске ./build-ca, и вы сможете снова нажать Enter для подтверждения значений по умолчанию. Однако на этот раз есть еще две строки:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Обе строки оставьте пустыми, просто нажав Enter.
В конце появится еще две строки, в которых нужно ответить y:
Sign the certificate? [y/n]
1 out of 1 certificate requests certified, commit? [y/n]
Последняя строка выведет:
Write out database with 1 new entries
Data Base Updated
7: Перемещение ключей и сертификатов сервера
OpenVPN будет искать ЦС, сертификат и ключ сервера в /etc/openvpn. Скопируйте их в правильное расположение.
cp /etc/openvpn/easy-rsa/keys/{server.crt,server.key,ca.crt} /etc/openvpn
Вы можете убедиться, что операция прошла успешно:
ls /etc/openvpn
Вы должны увидеть сертификат и файлы ключей сервера.
Теперь сервер OpenVPN готов к запуску. Запустите его и проверьте состояние:
service openvpn start
service openvpn status
Последняя команда ответит:
* openvpn.service - OpenVPN service
Loaded: loaded (/lib/systemd/system/openvpn.service; enabled)
Active: active (exited) since Thu 2015-06-25 02:20:18 EDT; 9s ago
Process: 2505 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 2505 (code=exited, status=0/SUCCESS)
Сервер OpenVPN работает!
Если же команда сообщает, что VPN не работает, проверьте /var/log/syslog:
Options error: --key fails with 'server.key': No such file or directory
Эта ошибка говорит, что server.key был скопирован в /etc/openvpn некорректно. Скопируйте его снова и попробуйте запустить сервер.
8: Генерирование сертификатов и ключей клиента
Ранее вы установили и настроили сервер OpenVPN, создали центр сертификации и сертификат и ключ сервера. На этом этапе нужно использовать CA сервера для создания сертификатов и ключей для каждого клиентского устройства, которое будет подключаться к VPN.
Создание ключей и сертификатов
Рекомендуется использовать индивидуальные ключи и сертификаты для каждого клиента, которого вы собираетесь подключить к VPN.
Примечание: По умолчанию OpenVPN не поддерживает одновременных клиентских подключений к серверу, созданных с помощью одного сертификата и ключа (см. duplicate-cn в /etc/openvpn/server.conf).
Чтобы создать индивидуальные учетные данные для каждого устройства, которое вы собираетесь подключить к VPN, вы должны повторить этот раздел для каждого из них (но при этом нужно менять имя клиента, например client2 или iphone2). При наличии индивидуальных учетных данных устройства можно впоследствии деактивировать в индивидуальном порядке. В этом руководстве в примерах используется имя клиента client1.
Соберите ключ для клиента client1 в каталоге /etc/openvpn/easy-rsa.
./build-key client1
Вам будет снова предложено изменить или подтвердить переменные и эти две строки, которые должны быть пустыми. Нажмите Enter, чтобы принять значения по умолчанию.
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Как и раньше, следующие две строки в конце процесса сборки требуют ответа y:
Sign the certificate? [y/n]
1 out of 1 certificate requests certified, commit? [y/n]
Если сборка ключей была успешной, результат снова будет выглядеть так:
Write out database with 1 new entries
Data Base Updated
Пример конфигурационного файла клиента нужно скопировать в каталог ключей Easy-RSA и использовать его в качестве шаблона, который будет загружен на клиентские устройства для редактирования. В процессе копирования нужно изменить имя файла с client.conf на client.ovpn, потому что клиенты должны использовать расширение .ovpn.
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/easy-rsa/keys/client.ovpn
Повторите этот раздел для всех своих клиентов, меняя имя клиента.
Примечание: Имя дубликата client.ovpn не обязательно должно быть связано с клиентским устройством. Клиентское приложение OpenVPN будет использовать имя файла в качестве идентификатора для самого VPN-соединения. Скопируйте client.ovpn с таким названием, которое будет использовать VPN в вашей операционной системе. Например: work.ovpn будет определяться как рабочая сеть, school.ovpn – как школьная и т.д.
Также нужно изменить каждый файл клиента и указать IP-адрес сервера OpenVPN, чтобы клиент знал, к чему подключаться. Откройте client.ovpn, используя nano или другой текстовый редактор.
nano /etc/openvpn/easy-rsa/keys/client.ovpn
Укажите вместо my-server-1 IP-адрес VPN в строке remote.
# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
remote my-server-1 1194
Затем найдите этот раздел и раскомментируйте user nobody and group nogroup, как это было сделано в server.conf. Это не касается ОС Windows.
# Downgrade privileges after initialization (non-Windows only)
user nobody
group no group
Передача ключей и сертификатов на клиентские устройства
Напомним, что клиентские сертификаты и ключи хранятся на сервере OpenVPN в каталоге /etc/openvpn/easy-rsa/keys.
Теперь необходимо перенести файлы сертификата клиента, ключа и профиля в папку на этом клиентском устройстве.
Например, в данном случае файлы должны располагаться в etc/openvpn/easy-rsa/keys/client1.crt и /etc/openvpn/easy-rsa/keys/client1.key
Файлы ca.crt и client.ovpn одинаковы для всех клиентов. Загрузите эти два файла; обратите внимание, что файл ca.crt находится в другом каталоге.
- /etc/openvpn/easy-rsa/keys/client.ovpn
- /etc/openvpn/ca.crt
Выбор приложения для передачи зависит от вас и от операционной системы устройства, но рекомендуется выбирать приложения с поддержкой SFTP (протокол передачи файлов SSH) или SCP (Secure Copy). Это передаст файлы клиента по зашифрованному соединению.
Ниже приведен пример команды SCP. Она помещает файл client1.key в каталог Downloads на локальном компьютере.
scp root@your-server-ip:/etc/openvpn/easy-rsa/keys/client1.key Downloads/
Также вы можете использовать следующие приложения и мануалы:
- WinSCP
- Использование SFTP для безопасного обмена файлами с удаленным сервером
- Безопасное управление файлами сервера с помощью Filezilla
Затем убедитесь, что на клиентском устройстве есть эти файлы:
- client1.crt
- client1.key
- client.ovpn
- ca.crt
9: Создание единого профиля OpenVPN для клиентов
Существует несколько способов управления клиентскими файлами, но самый простой – это использовать единый профиль. Профиль создается путем изменения файла шаблона client.ovpn и добавления центра сертификации сервера, сертификата клиента и его ключа. После этого в приложение OpenVPN клиента необходимо импортировать только профиль client.ovpn.
В приведенном ниже разделе нужно закомментировать три строки, чтобы включить сертификат и ключ непосредственно в файл client.ovpn. Это должно выглядеть следующим образом:
# SSL/TLS parms.
# . . .
;ca ca.crt
;cert client.crt
;key client.key
Сохраните и закройте файл client.ovpn.
Добавить сертификаты можно с помощью кода. Сначала добавьте ЦС:
echo '<ca>' >> /etc/openvpn/easy-rsa/keys/client.ovpn
cat /etc/openvpn/ca.crt >> /etc/openvpn/easy-rsa/keys/client.ovpn
echo '</ca>' >> /etc/openvpn/easy-rsa/keys/client.ovpn
Затем добавьте сертификат:
echo '<cert>' >> /etc/openvpn/easy-rsa/keys/client.ovpn
cat /etc/openvpn/easy-rsa/keys/client1.crt >> /etc/openvpn/easy-rsa/keys/client.ovpn
echo '</cert>' >> /etc/openvpn/easy-rsa/keys/client.ovpn
В конце добавьте ключ:
echo '<key>' >> /etc/openvpn/easy-rsa/keys/client.ovpn
cat /etc/openvpn/easy-rsa/keys/client1.key >> /etc/openvpn/easy-rsa/keys/client.ovpn
echo '</key>' >> /etc/openvpn/easy-rsa/keys/client.ovpn
Теперь у вас есть единый профиль, который можно скопировать на клиентское устройство.
10: Установка клиентского профиля
На разных платформах есть более удобные приложения для подключения к серверу OpenVPN. Инструкции для установки клиентов на разных платформах вы найдете в разделе 5 мануала Настройка сервера OpenVPN в Ubuntu 14.04.
Заключение
Теперь у вас есть полностью рабочая виртуальная частная сеть на сервере OpenVPN. Вы можете просматривать веб-страницы и загружать контент, не беспокоясь о злоумышленниках, отслеживающих вашу деятельность.
После того, как вы установили успешное соединение с клиентом, вы можете убедиться, что трафик маршрутизируется через VPN, запросив внешний IP-адрес в Google.
Tags: Debian 8, OpenVPN, VPN