===== OpenVPN Access Server =====
{{tag>linux openvpn routing aws}}
==== Auto install with SSL Cert. ====
Launch an Amazon Linux 2 instance with the following user data. Security Group will need to allow;
* SSH (TCP:22)
* HTTP (TCP:80)
* HTTPS (TCP:443)
* Admin (TCP:943)
* OpenVPN (UDP:1194)
#!/bin/bash
yum -y install ncurses-compat-libs
yum -y install https://as-repository.openvpn.net/as-repo-centos7.rpm
yum -y install openvpn-as
yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install certbot
sudo certbot certonly -n -d VPN.DOMAIN.TLD --email hostmaster@DOMAIN.TLD --no-eff-email --agree-tos --standalone
sudo systemctl stop openvpnas
sudo rm /usr/local/openvpn_as/etc/web-ssl/server.key
sudo rm /usr/local/openvpn_as/etc/web-ssl/server.crt
sudo rm /usr/local/openvpn_as/etc/web-ssl/ca.crt
sudo ln -s /etc/letsencrypt/live/VPN.DOMAIN.TLD/privkey.pem /usr/local/openvpn_as/etc/web-ssl/server.key
sudo ln -s /etc/letsencrypt/live/VPN.DOMAIN.TLD/cert.pem /usr/local/openvpn_as/etc/web-ssl/server.crt
sudo ln -s /etc/letsencrypt/live/VPN.DOMAIN.TLD/chain.pem /usr/local/openvpn_as/etc/web-ssl/ca.crt
sudo systemctl start openvpnas
sudo /usr/local/openvpn_as/scripts/sacli --import GetActiveWebCerts
sudo /usr/local/openvpn_as/scripts/sacli start
After install SSH to instance and set password for openvpn user.
sudo passwd openvpn
==== Configure auto renewal of SSL Cert ====
Create script /home/ec2-user/cert_loader.sh
#!/bin/bash
/usr/local/openvpn_as/scripts/sacli --key "cs.priv_key" --value_file "/usr/local/openvpn_as/etc/web-ssl/privkey.pem" ConfigPut
/usr/local/openvpn_as/scripts/sacli --key "cs.cert" --value_file "/usr/local/openvpn_as/etc/web-ssl/cert.pem" ConfigPut
/usr/local/openvpn_as/scripts/sacli --key "cs.ca_bundle" --value_file "/usr/local/openvpn_as/etc/web-ssl/chain.pem" ConfigPut
/usr/local/openvpn_as/scripts/sacli start
Edit crontab for root user to call renewal with cert loader as a post-hook.
1 1 * * 2 certbot renew --standalone --preferred-challenges http --pre-hook '' --post-hook '/home/ec2-user/cert_loader.sh' > /var/log/cert_loader.log
----
==== Old ====
Backup default self signed certificates;
$ mkdir old-ss-cert
$ sudo cp /usr/local/openvpn_as/etc/web-ssl/* ./old-ss-cert/
\\
Install LetsEncrypt SSL certificate;
$ sudo systemctl stop openvpnas
$ sudo apt-get install letsencrypt
$ sudo letsencrypt certonly
$ sudo cp /etc/letsencrypt/live/CERTNAME/cert.pem /usr/local/openvpn_as/etc/web-ssl/server.crt
$ sudo cp /etc/letsencrypt/live/CERTNAME/privkey.pem /usr/local/openvpn_as/etc/web-ssl/server.key
$ sudo cp /etc/letsencrypt/live/CERTNAME/chain.pem /usr/local/openvpn_as/etc/web-ssl/ca.crt
$ sudo systemctl start openvpnas
$ sudo systemctl status openvpnas
\\
Review LetsEncrypt SSL certificate;
$ sudo systemctl stop openvpnas
$ sudo letsencrypt renew
$ sudo cp /etc/letsencrypt/live/CERTNAME/cert.pem /usr/local/openvpn_as/etc/web-ssl/server.crt
$ sudo cp /etc/letsencrypt/live/CERTNAME/privkey.pem /usr/local/openvpn_as/etc/web-ssl/server.key
$ sudo cp /etc/letsencrypt/live/CERTNAME/chain.pem /usr/local/openvpn_as/etc/web-ssl/ca.crt
$ sudo systemctl start openvpnas