Как настроить сервер OpenVPN в Debian 8
OpenVPN - это VPN-приложение с открытым исходным кодом, которое позволяет вам безопасно создавать частную сеть и подключаться к ней через общедоступный Интернет. Короче говоря, это позволяет конечному пользователю маскировать соединения и более безопасно перемещаться по ненадежной сети.
Шаг 1 - Установите OpenVPN
Перед установкой любых пакетов обновите индекс пакетов apt. apt-get update Теперь мы можем установить сервер OpenVPN вместе с easy-RSA для шифрования. 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
После распаковки откройте файл конфигурации сервера, используя текстовый редактор.
Вместо editor используйте свой установленный редактор editor /etc/openvpn/server.conf
В этом файле нам нужно будет сделать четыре изменения (каждое будет объяснено подробно):
- Безопасный сервер с более высоким уровнем шифрования
- Переадресация интернет-трафика на место назначения
- Запрет утечки DNS-запросов за пределы VPN-соединения
- Настройка разрешений
Во-первых, мы удвоим длину ключа RSA, используемую при генерации ключей сервера и клиента. После основного блока комментариев и нескольких фрагментов найдите строку, которая гласит:
/etc/openvpn/server.conf # 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 Измените dh1024.pemна dh2048.pemтак, чтобы строка теперь гласила: dh dh2048.pem Во-вторых, мы обязательно перенаправим весь трафик в нужное место. По-прежнему server.conf прокручивайте больше блоков комментариев и ищите следующий раздел: # 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" чтобы VPN-сервер передавал веб-трафик клиентов по назначению. Это должно выглядеть следующим образом: push "redirect-gateway def1 bypass-dhcp" В-третьих, мы скажем серверу использовать OpenDNS для разрешения DNS, где это возможно. Это может помочь предотвратить утечку NS-запросов за пределы 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 195.34.55.245" ;push "dhcp-option DNS 195.34.55.246" Раскомментируйте push "dhcp-option DNS 195.34.55.245"и push "dhcp-option DNS 195.34.55.246". Это должно выглядеть следующим образом: push "dhcp-option DNS 195.34.55.245" push "dhcp-option DNS 195.34.55.246" В-четвертых, мы определим права доступа в server.conf: # You can uncomment this out on # non-Windows systems. ;user nobody ;group nogroup Раскомментируйте оба user nobody и group nogroup. Это должно выглядеть следующим образом: user nobody group nogroup
По умолчанию OpenVPN запускается от имени пользователя root и, таким образом, имеет полный root-доступ к системе. Вместо этого мы ограничим OpenVPN для пользователя nobody и группы nogroup . Это непривилегированный пользователь без возможности входа в систему по умолчанию, часто зарезервированный для запуска ненадежных приложений, таких как веб-серверы.
Шаг 3 - Включить пересылку пакетов
В этом разделе мы расскажем ядру сервера о направлении трафика от клиентских сервисов в Интернет. В противном случае трафик остановится на сервере.
Включите пересылку пакетов во время выполнения, введя эту команду: echo 1 > /proc/sys/net/ipv4/ip_forward Далее нам нужно сделать это постоянным, чтобы этот параметр сохранялся после перезагрузки сервера. Откройте sysctl файл конфигурации, используя nano или ваш любимый текстовый редактор. ваш редактор /etc/sysctl.conf В верхней части sysctl файла вы увидите: # Uncomment the next line to enable packet forwarding for IPv4 #net.ipv4.ip_forward=1 Раскоментируйте net.ipv4.ip_forward. Это должно выглядеть следующим образом: # Uncomment the next line to enable packet forwarding for IPv4 net.ipv4.ip_forward=1
Сохраните изменения и выйдите.
Шаг 4 - Установите и настройте ufw
UFW - это интерфейс для IPTables. Нам нужно только сделать несколько правил и изменений в конфигурации.
Установите ufwпакет. apt-get install ufw Во-вторых, установите UFW для разрешения SSH: ufw allow ssh В этом руководстве будет использоваться OpenVPN поверх UDP, поэтому UFW также должен разрешать трафик UDP через порт 1194. ufw allow 1194/udp Политика переадресации UFW также должна быть установлена. Мы сделаем это в основном файле конфигурации. редактор /etc/default/ufw Посмотрите на следующую строку: DEFAULT_FORWARD_POLICY="DROP" Это должно быть изменено с DROPна ACCEPT. Это должно выглядеть следующим образом: DEFAULT_FORWARD_POLICY="ACCEPT" Сохранить и выйти.
Далее мы добавим дополнительные правила UFW для трансляции сетевых адресов и маскирования IP-адресов подключенных клиентов.
редактор /etc/ufw/before.rules
Затем добавьте область красного цвета для ПРАВИЛ ОТКРЫТИЯ :
/etc/ufw/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, теперь мы можем включить его. Введите в командной строке: ufw enable Включение UFW вернет следующее приглашение: Command may disrupt existing ssh connections. Proceed with operation (y|n)? Ответа на этот вопрос y. Чтобы проверить основные правила брандмауэра UFW: ufw status Команда 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 использует сертификаты для шифрования трафика.
В этом разделе мы настроим наш собственный центр сертификации (ЦС) в два этапа: (1) установочные переменные и (2) создание ЦС.
OpenVPN поддерживает двунаправленную аутентификацию на основе сертификатов, что означает, что клиент должен аутентифицировать сертификат сервера, а сервер должен аутентифицировать сертификат клиента до установления взаимного доверия. Мы будем использовать скрипты Easy RSA для этого.
Сначала скопируйте сценарии создания Easy-RSA. cp -r /usr/share/easy-rsa/ /etc/openvpn Затем создайте каталог для размещения ключа. mkdir /etc/openvpn/easy-rsa/keys Далее мы установим параметры для нашего сертификата. Откройте файл переменных, используя текстовый редактор. редактор /etc/openvpn/easy-rsa/vars Переменные, отмеченные красным, должны быть изменены в соответствии с вашими предпочтениями. export KEY_COUNTRY="RU" export KEY_PROVINCE="TX" export KEY_CITY="Moskow" export KEY_ORG="My Company Name" export KEY_EMAIL="viktor@example.com" export KEY_OU="MYOrganizationalUnit" В том же varsфайле также отредактируйте эту строку, показанную ниже. Для простоты мы будем использовать server в качестве имени ключа. Если вы хотите использовать другое имя, вам также необходимо обновить файлы конфигурации OpenVPN, которые ссылаются server.keyи server.crt. Ниже, в том же файле, мы будем указывать правильный сертификат. Ищите строку сразу после ранее измененного блока, который читает # X509 Subject Field export KEY_NAME="EasyRSA" Измените KEY_NAMEзначение по умолчанию EasyRSAна желаемое имя сервера. Этот урок будет использовать имя server. # X509 Subject Field export KEY_NAME="server" Сохранить и выйти. Далее мы сгенерируем параметры Диффи-Хелмана, используя встроенный инструмент OpenSSL под названием dhparam; Это займет несколько минут. -outФлаг указывает , где для сохранения новых параметров. openssl dhparam -out /etc/openvpn/dh2048.pem 2048 Наш сертификат теперь сгенерирован, и пришло время генерировать ключ. Сначала мы перейдем в easy-rsaкаталог. cd /etc/openvpn/easy-rsa Теперь мы можем начать настройку самого центра сертификации. Сначала инициализируйте инфраструктуру открытого ключа (PKI). . ./vars Следующее предупреждение будет напечатано. Не беспокойтесь, так как каталог, указанный в предупреждении, пуст. NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys, Далее мы удалим все остальные ключи, которые могут помешать нашей установке. ./clean-all Наконец, мы построим CA, используя команду OpenSSL. Эта команда запросит у вас подтверждение переменных «Отличительное имя», которые были введены ранее. Нажмите,
ENTER
чтобы принять существующие значения. ./build-ca Нажмите,ENTER
чтобы пройти через каждый запрос, так как вы просто устанавливаете их значения в vars файле.
Шаг 6 - Генерация сертификата и ключа для сервера
В этом разделе мы настроим и запустим наш сервер OpenVPN.
Во-первых, все еще работая с /etc/openvpn/easy-rsa
, создайте свой ключ с именем сервера. Это было указано ранее, как KEY_NAME
в вашем файле конфигурации. По умолчанию для этого урока server
.
./build-key-server server Снова, выход будет запрашивать подтверждение Отличительного Имени. Нажмите, 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] Затем вам будет предложено следующее, указывая на успех. Output Write out database with 1 new entries Data Base Updated
Шаг 7 - Переместите сертификаты и ключи сервера
Теперь мы скопируем сертификат и ключ /etc/openvpn
, так как OpenVPN будет искать в этом каталоге CA, сертификат и ключ сервера.
cp /etc/openvpn/easy-rsa/keys/{server.crt,server.key,ca.crt} /etc/openvpn Вы можете убедиться, что копия была успешной с: ls /etc/openvpn На этом этапе сервер OpenVPN готов к работе. Запустите его и проверьте статус. service openvpn start service openvpn status Команда 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) Самое главное, из вывода выше, вы должны найти Active: active (exited) since...вместо Active: inactive (dead) since.... Ваш сервер 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, идеально иметь собственный уникальный сертификат и ключ. Это предпочтительно для генерации одного общего сертификата и ключа для использования среди всех клиентских устройств.
Чтобы создать отдельные учетные данные для аутентификации для каждого устройства, которое вы намереваетесь подключить к VPN,
вы должны выполнить этот шаг для каждого устройства, но измените приведенное client1
ниже имя на другое,
например, client2
или iphone2
. При наличии отдельных учетных данных для каждого устройства их можно впоследствии
деактивировать на сервере индивидуально, если это необходимо. Остальные примеры в этом руководстве будут использоваться
в client1
качестве имени нашего примера клиентского устройства.
Как и в случае с ключом сервера, теперь мы создаем его для нашего client1
примера. Вы все еще должны работать вне /etc/openvpn/easy-rsa
.
./build-key client1 Еще раз вам будет предложено изменить или подтвердить переменные Distinguished Name и эти два запроса, которые следует оставить пустыми. Нажмите, 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 Затем мы скопируем сгенерированный ключ в keysкаталог Easy-RSA, который мы создали ранее. Обратите внимание, что мы меняем расширение с .conf на .ovpn. Это соответствует соглашению. cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/easy-rsa/keys/client.ovpn Нам нужно изменить каждый клиентский файл, чтобы он включал IP-адрес сервера OpenVPN, чтобы он знал, к чему подключаться. Откройте client.ovpnс помощью вашего текстового редактора. редактора /etc/openvpn/easy-rsa/keys/client.ovpn Сначала отредактируйте строку, начинающуюся с remote. Изменить my-server-1 на your_server_ip. # The hostname/IP and port of the server. # You can have multiple remote entries # to load balance between the servers. remote your_server_ip 1194 Затем найдите область, показанную ниже, и раскомментируйте, user nobody и group nogroup, как мы это делали server.conf в шаге 1. Примечание. Это не относится к Windows, поэтому вы можете пропустить ее. Это должно выглядеть следующим образом: # Downgrade privileges after initialization (non-Windows only) user nobody group no group
Передача сертификатов и ключей на клиентские устройства
Вспомните из вышеприведенных шагов, что мы создали клиентские сертификаты и ключи и что они хранятся на сервере OpenVPN в /etc/openvpn/easy-rsa/keys
каталоге.
Для каждого клиента нам нужно перенести файлы сертификата, ключа и шаблона клиента в папку на локальном компьютере или другом клиентском устройстве.
В этом примере нашему client1
устройству требуются его сертификат и ключ, расположенный на сервере в:
/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) на серверной части. При этом файлы аутентификации VPN вашего клиента будут передаваться через зашифрованное соединение.
Вот пример команды SCP, использующей наш client1
пример. Он помещает файл client1.key
в каталог загрузок на локальном компьютере.
scp root@your-server-ip:/etc/openvpn/easy-rsa/keys/client1.key Downloads/
В конце этого раздела убедитесь, что у вас есть эти четыре файла на вашем клиентском устройстве:
- client1.crt
- client1.key
- client.ovpn
- ca.crt
Шаг 9 - Создание унифицированного профиля OpenVPN для клиентских устройств
Существует несколько способов управления клиентскими файлами, но самый простой - использовать унифицированный профиль.
Это создается путем изменения client.ovpn
файла шаблона, чтобы включить центр сертификации сервера, а также сертификат клиента и его ключ.
После объединения client.ovpn
в клиентское приложение OpenVPN необходимо импортировать только один профиль.
В приведенной ниже области необходимо закомментировать три строки, чтобы мы могли
вместо этого включить сертификат и ключ непосредственно в client.ovpn
файл. Это должно выглядеть следующим образом:
/etc/openvpn/easy-rsa/keys/client.ovpn # SSL/TLS parms. # . . . ;ca ca.crt ;cert client.crt ;key client.key Сохраните изменения и выйдите. Мы добавим сертификаты по коду. Сначала добавьте центр сертификации. echo '
' >> /etc/openvpn/easy-rsa/keys/client.ovpn cat /etc/openvpn/ca.crt >> /etc/openvpn/easy-rsa/keys/client.ovpn echo ' ' >> /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
Теперь у нас есть унифицированный профиль клиента. Используя scp, вы можете скопировать client.ovpn
файл в вашу вторую систему.
Шаг 10 - Установка клиентского профиля
Различные платформы имеют более удобные приложения для подключения к этому серверу OpenVPN.
Заключение
Теперь у вас есть работающий сервер OpenVPN и файл клиента.