Как настроить сервер OpenVPN в Ubuntu 16.04

Вам нужно настроить sudo привилегированных пользователей, прежде чем вы начнете это руководство. Вы можете следовать нашему руководству по первоначальной настройке сервера Ubuntu 16.04, чтобы настроить пользователя с соответствующими разрешениями. В связанном учебном пособии также будет установлен брандмауэр , который, как мы предполагаем, будет установлен в этом руководстве.

Шаг 1 - Установите OpenVPN

Для начала мы установим OpenVPN на наш сервер. OpenVPN доступен в репозиториях Ubuntu по умолчанию, поэтому мы можем использовать его apt для установки. Мы также будем устанавливать easy-rsa пакет, который поможет нам настроить внутренний CA (центр сертификации) для использования с нашей VPN.

Чтобы обновить индекс пакета вашего сервера и установить необходимые пакеты, введите:

  •   sudo apt-get update
    sudo apt-get install openvpn easy-rsa 

Необходимое программное обеспечение теперь на сервере, готово к настройке.

Шаг 2 - Настройка CA Directory

OpenVPN - это TLS / SSL VPN. Это означает, что он использует сертификаты для шифрования трафика между сервером и клиентами. Для выдачи доверенных сертификатов нам потребуется настроить наш собственный простой центр сертификации (CA).

Для начала мы можем скопировать easy-rsa каталог шаблонов в наш домашний каталог с помощью make-cadir команды:

  •   make-cadir ~/openvpn-ca
     Перейдите во вновь созданный каталог, чтобы начать настройку CA:
     cd ~/openvpn-ca
      

Шаг 3 - Настройте переменные CA

  •  Чтобы настроить значения, которые будет использовать наш ЦС,
     нам нужно отредактировать vars файл в каталоге.
     Откройте этот файл сейчас в вашем текстовом редакторе:
     nano vars
     Внутри вы найдете несколько переменных, которые можно настроить,
     чтобы определить, как будут создаваться ваши сертификаты.
     Нам нужно беспокоиться только о некоторых из них.
    
     Внизу файла найдите параметры, которые устанавливают значения по
     умолчанию для новых сертификатов. Это должно выглядеть примерно так:
     export KEY_COUNTRY="US"
     export KEY_PROVINCE="CA"
     export KEY_CITY="SanFrancisco"
     export KEY_ORG="Fort-Funston"
     export KEY_EMAIL="me@myhost.mydomain"
     export KEY_OU="MyOrganizationalUnit"
     Измените значения в красном цвете по
     своему усмотрению, но не оставляйте их пустыми:
     export KEY_COUNTRY="RU"
     export KEY_PROVINCE="MS"
     export KEY_CITY="Moskow"
     export KEY_ORG="Digitbox"
     export KEY_EMAIL="admin@example.com"
     export KEY_OU="Community"
     Пока мы здесь, мы также отредактируем KEY_NAME значение чуть ниже этого
     раздела, который заполняет поле темы.
     Для простоты мы назовем это server в этом руководстве:
     export KEY_NAME="server"  

Когда вы закончите, сохраните и закройте файл.

Шаг 4 - Создайте центр сертификации

Теперь мы можем использовать переменные, которые мы установили, и easy-rsa утилиты для создания нашего центра сертификации.

  •  Убедитесь, что вы находитесь в каталоге CA,
     а затем отправьте vars файл, который вы только что отредактировали:
     cd ~/openvpn-ca
     source vars
     Убедитесь, что мы работаем в чистой среде, набрав:
     ./clean-all
     Теперь мы можем построить наш корневой CA, набрав:
     ./build-ca
     Убедитесь, что мы работаем в чистой среде, набрав:
     Это инициирует процесс создания корневого ключа центра сертификации и сертификата.
     Поскольку мы заполнили vars файл, все значения должны быть заполнены автоматически.
     Просто нажмите клавишу ВВОД через подсказки, чтобы подтвердить выбор:  

Теперь у нас есть центр сертификации, который можно использовать для создания остальных файлов, которые нам нужны.

Шаг 5 - Создайте сертификат сервера, ключ и файлы шифрования

