Доводим до ума наш OpenVPN.
У нас он уже в продакшене, пользуемся.
Вкусно, просто, удобно. Встроенная поддержка ACL вообще замечательна, но о ней, может быть, в другом посте.
Сейчас надо настроить SSL, что бы браузеры и клиенты не ругались.
Документация по настройке SSL в OpenVPN AS — тут>>>.
Let’s Encrypt
Устанавливаем Let’s Encrypt клиент:
root@openvpnas2:~# git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
Открываем порт 80 в AWS Security Group — это безопасно, т.к. сам OpenVPN AS слушает только порт 443 для клиентов и 943 — для доступа в админпанель.
Получаем сертификат:
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
SSL в OpenVPN
Изменить сертификат в базе данных конфигурации OpenVPN можно через Admin UI в разделе Web Server Configuration, либо с помощью CLI.
При первом запуске — OpenVPN AS генерирует self-signed сертификаты, которые хранятся в каталоге /usr/local/openvpn_as/etc/web-ssl/
:
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
Они являются как бы резервными, на случай проблем с основными сертификатами.
Для настройки SSL потребуется три файла, в случае с Let’s Encrypt это будут:
*.crt
— это наш fullchain.pem
файл
*.key
— privkey.pem
файл
*.bundle
— создадим из fullchain.pem
и privkey.pem
Проверяем файлы сертификата от Let’s Ecncrypt:
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
Устанавливаем ключ:
root@openvpnas2:/etc/letsencrypt/live/vpn.example.com# /usr/local/openvpn_as/scripts/sacli --key "cs.priv_key" --value_file "privkey.pem" ConfigPut
[True, {}]
Устанавливаем публичную часть:
root@openvpnas2:/etc/letsencrypt/live/vpn.example.com# /usr/local/openvpn_as/scripts/sacli --key "cs.cert" --value_file "fullchain.pem" ConfigPut
[True, {}]
Создаём bundle:
root@openvpnas2:/etc/letsencrypt/live/vpn.example.com# cat fullchain.pem privkey.pem > bundle.pem
Загружаем его в базу настроек OpenVPN AS:
root@openvpnas2:/etc/letsencrypt/live/vpn.example.com# /usr/local/openvpn_as/scripts/sacli --key "cs.ca_bundle" --value_file "bundle.pem" ConfigPut
[True, {}]
Перезапускаем сервис:
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']
Проверяем:

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

Готово.