Serveur OpenVPN désactiver et réactiver les clients

2

J'exécute OpenVPN 2.3.2 (encore un novice à ce jour) sur un ordinateur serveur Ubuntu 14.04. Je veux pouvoir désactiver / réactiver les clients qui se connectent à mon serveur OpenVPN.

J'ai suivi ce guide de révocation du certificat d'un client, mais il semble que ce déménagement soit irréversible. De plus, si je révoque le certificat d'un client et que celui-ci est déjà connecté, la connexion ne semble pas s'interrompre. Je veux que la connexion s'arrête immédiatement.

Existe-t-il un moyen simple de désactiver et d’activer les clients?

Mon fichier server.conf:

# OpenVPN server configuration file
dev tun
proto udp
port 1194
server 10.8.0.0 255.255.255.0
ca /usr/share/easy-rsa/keys/ca.crt
cert /usr/share/easy-rsa/keys/vpnserver.crt
key /usr/share/easy-rsa/keys/vpnserver.key
dh /usr/share/easy-rsa/keys/dh2048.pem
push "dhcp-option DNS 8.8.8.8"
push "redirect-gateway def1"
comp-lzo
keepalive 10 60
persist-tun
persist-key
user panos
group panos
log-append /var/log/openvpn.log
verb 3
# crl-verify keys/crl.pem

La dernière ligne est pour le guide ci-dessus.

Je vous remercie.

panos
la source
Pourquoi ne pas attribuer des adresses IP par utilisateur et utiliser ensuite iptables pour bloquer / autoriser les adresses IP?
davidgo
Je ne sais pas. Je pense que la solution que vous proposez est un peu "sale". Iptables est quelque chose d'important que le mécanisme VPN. De plus, si quelqu'un a un moyen de changer d'adresse IP, il peut facilement se reconnecter avec le même certificat.
panos
Je voudrais simplement souligner que je suggère que l'adresse IP bloquée est celle émise par le serveur VPN - donc - si correctement configuré côté serveur, l'utilisateur ne pourrait pas se reconnecter avec le même certificat.
davidgo

Réponses:

2

J'ai mis en place une solution similaire à celle de davidgo. Malheureusement, j'ai fait face à une erreur openssl similaire à ce bug et cela m'a pris beaucoup de temps pour trouver une solution de contournement.

J'ai enfin écrit deux scripts pour révoquer et révoquer les certificats clients:

revoke.sh:

#!/bin/bash

keys_index_file=/usr/share/easy-rsa/keys/index.txt
fileline="$(grep "/CN=$1/" $keys_index_file)"
columns_number="$(echo $fileline | awk -F' ' '{print NF;}')"

if [[ $columns_number -eq 5 ]] && [[ $fileline == V* ]]; then

    source /usr/share/easy-rsa/vars 
    /usr/share/easy-rsa/revoke-full $1

    {
        sleep 3
        echo kill $1
        sleep 3
        echo exit
    } | telnet localhost 7505

    echo "Client certificate revoked successfully."
    exit 0;

elif [[ $columns_number -eq 6 ]] && [[ $fileline == R* ]]; then

    echo "Client certificate is already revoked."
    exit 0;

else

    echo "Error; key index file may be corrupted."
    exit 1;
fi

unrevoke.sh:

#!/bin/bash

keys_index_file=/usr/share/easy-rsa/keys/index.txt
linenumber="$(grep -n "/CN=$1/" $keys_index_file | cut -f1 -d:)"
fileline="$(grep -n "/CN=$1/" $keys_index_file)"
line="$(grep "/CN=$1/" $keys_index_file)"

columns_number="$(echo $line | awk -F' ' '{print NF;}')"
echo $columns_number



if [[ $columns_number -eq 6 ]] && [[ $line == R* ]]; then

    column2="$(echo $fileline | awk '{print $2}')"
    column4="$(echo $fileline | awk '{print $4}')"
    column5="$(echo $fileline | awk '{print $5}')"
    column6="$(echo $fileline | awk '{print $6}')"
    echo -e "V\t$column2\t\t$column4\t$column5\t$column6" >> $keys_index_file
    sed -i "${linenumber}d" $keys_index_file
    cd /usr/share/easy-rsa; source ./vars; openssl ca -gencrl -out "keys/crl.pem" -config "$KEY_CONFIG"

    echo "Certificate unrevoked successfully."
    exit 0;

elif [[ $columns_number -eq 5 ]] && [[ $fileline == V* ]]; then

    echo "Certificate is already unrevoked and active"
    exit 0;

else

    echo "Error; Key index file may be corrupted."
    exit 1;

fi

Notez que revoke.sh Le script ouvre aussi un connexion telnet avec openVPN et expulse le client à révoquer.

panos
la source
0

En ignorant l'option iptables (qui, à mon avis, est techniquement supérieure), vous pouvez révoquer et rétablir les clés privées en modifiant le fichier revokation et en rechargeant openvpn. (Si vous utilisez easyRSA, vous pouvez modifier easyRSA / index.txt. Recherchez la ligne appropriée et remplacez le drapeau "R" par un drapeau "V", supprimez la troisième colonne.)

  source ./vars
  openssl ca -gencrl -out "crl.pem" -config "$KEY_CONFIG"

Vous pouvez recharger le serveur d’ouverture pour que la nouvelle configuration prenne effet. Cela donnera un coup de pied à TOUS les clients, mais ils devront automatiquement se reconnecter et négocier une nouvelle session.

Voir http://sq4ind.eu/openvpn-revoke-unrevoke-certificates/ pour l'article de référence sur lequel cette solution est basée.

davidgo
la source