How to configure OpenVPN#
Intended audience
staff members
The Software Heritage server and the VMs running on it are severely firewalled. To get onto their network unrestricted, a VPN based on OpenVPN is available.
The setup is client-server, with per-client certificates.
OpenVPN client configuration#
Raw OpenVPN#
Sample configuration file, e.g., /etc/openvpn/swh.conf:
remote vpn.softwareheritage.org
ns-cert-type server
comp-lzo
nobind
dev tun
proto udp
port 1194
log /var/log/openvpn.log
up-restart
persist-key
persist-tun
client
ca /etc/openvpn/keys/softwareheritage-ca.crt
cert /etc/openvpn/keys/softwareheritage.crt
key /etc/openvpn/keys/softwareheritage.key
user nobody
group nogroup
# If you are using resolvconf, add this:
# Make sure you add louvre to /etc/hosts to avoid issues in using the vpn-provided DNS server.
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
# If you want the connection to persist when your network fails, add this:
ping-restart 10
In addition to the above configuration file, you will need to install the following 3 files under /etc/openvpn/keys (matching the paths within the sample above):
softwareheritage-ca.crt: public certificate for the Software Heritage certification authority (CA)
softwareheritage.crt: public, client-specific (certificate signed by the admin, see below)
softwareheritage.key: private, client-specific key (generated by the user, see below)
Activate the openvpn server, as root (on your machine), run:
NAME=swh # or "work" as you wish
systemctl enable openvpn@$NAME.service
systemctl start openvpn@$NAME.service
systemctl status openvpn@$NAME.service
Note: Internally, the swh
must match the /etc/openvpn/swh
.conf filename. You can
name it as you want (e.g work
), just be consistent about it.
Excerpt of a successful start:
root@machine:~# systemctl status openvpn@swh.service``
openvpn@swh.service - OpenVPN connection to swh``
Loaded: loaded (/lib/systemd/system/openvpn@.service; indirect; vendor preset: enabled)``
Active: active (running) since Thu 2020-12-17 19:03:29 UTC; 22min ago``
Docs: man:openvpn(8)``
``\ ```https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage`` <https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage>`_
``\ ```https://community.openvpn.net/openvpn/wiki/HOWTO`` <https://community.openvpn.net/openvpn/wiki/HOWTO>`_
Main PID: 12302 (openvpn)``
Status: "Initialization Sequence Completed"``
Tasks: 1 (limit: 4915)``
CGroup: /system.slice/system-openvpn.slice/openvpn@swh.service``
└─12302 /usr/sbin/openvpn --daemon ovpn-swh --status /run/openvpn/swh.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/swh.conf --writepid /run/openvpn/swh.pid``
Dec 17 19:03:29 machine systemd[1]: Starting OpenVPN connection to swh...
Dec 17 19:03:29 machine systemd[1]: Started OpenVPN connection to swh.
Network Manager GUI#
You need network-manager-openvpn and network-manager-openvpn-gnome for the configuration gui.
Obtaining a client certificate#
For users#
Generate a key pair (key + certificate signing request) using the following command:
openssl req -new -newkey rsa:2048 -nodes -keyout openvpn.key -out openvpn.csr -subj "/CN=<your username>"
Please replace with something that uniquely identifies the certificate.
Make sure openvpn.key is stored in a safe place (it’s your private key, which will allow anyone to connect to the VPN).
Provide the CSR file to a sysadmin through a reasonably authenticated medium.
For admins#
On the firewall (192.168.50.1), go to the System / Trust / Certificates page
click on the add button on the upper right
On the Method list, choose “Sign a certificate Signing Request”
Fetch the CSR file provided by the user, for instance with scp USERNAME.csr louvre:
Enter the user name on the descriptive name
Select “OpenVPN Software Heritage (louvre)” as Certificate Authority
Enter the duration, usually 10 years
Paste the csr
Validate
check the details of the csr and validate
Revoking a client certificate#
On the firewall (master) 1:
go to the https://192.168.50.1/system_crlmanager.php System / Trust / Revocation page
edit the “OpenVPN certificate revocation list” CRL
go to the bottom of the page
select the certificate to revoke
Add
The counter of revoked certificate should be increased by one on for the OpenVPN CSR on the CSR list.