OpenVPN: настройка SSL и hostname

Автор: | 26/02/2019
 

Доводим до ума наш OpenVPN.

У нас он уже в продакшене, пользуемся.

Вкусно, просто, удобно. Встроенная поддержка ACL вообще замечательна, но о ней, может быть, в другом посте.

Сейчас надо настроить SSL, что бы браузеры и клиенты не ругались.

Документация по настройке SSL в OpenVPN AS – тут>>>.

Let’s Encrypt

Устанавливаем Let’s Encrypt клиент:

[simterm]

root@openvpnas2:~# git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt

[/simterm]

Открываем порт 80 в AWS Security Group – это безопасно, т.к. сам OpenVPN AS слушает только порт 443 для клиентов и 943 – для доступа в админпанель.

Получаем сертификат:

[simterm]

root@openvpnas2:~# /opt/letsencrypt/letsencrypt-auto certonly -d vpn.example.com
...
1: Spin up a temporary webserver (standalone)
...
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/vpn.example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/vpn.example.com/privkey.pem

[/simterm]

SSL в OpenVPN

Изменить сертификат в базе данных конфигурации OpenVPN можно через Admin UI в разделе Web Server Configuration, либо с помощью CLI.

При первом запуске – OpenVPN AS генерирует self-signed сертификаты, которые хранятся в каталоге /usr/local/openvpn_as/etc/web-ssl/:

[simterm]

root@openvpnas2:~# ls -l /usr/local/openvpn_as/etc/web-ssl/
total 16
-rw-r--r-- 1 root root 1111 Feb 21 14:50 ca.crt
-rw------- 1 root root 1708 Feb 21 14:50 ca.key
-rw-r--r-- 1 root root 1082 Feb 21 14:50 server.crt
-rw------- 1 root root 1704 Feb 21 14:50 server.key

[/simterm]

Они являются как бы резервными, на случай проблем с основными сертификатами.

Для настройки SSL потребуется три файла, в случае с Let’s Encrypt это будут:

  • *.crt – это наш fullchain.pem файл
  • *.keyprivkey.pem файл
  • *.bundle – создадим из fullchain.pem и privkey.pem

Проверяем файлы сертификата от Let’s Ecncrypt:

[simterm]

root@openvpnas2:/etc/letsencrypt/live/vpn.example.com# ls -l
total 4
lrwxrwxrwx 1 root root  42 Feb 22 10:56 cert.pem -> ../../archive/vpn.example.com/cert1.pem
lrwxrwxrwx 1 root root  43 Feb 22 10:56 chain.pem -> ../../archive/vpn.example.com/chain1.pem
lrwxrwxrwx 1 root root  47 Feb 22 10:56 fullchain.pem -> ../../archive/vpn.example.com/fullchain1.pem
lrwxrwxrwx 1 root root  45 Feb 22 10:56 privkey.pem -> ../../archive/vpn.example.com/privkey1.pem

[/simterm]

Устанавливаем ключ:

[simterm]

root@openvpnas2:/etc/letsencrypt/live/vpn.example.com# /usr/local/openvpn_as/scripts/sacli --key "cs.priv_key" --value_file "privkey.pem" ConfigPut
[True, {}]

[/simterm]

Устанавливаем публичную часть:

[simterm]

root@openvpnas2:/etc/letsencrypt/live/vpn.example.com# /usr/local/openvpn_as/scripts/sacli --key "cs.cert" --value_file "fullchain.pem" ConfigPut
[True, {}]

[/simterm]

Создаём bundle:

[simterm]

root@openvpnas2:/etc/letsencrypt/live/vpn.example.com# cat fullchain.pem privkey.pem > bundle.pem

[/simterm]

Загружаем его в базу настроек OpenVPN AS:

[simterm]

root@openvpnas2:/etc/letsencrypt/live/vpn.example.com# /usr/local/openvpn_as/scripts/sacli --key "cs.ca_bundle" --value_file "bundle.pem" ConfigPut
[True, {}]

[/simterm]

Перезапускаем сервис:

[simterm]

root@openvpnas2:/etc/letsencrypt/live/vpn.example.com# /usr/local/openvpn_as/scripts/sacli start
RunStart warm None
{
  "errors": {}, 
  "service_status": {
    "api": "on", 
    "auth": "on", 
    "bridge": "on", 
    "client_query": "restarted", 
    "crl": "on", 
    "daemon_pre": "on", 
    "db_push": "on", 
    "ip6tables_live": "on", 
    "ip6tables_openvpn": "on", 
    "iptables_live": "on", 
    "iptables_openvpn": "on", 
    "iptables_web": "restarted", 
    "license": "on", 
    "log": "on", 
    "openvpn_0": "on", 
    "openvpn_1": "on", 
    "user": "on", 
    "web": "restarted"
  }
}
WILL_RESTART ['web', 'client']

[/simterm]

Проверяем:

OpenVN hostname

Последним шагом, если не было сделано во время установки – меняем имя хоста в Network Settings:

Готово.