Затем мы создадим наш сертификат сервера и пару ключей, а также некоторые дополнительные файлы, используемые в процессе шифрования.

  •   ./build-key-server server
     Еще раз, у подсказок будут значения по умолчанию, основанные
     на аргументе, который мы только что передали ( server), и
     содержимом нашего vars файла, который мы получили.
    
     Не стесняйтесь принимать значения по умолчанию, нажав ENTER .
     Вы не ввести пароль вызова для этой установки. В конце вам нужно
     будет ввести y на два вопроса, чтобы подписать и подтвердить сертификат: 
     Certificate is to be certified until May  1 17:51:16 2026 GMT (3650 days)
     Sign the certificate? [y/n]:y
    
     1 out of 1 certificate requests certified, commit? [y/n]y
     Write out database with 1 new entries
     Data Base Updated
     Далее мы сгенерируем несколько других предметов.
     Мы можем генерировать сильные ключи Диффи-Хеллмана для использования
     во время обмена ключами, набрав: 
     ./build-dh
     После этого мы можем сгенерировать подпись HMAC,
     чтобы усилить возможности проверки целостности TLS на сервере: 
     openvpn --genkey --secret keys/ta.key   

Шаг 6 - Генерация клиентского сертификата и пары ключей

Далее мы можем сгенерировать клиентский сертификат и пару ключей. Хотя это может быть сделано на клиентском компьютере и затем подписано сервером / ЦС в целях безопасности, для этого руководства мы сгенерируем подписанный ключ на сервере для простоты.

Для этого руководства мы создадим один ключ / сертификат клиента, но если у вас более одного клиента, вы можете повторить этот процесс столько раз, сколько захотите. Передайте уникальное значение скрипту для каждого клиента.

Поскольку вы можете вернуться к этому шагу позже, мы повторно предоставим varsфайл. Мы будем использовать client1в качестве значения для нашей первой пары сертификат / ключ для этого руководства.

  •  Чтобы создать учетные данные без пароля,
     чтобы помочь в автоматических соединениях, используйте
     build-key команду, подобную этой:
     cd ~/openvpn-ca
     source vars
     ./build-key client1
     Если вместо этого вы хотите создать защищенный
     паролем набор учетных данных, используйте build-key-pass команду:
     cd ~/openvpn-ca
     source vars
     ./build-key-pass client1  

Опять же, значения по умолчанию должны быть заполнены, так что вы можете просто нажать ENTER, чтобы продолжить. Оставьте пароль вызова пустым и обязательно введите y для запросов, которые спрашивают, следует ли подписывать и подтверждать сертификат.

Шаг 7 - Настройка службы OpenVPN

Затем мы можем начать настройку службы OpenVPN с использованием сгенерированных нами учетных данных и файлов.

Скопируйте файлы в каталог OpenVPN

Для начала нам нужно скопировать нужные нам файлы в /etc/openvpn каталог конфигурации.

Мы можем начать со всех файлов, которые мы только что сгенерировали. Они были размещены в ~/openvpn-ca/keys каталоге, как они были созданы. Нам нужно переместить наш сертификат CA, наш сертификат сервера и ключ, подпись HMAC и файл Diffie-Hellman:

  •   cd ~/openvpn-ca/keys
     sudo cp ca.crt server.crt server.key ta.key dh2048.pem /etc/openvpn
     Затем нам нужно скопировать и распаковать
     пример файла конфигурации OpenVPN в каталог конфигурации, чтобы мы
     могли использовать его в качестве основы для нашей установки:
     gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz
     | sudo tee /etc/openvpn/server.conf  

