Desabilitar e reativar clientes do servidor OpenVPN

2

Eu estou rodando o OpenVPN 2.3.2 (ainda é um novato nisso) em uma máquina Ubuntu 14.04 Server. Eu quero ser capaz de desativar / reativar clientes que se conectam ao meu servidor OpenVPN.

Eu segui este guia para revogar o certificado de um cliente, mas parece que esse movimento é irreversível. Além disso, se eu revogar o certificado de um cliente e o cliente já estiver conectado, a conexão não parará. Eu quero que a conexão pare imediatamente.

Existe alguma maneira fácil de desativar e reativar clientes?

Meu arquivo 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

A última linha é para o guia acima.

Obrigado.

    
por panos 27.08.2017 / 14:28

2 respostas

2

Eu implementei uma solução semelhante à davidgo. Infelizmente eu enfrentei um erro openssl similar a este bug , e eu levei muito tempo para encontrar uma solução alternativa para isso.

Eu finalmente escrevi dois scripts para revogar e revogar certificados de cliente:

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

Observe que o script revoke.sh também abre uma conexão telnet com o openVPN e expulsa o cliente para ser revogado.

    
por 03.09.2017 / 11:50
0

Ignorando a opção iptables (que eu acredito ser tecnicamente superior), você pode revogar e restabelecer chaves privadas modificando o arquivo de revogação e recarregando o openvpn. (Se você estiver usando o easyRSA, você pode editar o easyRSA / index.txt. Encontre a linha apropriada e altere o sinalizador "R" para um sinalizador "V", remova a terceira coluna.) Então

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

Você pode recarregar o servidor de abertura para que a nova configuração tenha efeito. Isso chutará TODOS os clientes, mas eles deverão se reconectar e negociar automaticamente uma nova sessão.

Veja link para o artigo de referência em que esta solução se baseia.

    
por 29.08.2017 / 00:47