• Configurer un tunnel OpenVPN entre 2 serveurs

    OmniOSce ne dispose pas du script easy-rsa dans ses propres dépôts, néanmoins, on peut l'obtenir via le dépôt pkgsrc pour plus de commodité.
    D'ordinaire on utilise easy-rsa pour des raisons de simplicité (c'est beaucoup plus casse-pied sans !)

    Voici comment faire SANS easy-rsa.

    Le but est de créer un tunnel VPN entre 2 serveurs sous OmniOSce
    Nous allons rester simple ici et créer un tunnel entre 2 serveurs en frontal sur internet.
    Au cas où vous souhaiteriez cacher votre serveur et votre clientderrière des pare-feux, il ne faudra pas oublier de le DNAT (UDP 1194) sur le pare-feu abritant le serveur


    Configurer un tunnel OpenVPN entre 2 serveurs

    Cette configuration est relativement délicate.. Je vous suggère de ne pas trop vous écarter de ce que je fais (sauf si vous êtes aguerris).
    Tout au long la procédure, des passphrases devront être créées, je vous suggère de les stocker dans un keepass.. au moindre oubli, tout est foutu !


    Soyez root tout au long de la procédure, sur les 2 serveurs.

    ETAPE 1

    ### Sur SERVEUR-OPENVPN et sur CLIENT-OPENVPN :

    (je considère la configuration IP déjà faîte)


    - Installer OpenVPN

    pkg install pkg://extra.omnios/ooce/network/openvpn

    -  Régler le bon fuseau horaire sur les 2 serveurs : (c'est fondamental !)

    pkg install ntpsec && /usr/bin/ntpdate 0.fr.pool.ntp.org && date && svcadm enable svc:/network/ntp:default


    ETAPE 2

    ### Sur SERVEUR-OPENVPN uniquement :

    - Créer un répertoire pour les configurations et les clés et s'y rendre :

    mkdir -p /etc/opt/ooce/openvpn/keys ; cd /etc/opt/ooce/openvpn/keys

    - Créer un fichier de configuration OpenSSL pour les certificats.
    Ce fichier est très important car pour être valides lors du handshake, vos certificats devront être complets et avec extensions !
    Aussi, vous devez d'abord changer les valeurs par défauts indiquées ici en rouge (dans les champs :
    countryName_default, stateOrProvinceName_default, localityName_default, organizationalUnitName_default, commonName_default, emailAddress_default - Ne touchez pas au reste !).

    Une fois modifié, copiez/collez le bloc tout entier pour créer le fichier.

    cat <<EOF > /etc/opt/ooce/openvpn/keys/openssl.cnf
    # openssl.cnf
    [ req ]
    distinguished_name = req_distinguished_name
    x509_extensions = v3_ca

    [ req_distinguished_name ]
    countryName = Country Name (2 letter code)
    countryName_default = FR
    stateOrProvinceName = State or Province Name (full name)
    stateOrProvinceName_default = VOTRE-REGION
    localityName = Locality Name (eg, city)
    localityName_default = VOTRE-VILLE
    organizationName = Organization Name (eg, company)
    organizationName_default = NOM-DE-LENTREPRISE
    organizationalUnitName = Organizational Unit Name (eg, section)
    organizationalUnitName_default = DEPARTEMENT-DE-LENTREPRISE
    commonName = Common Name (eg, fully qualified host name)
    commonName_default = CA-VPN
    emailAddress = Email Address
    emailAddress_default = admin@example.com

    [ v3_ca ]
    subjectKeyIdentifier=hash
    authorityKeyIdentifier=keyid:always,issuer
    basicConstraints = CA:true
    keyUsage = keyCertSign, cRLSign

    [ v3_req ]
    keyUsage = nonRepudiation, digitalSignature, keyEncipherment
    extendedKeyUsage = serverAuth, clientAuth
    EOF


    Créer notre Autorité de certification (CA)
    A moins d'utiliser une autorité de certification reconnue sur internet ou venant d'un autre serveur (type AD), il va nous falloir créer la nôtre pour certifier à la fois notre serveur OpenVPN ainsi que notre CLIENT-OPENVPN.


    - Générer la clé privée

    openssl genpkey -algorithm RSA -out ca.key -aes256

    (Vous créez ici une première passphrase - nous la désignerons sous "PASS-01" pour la suite)

    - Créer la demande de signature du certificat (CSR)

    openssl req -new -x509 -key ca.key -sha256 -out ca.crt -days 3650 -config openssl.cnf

    (Vous entrez ici "PASS-01", créé avec la commande précédente)
    (Vous n'êtes pas obligés de compléter les informations demandées puisque nous avons défini des valeurs par défaut dans le fichier openssl.cnf, tapez simplement ENTRER jusqu'au bout. N'entrez pas de passphrase finale !!)

    - Signer le certificat avec l'autorité de certification (CA) en utilisant les extensions

    openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 3650 -sha256 -extensions v3_req -extfile openssl.cnf

    (Vous entrez ici "PASS-01", créé avec la commande précédente)


    Créer un certificat pour notre serveur SERVEUR-OPENVPN

    - Générer la clé privée

    openssl genpkey -algorithm RSA -out server.key -aes256

    (Vous créez ici une seconde passphrase - nous la désignerons sous "PASS-02" pour la suite)

    - Créer la demande de signature de certificat (CSR) pour le serveur :

    openssl req -new -key server.key -out server.csr -config openssl.cnf

    (Vous entrez ici "PASS-02", créé avec la commande précédente)
    (Vous n'êtes pas obligés de modifier les informations par défaut proposées - celles entrées précedemment dans openssl.cnf, tapez simplement ENTRER jusqu'au bout)

    - Signer le certificat du serveur avec la CA :

    openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 3650 -sha256 -extensions v3_req -extfile openssl.cnf

    (Ici, vous entrez "PASS-01" !! Il faut la clé de notre Autorité de Certification pour certifier le certificat du serveur openvpn)


    - Envoyer votre clef "PASS-02" dans un fichier :
    (remplacez PASS-02 par la clef que vous aviez créée) :

    echo "PASS-02" > /etc/opt/ooce/openvpn/keys/passphrase.txt

    (Je vous vois venir... ce n'est pas très sécure d'envoyer la passphrase en clair dans un fichier. Il y a plusieurs solutions à cela : utiliser des tokens, hashicorp vault, un module PAM, ssh-agent avec un wrapper script... Il vous faudra approfondir un peu pour avoir un truc vraiment solide !)

     

    Sécurité :

    - Générer les clés Diffie-Hellman :

    openssl dhparam -out dh2048.pem 2048

    - Générer la clé HMAC pour renforcer la sécurité :

    /opt/ooce/openvpn/sbin/openvpn --genkey secret ta.key

     

    Configuration du serveur openvpn :

    - Sauvegarder le fichier server.conf d'example :

    mv /etc/opt/ooce/openvpn/server.conf /etc/opt/ooce/openvpn/server.conf.BAK


    - Créer et éditer le fichier de configuration du serveur OpenVPN (/etc/opt/ooce/openvpn/server.conf) :
    (La seule chose que vous pouvez modifier ici, c'est le réseau de votre tunnel OpenVPN : 10.8.0.0 255.255.255.0)
    Vous pouvez modifier le masque jusqu'à 255.255.255.240.. mais pas au-delà, ça ne fonctionnera pas)
    Ne touchez pas au reste de la configuration, puis copiez/collez le bloc entier pour créer le fichier.

    cat <<EOF > /etc/opt/ooce/openvpn/server.conf
    port 1194
    proto udp
    dev tun
    ca /etc/opt/ooce/openvpn/keys/ca.crt
    cert /etc/opt/ooce/openvpn/keys/server.crt
    key /etc/opt/ooce/openvpn/keys/server.key
    dh /etc/opt/ooce/openvpn/keys/dh2048.pem
    askpass /etc/opt/ooce/openvpn/keys/passphrase.txt
    topology subnet
    server 10.8.0.0 255.255.255.0
    ifconfig-pool-persist ipp.txt
    client-to-client
    keepalive 10 120
    tls-server
    tls-auth /etc/opt/ooce/openvpn/keys/ta.key 0
    key-direction 0
    cipher AES-256-GCM
    data-ciphers AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305
    compress stub-v2
    user nobody
    group nogroup
    persist-key
    persist-tun
    status /var/log/opt/ooce/openvpn/openvpn-status.log
    log-append /var/log/opt/ooce/openvpn/server.log
    verb 3
    explicit-exit-notify 1
    EOF

    - Démarrer le serveur OpenVPN :

    svcadm enable openvpn:server

    - Vérifier l'état du service :

    svcs openvpn:server

    Le service doit être 'online'.


    ETAPE 3

    ### Sur SERVEUR-OPENVPN uniquement :

    Créer le certificat pour notre client CLIENT-OPENVPN
    Nous le créons directement depuis le serveur SERVEUR-OPENVPN pour gagner du temps (puisqu'il faut qu'il soit validé par notre autorité de certification), puis nous le transfèrerons sur CLIENT-OPENVPN.


    - Générer la clé privée du client :

    cd /etc/opt/ooce/openvpn/keys ; openssl genpkey -algorithm RSA -out client1.key -aes256

    (Vous créez ici une troisième passphrase - nous la désignerons sous "PASS-03" pour la suite)

    - Créer la demande de signature de certificat (CSR) pour le client :

    openssl req -new -key client1.key -out client1.csr -config openssl.cnf

    (Vous entrez ici "PASS-03", créé avec la commande précédente)
    (Ici, vous pouvez modifier les informations par défaut proposées que nous avions entrées dans openssl.cnf  puisqu'il s'agît d'éditer la demande de signature pour notre client... qui n'est donc logiquement pas au même endroit que le serveur ! - cela dit si vous ne modifiez rien aux choix par défaut, ça fonctionnera aussi)

    - Signer le certificat du client avec la CA :

    openssl x509 -req -in client1.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client1.crt -days 3650 -sha256 -extensions v3_req -extfile openssl.cnf

    (Vous entrez ici "PASS-01" !!)

    Le certificat de notre client CLIENT-OPENVPN est à présent validé par notre autorité de certification, nous pouvons donc l'envoyer sur CLIENT-OPENVPN et faire la configuration du CLIENT-OPENVPN.

    - Transférer les fichiers nécessaires depuis SERVEUR-OPENVPN vers CLIENT-OPENVPN :
    (Utilisez la méthode que vous voulez, voici avec ssh au besoin : remplacez le USER par le nom d'un utilisateur sur CLIENT-OPENVPN)

    scp /etc/opt/ooce/openvpn/keys/ca.crt /etc/opt/ooce/openvpn/keys/ta.key /etc/opt/ooce/openvpn/keys/client1.crt /etc/opt/ooce/openvpn/keys/client1.key USER@45.56.67.78:/tmp/


    ### Sur CLIENT-OPENVPN uniquement :

    - Déplacer les fichiers transférés vers le dossier /etc/opt/ooce/openvpn/keys :

    mkdir /etc/opt/ooce/openvpn/keys
    mv /tmp/ca.crt /etc/opt/ooce/openvpn/keys/
    mv /tmp/ta.key /etc/opt/ooce/openvpn/keys/
    mv /tmp/client1.crt /etc/opt/ooce/openvpn/keys/
    mv /tmp/client1.key /etc/opt/ooce/openvpn/keys/

    - Envoyer "PASS-03" dans un fichier :
    (remplacez PASS-03 par la clé que vous aviez créée) :

    echo "PASS-03" > /etc/opt/ooce/openvpn/keys/passphrase.txt

    - Sauvegarder le fichier client.conf d'example :

    mv /etc/opt/ooce/openvpn/client.conf /etc/opt/ooce/openvpn/client.conf.BAK

    - Créer et éditer le fichier de configuration du CLIENT-OPENVPN :
    La seule chose que vous devez modifier ici, c'est l'adresse IP de SERVEUR-OPENVPN.
    Ne touchez pas au reste !

    cat <<EOF > /etc/opt/ooce/openvpn/client.conf
    client
    dev tun
    proto udp
    remote 56.67.78.89 1194
    resolv-retry infinite
    nobind
    float
    persist-key
    persist-tun
    ca /etc/opt/ooce/openvpn/keys/ca.crt
    cert /etc/opt/ooce/openvpn/keys/client1.crt
    key /etc/opt/ooce/openvpn/keys/client1.key
    askpass /etc/opt/ooce/openvpn/keys/passphrase.txt
    remote-cert-tls server
    tls-client
    tls-auth /etc/opt/ooce/openvpn/keys/ta.key 1
    key-direction 1
    cipher AES-256-GCM
    data-ciphers AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305
    verb 3
    EOF

    - Démarrer le client OpenVPN

    svcadm enable openvpn:client

    - Vérifier l'état du service

    svcs openvpn:client

    Il doit être 'online'.

    - Vérifier les logs en direct :

    tail -f /var/log/opt/ooce/openvpn/client.log

    - Vérifier la connexion :

    ipadm | grep tun0

    - Effectuer un ping de CLIENT-OPENVPN vers SERVEUR-OPENVPN :

    ping 10.8.0.1


    Une fois que tout est bon, n'oubliez pas d'appliquer les permissions sur les fichiers :

    ### Sur CLIENT-OPENVPN uniquement :

    chmod 600 /etc/opt/ooce/openvpn/keys/passphrase.txt
    chmod 644 /etc/opt/ooce/openvpn/keys/ca.crt
    chmod 600 /etc/opt/ooce/openvpn/keys/ta.key
    chmod 644 /etc/opt/ooce/openvpn/keys/client1.crt
    chmod 600 /etc/opt/ooce/openvpn/keys/client1.key

     

    ### Sur SERVEUR-OPENVPN uniquement :

    chmod 600 /etc/opt/ooce/openvpn/keys/ca.key
    chmod 600 /etc/opt/ooce/openvpn/keys/server.key
    chmod 644 /etc/opt/ooce/openvpn/keys/ca.crt
    chmod 644 /etc/opt/ooce/openvpn/keys/server.crt
    chmod 644 /etc/opt/ooce/openvpn/keys/dh2048.pem
    chmod 600 /etc/opt/ooce/openvpn/keys/ta.key
    chmod 600 /etc/opt/ooce/openvpn/keys/passphrase.txt

    Tags Tags : , ,
  • Commentaires

    Aucun commentaire pour le moment

    Suivre le flux RSS des commentaires


    Ajouter un commentaire

    Nom / Pseudo :

    E-mail (facultatif) :

    Site Web (facultatif) :

    Commentaire :