Настройте конфигурацию OpenVPN

  •  Теперь, когда наши файлы на месте, мы
     можем изменить файл конфигурации сервера:
     sudo nano /etc/openvpn/server.conf
     Сначала найдите раздел HMAC, ища tls-authдирективу. Удалите « ; »,
     чтобы раскомментировать tls-auth строку.
     Ниже добавьте key-direction набор параметров в «0»:
     tls-auth ta.key 0 # This file is secret
     key-direction 0
     Затем найдите раздел о криптографических шифрах,
     sотыскивая закомментированные cipher строки.
     AES-128-CBC Шифра предлагает хороший уровень шифрования и хорошо поддерживается.
     Удалите « ; », чтобы раскомментировать cipher AES-128-CBC строку: 
     cipher AES-128-CBC
     Ниже добавьте auth строку, чтобы выбрать алгоритм
     дайджеста сообщений HMAC. Для этого SHA256 хороший выбор: 
     auth SHA256
     И, наконец, найти userи group настройки и удалить
     « ; » в начале раскомментировать эти строки:
     user nobody
     group nogroup
     Вы можете сделать это, раскомментировав несколько директив,
     которые будут настраивать клиентские машины для
     перенаправления всего веб-трафика через VPN.
     Найдите redirect-gateway раздел и удалите точку с запятой " ; "
     в начале redirect-gateway строки, чтобы раскомментировать ее: 
     push "redirect-gateway def1 bypass-dhcp"
     Чуть ниже найдите dhcp-option раздел.
     Снова удалите " ; " перед обеими строками, чтобы раскомментировать их: 
     push "dhcp-option DNS 208.67.222.222"
     push "dhcp-option DNS 208.67.220.220"
     Это должно помочь клиентам перенастроить свои настройки
     DNS для использования VPN-туннеля в качестве шлюза по умолчанию.   

Когда вы закончите, сохраните и закройте файл.

Шаг 8 - Настройте конфигурацию сети сервера

Затем нам нужно настроить некоторые аспекты работы сети на сервере, чтобы OpenVPN мог правильно маршрутизировать трафик.

Разрешить IP-пересылку

Во-первых, нам нужно разрешить серверу пересылать трафик. Это очень важно для функциональности, которую мы хотим, чтобы наш VPN-сервер предоставил.

  •  Мы можем изменить этот параметр, изменив /etc/sysctl.conf файл:
     sudo nano /etc/sysctl.conf
     Внутри ищите линию, которая устанавливает net.ipv4.ip_forward.
     Удалите символ « # » в начале строки, чтобы раскомментировать этот параметр:
     net.ipv4.ip_forward=1
     Чтобы прочитать файл и настроить значения для текущего сеанса, введите:
     sudo sysctl -p  

Настройте правила UFW для маскировки клиентских подключений

Если вы выполнили предварительные требования к руководству по первоначальной настройке сервера Ubuntu 16.04, у вас должен быть установлен брандмауэр UFW. Независимо от того, используете ли вы брандмауэр для блокировки нежелательного трафика (что вы почти всегда должны делать), нам нужен брандмауэр в этом руководстве, чтобы манипулировать частью трафика, поступающего на сервер. Нам нужно изменить файл правил, чтобы настроить маскарадинг - iptables концепцию, которая обеспечивает динамический NAT на лету для правильной маршрутизации клиентских соединений.

  •  Прежде чем мы откроем файл конфигурации брандмауэра
     для добавления маскировки, нам нужно найти
     общедоступный сетевой интерфейс нашей машины. Для этого введите:
     ip route | grep default
     Ваш общедоступный интерфейс должен следовать за словом «dev».
     Например, этот результат показывает интерфейс с именем wlp11s0, который выделен ниже:
     Когда у вас есть интерфейс, связанный с вашим маршрутом по умолчанию,
     откройте /etc/ufw/before.rules файл, чтобы добавить соответствующую конфигурацию:
     sudo nano /etc/ufw/before.rules
     Этот файл обрабатывает конфигурацию, которая должна быть введена в действие
     перед загрузкой обычных правил UFW. В верхней части
     файла добавьте выделенные строки ниже.
     Это установит политику по умолчанию для POSTROUTING цепочки в
     nat таблице и маскирует любой трафик, поступающий из VPN:
       Примечание : не забудьте заменить wlp11s0в -A POSTROUTING строке ниже
     интерфейс, который вы нашли в приведенной выше команде.
     # 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 wlp11s0 (change to
     the interface you discovered!)
     -A POSTROUTING -s 10.8.0.0/8 -o wlp11s0 -j MASQUERADE
     COMMIT
     # END OPENVPN RULES
    
     # Don't delete these required lines, otherwise there will be errors
     *filter
     Нам нужно указать UFW, чтобы по умолчанию также разрешались
     пересылка пакетов. Для этого мы откроем /etc/default/ufw файл: 
     sudo nano /etc/default/ufw
     Внутри найдите DEFAULT_FORWARD_POLICY директиву.
     Мы изменим значение с DROPна ACCEPT: 
     DEFAULT_FORWARD_POLICY="ACCEPT"  

