Как настроить сервер 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 и файл клиента.

Хостинг провайдер © Digitbox