Amélioration partie serveur

This commit is contained in:
jdubois 2021-05-20 15:17:50 +02:00
parent 51b0ab8b5e
commit 118abf445a

View file

@ -38,18 +38,14 @@ library versions: LibreSSL 2.6.3, LZO 2.10
## Configuration serveur
On met en place une PKI sur le serveur via [shellpki](HowtoShellpki) :
On met en place une PKI sur le serveur via [shellpki](https://gitea.evolix.org/evolix/shellpki). Voir le README du projet.
On génère le dhparam :
~~~
# mkdir /etc/openvpn/ssl
# git clone https://gitea.evolix.org/evolix/shellpki.git /etc/openvpn/ssl
# cd /etc/openvpn/ssl
# sh shellpki.sh init
# sh shellpki.sh create
# openssl dhparam -out /etc/shellpki/dh2048.pem 2048
~~~
Mettre un _Common Name_ du type `fw.vpn.example.com` avec une durée de plusieurs années. Pour plus d'informations, voir [HowtoShellpki](HowtoShellpki)
La configuration se fait via le fichier `/etc/openvpn/server.conf` avec les paramètres suivants à adapter :
* `server` : réseau privé sur lequel le serveur VPN et les clients communiqueront
@ -62,84 +58,38 @@ La configuration se fait via le fichier `/etc/openvpn/server.conf` avec les para
### Serveur sous Debian
~~~
#
# General settings
#
user nobody
group nogroup
# Do not try to re-read key file and reopen tun device on restart since it runs
# without root privileges.
local 198.51.100.1
port 1194
proto udp
dev tun
mode server
keepalive 10 120
cipher AES-128-CBC # AES
compress lzo
persist-key
persist-tun
#persist-remote-ip
#persist-local-ip
# Status file
status /var/log/openvpn/status.log 1
#log /var/log/openvpn/openvpn.log
# Logging verbosity. Logs are sent to syslog.
verb 3
status /var/log/openvpn-status.log
log-append /var/log/openvpn.log
# Keepalive
keepalive 10 120
#reneg-sec 300
ca /etc/shellpki/cacert.pem
cert /etc/shellpki/certs/fw.vpn.example.com.crt
key /etc/shellpki/private/fw.vpn.example.com-1621504035.key
dh /etc/shellpki/dh2048.pem
#
# Network settings
#
server 192.0.2.0 255.255.255.0
port 1194
proto udp
dev tun
# Enable compression
# comp-lzo
# compress lzo (à partir d'OpenVPN 2.4)
#
# key/certificate
#
ca /etc/openvpn/ssl/ca/cacert.pem
cert /etc/openvpn/ssl/files/fw.vpn.example.com-1278421834/fw.vpn.example.com.crt
key /etc/openvpn/ssl/files/fw.vpn.example.com-1278421834/fw.vpn.example.com.key
dh /etc/openvpn/ssl/ca/dh2048.pem
#
# private network
#
server 192.0.2.0 255.255.0.0
mode server
push "route 192.0.3.0 255.255.255.0"
# Management interface (used by check_openvpn for Nagios)
management 127.0.0.1 1195 /etc/openvpn/management-pwd
~~~
Générer un mot de passe pour l'accès à l'interface de management (nécessaire au check Nagios) :
~~~
# apg -n1 -m 12 > /etc/openvpn/management-pwd
~~~
On peut ensuite utiliser le [check NRPE OpenVPN suivant](https://gitea.evolix.org/evolix/EvoBSD/src/branch/dev/roles/openvpn/files/check_openvpn.pl):
~~~
# apt install libnet-telnet-perl # Debian
# pkg_add p5-Net-Telnet # OpenBSD
# /usr/lib/nagios/plugins/check_openvpn.pl -H 127.0.0.1 -p 1195 -P $(cat /etc/openvpn/management-pwd)
~~~
On peut également utiliser le [check NRPE suivant](https://gitea.evolix.org/evolix/EvoBSD/src/branch/dev/roles/openvpn/files/check_openvpn_certificates.sh) pour vérifier les dates d'expirations de la CA et du certificat serveur:
~~~
# /usr/lib/nagios/plugins/check_openvpn_certificates.sh
~~~
Un script [cert-expirations.sh](https://gitea.evolix.org/evolix/shellpki/src/branch/dev/cert-expirations.sh) peut également être mis en cron pour avertir régulièrement des prochaines expirations des certificats clients et serveur. Voir [HowtoOpenVPN#recevoir-par-mail-un-récapitulatif-des-prochaines-expirations-des-certificats-openvpn]()
### Serveur sous OpenBSD
~~~
@ -154,7 +104,7 @@ verb 4
user nobody
group nobody
chroot /var/empty
#compress lzo
compress lzo
max-clients 50
keepalive 15 120
@ -225,6 +175,46 @@ Si on ne veut pas avoir à redémarrer OpenVPN, on peut également utiliser un c
0 4 * * 6 cp /var/log/openvpn.log /var/log/openvpn.log.$(date +\%F) && echo "$(date +\%F' '\%R) - logfile turned over via cron" > /var/log/openvpn.log && gzip /var/log/openvpn.log.$(date +\%F) && find /var/log/ -type f -name "openvpn.log.*" -mtime +365 -exec rm {} \+
~~~
### Commun à Debian et OpenBSD
Générer un mot de passe pour l'accès à l'interface de management (nécessaire au check Nagios) :
~~~
# apg -n1 -m 12 > /etc/openvpn/management-pwd
~~~
On peut utiliser le [check NRPE OpenVPN suivant](https://gitea.evolix.org/evolix/EvoBSD/raw/branch/dev/roles/openvpn/files/check_openvpn.pl):
~~~
## Debian
# apt install libnet-telnet-perl
# /usr/local/lib/nagios/plugins/check_openvpn -H 127.0.0.1 -p 1195 -P $(cat /etc/openvpn/management-pwd)
## OpenBSD
# pkg_add p5-Net-Telnet
# /usr/local/libexec/nagios/plugins/check_openvpn.pl -H 127.0.0.1 -p 1195 -P $(cat /etc/openvpn/management-pwd)
~~~
On peut également utiliser le [check NRPE suivant](https://gitea.evolix.org/evolix/EvoBSD/raw/branch/dev/roles/openvpn/files/check_openvpn_certificates.sh) pour monitoring les dates d'expirations de la CA et du certificat serveur:
~~~
# /usr/local/lib/nagios/plugins/check_openvpn_certificates.sh # Debian
# /usr/local/libexec/nagios/plugins/check_openvpn_certificates.sh # OpenBSD
~~~
Un script [cert-expirations.sh](https://gitea.evolix.org/evolix/shellpki/src/branch/dev/cert-expirations.sh) peut être mis en cron pour avertir régulièrement des prochaines expirations des certificats clients et serveur :
~~~
@monthly /usr/share/scripts/cert-expirations.sh | mail -E -s "PKI VPN XXX : recapitulatif expirations" mail@example.com
~~~
Penser à remplacer :
* L'horaire d'exécution du cron, si voulu ;
* L'emplacement des certificats dans le script (/etc/shellpki/certs/), ceux-ci peuvent se trouver dans "/etc/openvpn/ssl/certs/" ou ailleurs encore ;
* Le nom du surveur XXX dans le sujet "PKI VPN XXX" ;
* L'adresse mail de contact.
## Configuration client
Pour simplifier la configuration pour les utilisateurs finaux on peut générer un fichier de configuration embarquant les certificats :
@ -237,7 +227,7 @@ proto udp
tls-client
remote vpn.example.com 1194
#compress lzo
compress lzo
nobind
user nobody
group nogroup
@ -433,21 +423,6 @@ L'erreur `Bad LZO decompression header byte` signifie que la compression LZO n'
## FAQ
### Recevoir par mail un récapitulatif des prochaines expirations des certificats OpenVPN
Un script [cert-expirations.sh](https://gitea.evolix.org/evolix/shellpki/src/branch/dev/cert-expirations.sh) peut être mis en cron pour avertir régulièrement des prochaines expirations des certificats clients et serveur :
~~~
@monthly /usr/share/scripts/cert-expirations.sh | mail -E -s "PKI VPN XXX : recapitulatif expirations" mail@example.com
~~~
Penser à remplacer :
* L'horaire d'exécution du cron, si voulu ;
* L'emplacement des certificats dans le script (/etc/shellpki/certs/), ceux-ci peuvent se trouver dans "/etc/openvpn/ssl/certs/" ou ailleurs encore ;
* Le nom du surveur XXX dans le sujet "PKI VPN XXX" ;
* L'adresse mail de contact.
### Permettre aux clients de conserver la même IP au fil de connexions
#### ipp.txt