Откройте порт OpenVPN и включите изменения

Далее мы настроим сам брандмауэр, чтобы пропускать трафик к OpenVPN.

Если вы не изменили порт и протокол в /etc/openvpn/server.conf файле, вам потребуется открыть UDP-трафик для порта 1194. Если вы изменили порт и / или протокол, подставьте значения, которые вы выбрали здесь.

  •  Мы также добавим порт SSH на тот случай, если
     вы забыли добавить его, следуя обязательному руководству:
     sudo ufw allow 1194/udp
     sudo ufw allow OpenSSH
     Теперь мы можем отключить и снова включить UFW,
     чтобы загрузить изменения из всех файлов, которые мы изменили:
     sudo ufw disable
     sudo ufw enable  

Наш сервер теперь настроен для правильной обработки трафика OpenVPN.

Шаг 9 - Запустите и включите службу OpenVPN

Мы наконец-то готовы запустить сервис OpenVPN на нашем сервере. Мы можем сделать это с помощью systemd.

Нам нужно запустить сервер OpenVPN, указав имя нашего файла конфигурации в качестве переменной экземпляра после имени файла системного модуля. Наш конфигурационный файл для нашего сервера называется , поэтому мы добавим в конец нашего файла модуля при его вызове:/etc/openvpn/server.conf@server

  •   sudo systemctl start openvpn@server
     Дважды проверьте, что служба успешно запущена, набрав:
     sudo systemctl status openvpn@server
     Если все прошло хорошо, ваш вывод должен выглядеть примерно так: 
     openvpn@server.service - OpenVPN connection to server
       Loaded: loaded (/lib/systemd/system/openvpn@.service; disabled; vendor preset: enabled)
       Active: active (running) since Tue 2016-05-03 15:30:05 EDT; 47s ago
         Docs: man:openvpn(8)
               https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage
               https://community.openvpn.net/openvpn/wiki/HOWTO
      Process: 5852 ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status
         /run/openvpn/%i.status 10
     --cd /etc/openvpn --script-security 2
     --config /etc/openvpn/%i.conf --writepid /run/openvpn/%i.pid (code=exited, sta
      Main PID: 5856 (openvpn)
        Tasks: 1 (limit: 512)
       CGroup: /system.slice/system-openvpn.slice/openvpn@server.service
               └─5856 /usr/sbin/openvpn --daemon ovpn-server --status
         /run/openvpn/server.status 10
     --cd /etc/openvpn
     --script-security 2 --config /etc/openvpn/server.conf --writepid /run/openvpn/server.pid
    
     May 03 15:30:05 openvpn2 ovpn-server[5856]: /sbin/ip addr add
     dev tun0 local 10.8.0.1 peer 10.8.0.2
     May 03 15:30:05 openvpn2 ovpn-server[5856]: /sbin/ip route add 10.8.0.0/24 via 10.8.0.2
     May 03 15:30:05 openvpn2 ovpn-server[5856]: GID set to nogroup
     May 03 15:30:05 openvpn2 ovpn-server[5856]: UID set to nobody
     May 03 15:30:05 openvpn2 ovpn-server[5856]: UDPv4 link local (bound): [undef]
     May 03 15:30:05 openvpn2 ovpn-server[5856]: UDPv4 link remote: [undef]
     May 03 15:30:05 openvpn2 ovpn-server[5856]: MULTI: multi_init called, r=256 v=256
     May 03 15:30:05 openvpn2 ovpn-server[5856]: IFCONFIG POOL: base=10.8.0.4 size=62, ipv6=0
     May 03 15:30:05 openvpn2 ovpn-server[5856]: IFCONFIG POOL LIST
     May 03 15:30:05 openvpn2 ovpn-server[5856]: Initialization Sequence Completed
     Вы также можете проверить tun0доступность интерфейса OpenVPN , набрав: 
     ip addr show tun0
     Вы должны увидеть настроенный интерфейс: 
     4: tun0:  mtu 1500 qdisc noqueue state UNKNOWN group default qlen 100
        link/none
        inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
           valid_lft forever preferred_lft forever
     Если все прошло хорошо, включите службу,
     чтобы она автоматически запускалась при загрузке: 
     sudo systemctl enable openvpn@server
      

Шаг 10 - Создайте инфраструктуру конфигурации клиента

Далее нам нужно настроить систему, которая позволит нам легко создавать файлы конфигурации клиента.

Создание структуры каталога конфигурации клиента

  •  Создайте структуру каталогов в вашем домашнем каталоге для хранения файлов:
     mkdir -p ~/client-configs/files
     Поскольку в наши файлы конфигурации клиента будут встроены клиентские
     ключи, мы должны заблокировать разрешения для нашего внутреннего каталога:
     chmod 700 ~/client-configs/files  

Создание базовой конфигурации

  •  Далее, давайте скопируем пример конфигурации
     клиента в наш каталог для использования в качестве нашей базовой конфигурации:
     cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf
     ~/client-configs/base.conf
     Откройте этот новый файл в вашем текстовом редакторе:
     nano ~/client-configs/base.conf
     Сначала найдите remote директиву. Это указывает клиенту на наш
     адрес сервера OpenVPN. Это должен быть публичный IP-адрес вашего сервера OpenVPN.
     Если вы изменили порт, который прослушивает сервер OpenVPN,
     измените 1194 на выбранный вами порт: 
     # The hostname/IP and port of the server.
     # You can have multiple remote entries
     # to load balance between the servers.
     remote server_IP_address 1194
     Убедитесь, что протокол соответствует значению,
     которое вы используете в конфигурации сервера: 
     proto udp
     Далее раскомментируйте директивы userand group, удалив символ " ; ": 
     # Downgrade privileges after initialization (non-Windows only)
     user nobody
     group nogroup
     Найти директивы , которые устанавливают ca, cert и key.
     Закомментируйте эти директивы, так как мы будем добавлять
     сертификаты и ключи в сам файл: 
     # SSL/TLS parms.
     # See the server config file for more
     # description.  It's best to use
     # a separate .crt/.key file pair
     # for each client.  A single ca
     # file can be used for all clients.
     #ca ca.crt
     #cert client.crt
     #key client.key
     Отразите настройки cipherи auth настройки,
     которые мы установили в /etc/openvpn/server.conf файле: 
     cipher AES-128-CBC
     auth SHA256
     Затем добавьте key-direction директиву где-нибудь в файле.
     Это должно быть установлено в «1» для работы с сервером:  
     key-direction 1
     Наконец, добавьте несколько закомментированных строк.
     Мы хотим включить их в каждую конфигурацию, но должны
     включать их только для клиентов Linux,
     которые поставляются с /etc/openvpn/update-resolv-conf файлом.
     Этот скрипт использует resolvconf утилиту
     для обновления информации DNS для клиентов Linux.  
     # script-security 2
     # up /etc/openvpn/update-resolv-conf
     # down /etc/openvpn/update-resolv-conf  

Если ваш клиент работает под управлением Linux и имеет /etc/openvpn/update-resolv-conf файл, вы должны раскомментировать эти строки из сгенерированного файла конфигурации клиента OpenVPN.

Создание скрипта генерации конфигурации

Далее мы создадим простой скрипт для компиляции нашей базовой конфигурации с соответствующими сертификатами, ключами и файлами шифрования. Это поместит сгенерированную конфигурацию в ~/client-configs/files каталог.

  •  Создайте и откройте файл с именем make_config.shв ~/client-configs каталоге:
     nano ~/client-configs/make_config.sh
     Внутри вставьте следующий скрипт:
     KEY_DIR=~/openvpn-ca/keys
     OUTPUT_DIR=~/client-configs/files
     BASE_CONFIG=~/client-configs/base.conf
    
     cat ${BASE_CONFIG} \
        <(echo -e '') \
        ${KEY_DIR}/ca.crt \
        <(echo -e '\n') \
        ${KEY_DIR}/${1}.crt \
        <(echo -e '\n') \
        ${KEY_DIR}/${1}.key \
        <(echo -e '\n') \
        ${KEY_DIR}/ta.key \
        <(echo -e '') \
        > ${OUTPUT_DIR}/${1}.ovpn
     Отметьте файл как исполняемый, набрав:
     chmod 700 ~/client-configs/make_config.sh
      

Шаг 11 - Генерация клиентских конфигураций

Если вы следовали этому руководству, вы создали клиентский сертификат и ключ с именем client1.crt и, client1.key соответственно, выполнив команду на шаге 6. Мы можем создать конфигурацию для этих учетных данных, перейдя в наш каталог и используя скрипт, который мы сделали:./build-key client1~/client-configs

  •   cd ~/client-configs
     ./make_config.sh client1
     Если все прошло хорошо, у нас должен быть client1.ovpn
     файл в нашем ~/client-configs/files каталоге:
     ls ~/client-configs/files  

Передача конфигурации на клиентские устройства

Нам нужно перенести файл конфигурации клиента на соответствующее устройство. Например, это может быть ваш локальный компьютер или мобильное устройство.

Хотя точные приложения, используемые для выполнения этой передачи, будут зависеть от вашего выбора и операционной системы устройства, вы хотите, чтобы приложение использовало SFTP (протокол передачи файлов SSH) или SCP (Secure Copy) на серверной части. При этом файлы аутентификации VPN вашего клиента будут передаваться через зашифрованное соединение.

  •  Вот пример команды SFTP с использованием нашего примера client1.ovpn .
     Эта команда может быть запущена с вашего локального компьютера (OS X или Linux).
     Он помещает .ovpn файл в ваш домашний каталог:
     sftp sammy@openvpn_server_ip:client-configs/files/client1.ovpn ~/
     Далее сделаем несколько небольших изменений в файле конфигурации PHP.
     Откройте файл конфигурации Apache PHP в текстовом редакторе, например vi:
     vi /etc/php/7.0/apache2/php.ini  

Шаг 14 - Отзыв клиентских сертификатов

Иногда вам может потребоваться отозвать сертификат клиента, чтобы предотвратить дальнейший доступ к серверу OpenVPN.

  •  Для этого введите каталог CA и повторно введите vars файл:
     cd ~/openvpn-ca
     source vars
     Затем вызовите revoke-full команду, используя имя клиента, которое вы хотите отозвать: 
     ./revoke-full client3
     Это покажет некоторый вывод, заканчивающийся на error 23.
     Это нормально, и процесс должен был успешно
     сгенерировать необходимую информацию об аннулировании,
     которая хранится в файле, вызываемом crl.pem в keys подкаталоге.
    
     Перенесите этот файл в /etc/openvpn каталог конфигурации: 
     sudo cp ~/openvpn-ca/keys/crl.pem /etc/openvpn
     Затем откройте файл конфигурации сервера OpenVPN: 
     sudo nano /etc/openvpn/server.conf
     В нижней части файла добавьте crl-verify параметр, чтобы сервер
     OpenVPN проверял список отзыва сертификатов, который мы
     создавали каждый раз при попытке подключения: 
     crl-verify crl.pem
     Наконец, перезапустите OpenVPN для реализации отзыва сертификата: 
     sudo systemctl restart openvpn@server  

Теперь клиент больше не сможет успешно подключаться к серверу, используя старые учетные данные.

Чтобы отозвать дополнительных клиентов, выполните этот процесс:

  • Создайте новый список отзыва сертификатов, найдя vars файл в ~/openvpn-ca каталоге, а затем вызвав revoke-full скрипт на имя клиента.
  • Скопируйте новый список отзыва сертификатов в /etc/openvpn каталог, чтобы перезаписать старый список.
  • Перезапустите сервис OpenVPN.

Заключение

Теперь вы безопасно пересекаете Интернет, защищая свою личность, местоположение и трафик от злоумышленников и цензоров.

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