OpenVPN Multi Client para acesso externo
Prezados Colegas,
Saudações pinguianas!
Imaginem a seguinte situação: Você tem uma empresa (de qualquer seguimento) com um ambiente corporativo integrado, intranet, AD, sistemas, banco de dados, etc, etc.
Tudo funciona normalmente e adequadamente quando o seu funcionário chega em seu local de trabalho, liga seu PC e começa suas atividades. O problema é quando o seu funcionário precisa fazer um serviço externo e acessar os sistemas da empresa para efetuar consultas ou interagir.
Pode ser o seu consultor, vendedor, analista, etc. E aí? Ele tem que ficar ligando para empresa e ficar pedindo para alguém enviar essas, informações, correto? E se, mesmo de fora da empresa, ele pudesse acessar os sistemas de maneira segura e criptografada?
É aí é que entra o OpenVPN Multi Client! O seu funcionário teria apenas um programinha instalado em seu notebook/smartphone/iphone e facilmente se conectaria ao ambiente da empresa.
Nesse artigo, eu vou abordar a instalação de um servidor para OpenVPN Multi Client.
Vou especificar aqui o ambiente fictício, para que você possa criar o seu servidor de acordo com o seu ambiente.
Rede da empresa: 192.168.0.0/24
IP público de internet: XXX.XXX.XX.XX
IP de rede do Gateway: 192.168.0.1
IP que vamos colocar no servidor de VPN: 192.168.0.254
Eu sempre gosto de usar uma porta de conexão diferente da padrão. Por padrão, o OpenVPN trabalha rodando na porta 1194 UDP. Nós iremos usar a 7040 TCP.
Então, para iniciarmos as nossas configurações, você deve fazer um redirecionamento de porta no seu Gateway. (Eu não posso te explicar na prática como fazer, porque não sei qual tecnologia você utiliza. Pode ser um Linux com Iptables, MikroTik, Cisco, IsaServer, pfSense, etc.).
Você deve redirecionar tudo que chega no seu IP Público na porta 7040 TCP para o IP 192.168.0.254 (também na porta 7040 TCP).
Feito isso, vamos começar a brincadeira! Para esse laboratório, eu usei a distribuição Debian GNU/Linux 9.4 (stretch). Então, vou partir do princípio que você vai instalar uma máquina (virtual ou física, tanto faz) zerada para efetuar as configuração e setar nela o IP 192.168.0.254.
Depois da máquina devidamente instalada, o primeiro passo é instalar os pacotes (QUE EU JULGO) necessários:
apt-get install -y net-tools aptitude ssh rsync vim tcpdump telnet mlocate openvpn
Feito isso, agora edite os arquivo “/etc/ssl/openssl.cnf”:
vim /etc/ssl/openssl.cnf
Procure pelas linhas “default_days” e “default_crl_days” e deixe conforme abaixo:
default_days = 3650 default_crl_days= 3650
O que isso vai fazer? Isso vai alterar a validade dos certificados client/server para 10 anos. Por padrão, os certificados do cliente durariam apenas 30 dias e os do servidor apenas 365 dias. Aí você teria que regerar outros quando acabasse a validade, causando-lhe um transtorno (já experimentado pela minha pessoa). Não se preocupe! Você pode revogar um certificado a qualquer momento. Explicarei isso posteriormente, em um outro artigo.
Agora, vamos preparar os diretórios de configuração da solução. Faça os comandos abaixo:
cd /usr/share/doc/openvpn/examples/ make-cadir /etc/openvpn/scripts cd /etc/openvpn/scripts/ ln -s openssl-1.0.0.cnf openssl.cnf chmod -R 700 keys
Agora você vai alterar o arquivo “/etc/openvpn/scripts/openssl.cnf” nas linhas “default_days” e “default_crl_days” conforme o conteúdo abaixo (pelos mesmos motivos do arquivo strong>/etc/ssl/openssl.cnf):
default_days = 3650 default_crl_days= 3650
Feito isso, edite o arquivo “/etc/openvpn/scripts/vars”:
vim /etc/openvpn/scripts/vars
Altere as linhas abaixo como sua preferência, mas você não pode deixá-las vazias. No meu caso ficou assim:
export KEY_COUNTRY="BR" export KEY_PROVINCE="RJ" export KEY_CITY="Rio de Janeiro" export KEY_ORG="Portal Aprendendo Linux" export KEY_EMAIL="[email protected]" export KEY_OU="Suporte Linux"
Agora, edite o arquivo “/etc/openvpn/scripts/build-key” e remova a sintax “–interact” da ultima linha do arquivo, deixando-a assim:
#!/bin/bash # Make a certificate/private key pair using a locally generated # root certificate. export EASY_RSA="${EASY_RSA:-.}" "$EASY_RSA/pkitool" $*
Devemos então executar o script, para que essas variáveis sejam criadas:
source ./vars ./clean-all
O comando clean-all, apagará qualquer variável existente, caso você queira começar todo o processo novamente. Mas tome cuidado pois ele não apaga o diretório keys, que será o local de armazenamento das chaves.
Tenha certeza que as variáveis foram criadas realmente. Um simples echo $KEY_EMAIL, deverá exibir o valor colocado manualmente dentro do arquivo vars. Caso não exista, ou seja, as variáveis não foram criadas, deverá executar o procedimento novamente.
O próximo passo é gerar o Certificado de Autoridade, nossa CA. Ao final deste comando será gerado a nossa CA e as chaves que serão usadas pelo openssl para gerar chaves clients e servers.
./build-ca
A saída do comando exibirá várias informações, obtidas através das variáveis criadas anteriormente.
O próximo passo será gerar o certificado e a chave do servidor da matriz. Existe também um comando bem simples para criar tal chave.
./build-key-server servidor
O comando acima gerará tanto o certificado com extensão crt, como a chave com extensão key, ambos com o nome servidor na pasta keys.
O próximo passo é gerar certificado e chaves para o primeiro usuário. Também muito simples.
./build-key cliente1
Este comando deverá ser executado para cada usuário, veja acima que foi executado uma vez, ou seja, foi gerado chaves e certificados para um usuário.
O ultimo ítem a ser feito é gerar os parâmetros do Diffie Hellman . O comando abaixo gerará um arquivo dh(valor).pem. Onde valor, será o valor colocado na variável KEY_SIZE, do arquivo vars. Por padrão 1024. O Diffie Hellman permite que o servidor da filial e o servidor da matriz troquem chaves sobre um meio inseguro sem comprometer a segurança.
./build-dh
Esse é todo o processo para criar as chaves e certificados que serão utilizados pelo servidor e pelos usuários.
Agora vamos verificar quais ficarão no servidor e quais ficarão na máquina dos usuários. Todos os arquivos serão salvas dentro da pasta keys no caminho “/etc/openvpn/scripts/keys”. Comecemos com o servidor:
Servidor:
- ca.crt
- dh2048.pem
- servidor.crt
- servidor.key
Vamos copiar:
cp keys/ca.crt keys/dh2048.pem keys/servidor.crt keys/servidor.key ../
Agora, precisamos criar o arquivo de configuração do servidor. Vamos criar e editar o arquivo:
touch /etc/openvpn/servidor.conf vim /etc/openvpn/servidor.conf
Deixe-o assim:
port 7040 proto tcp-server dev tun tls-server mode server ca ca.crt cert servidor.crt key servidor.key dh dh2048.pem server 10.9.8.0 255.255.255.0 push "dhcp-option DNS 192.168.0.1" push "dhcp-option DOMAIN local" push "redirect-gateway autolocal" push "route 0.0.0.0 0.0.0.0" #crl-verify /etc/openvpn/scripts/keys/crl.pem client-to-client comp-lzo persist-tun persist-key float ping 10 ping-restart 120 push "ping 10" push "ping-restart 120" verb 1 log-append /var/log/openvpn.log
Agora, precisamos editar o arquivo “/etc/default/openvpn” e descomentar a linha AUTOSTART=”all”.
vim /etc/default/openvpn
Ajuste-o assim:
… … AUTOSTART="all" … …
Agora, precisamos recarregar os daemons e subir o serviço:
systemctl daemon-reload && service openvpn restart
Precisamos também habilitar o encaminhamento de pacotes. Faremos isso editando o arquivo “/etc/sysctl.conf” e descomentando a linha “net.ipv4.ip_forward=1”:
vim /etc/sysctl.conf
Ajuste-o assim:
… … net.ipv4.ip_forward=1 … …
Agora rode o comando abaixo:
sysctl -w net.ipv4.ip_forward=1
Precisamos também de duas regras de firewall no iptables. Uma de masquerade e uma de SNAT. E precisamos que elas “subam” junto com o sistema. Então, vamos criar o script com os comandos abaixo:
cat > /etc/rc.local << EOF #!/bin/bash iptables -t nat -A POSTROUTING -s 10.9.8.0/24 -j MASQUERADE iptables -t nat -A POSTROUTING -s 10.9.8.0/24 -d 192.168.0.0/24 -j SNAT --to 192.168.0.1 exit 0 EOF
chmod +x /etc/rc.local /etc/rc.local
Pronto! O que essas regras vão fazer? A primeira regra faz com que o usuário continue navegando na internet depois que se conecta na VPN. A segunda, encaminha faz com que todos os pacotes provindos do IP do client da VPN ganhe a origem do IP do Gateway, ou seja, quando algum cliente acessar uma máquina, é como se o acesso viesse do IP do Firewall.
Para verificar a aplicação dessas regras, faça o comando:
iptables -nL -t nat
As configurações do servidor terminam aqui. Agora, precisamos configurar o nosso primeiro cliente. Na máquina Windows, precisaremos de 2 softwares. O WinSCP e o OpenVPN Client.
Para baixar o OpenVPN Cliente, acessa o link abaixo:
https://openvpn.net/index.php/open-source/downloads.html
Com o auxílio do WinSCP, precisamos copiar os arquivos ca.crt, cliente1.crt e cliente1.key que ficam no diretório “/etc/openvpn/scripts/keys” do servidor para o diretório “C:\Arquivos de Programas\OpenVPN\Config” da máquina Windows.
Precisamos também criar, na máquina Windows, nesse mesmo diretório (com ajuda do Bloco de Notas) o arquivo de configuração chamado “cliente1.ovpn”.
Deixe-o assim:
dev tun tls-client remote XXX.XXX.XX.XX 7040 proto tcp-client ca ca.crt key cliente1.key cert cliente1.crt persist-key pull comp-lzo persist-tun float ping 10 ping-restart 120 push "ping 10" push "ping-restart 120" authrb 5
Salve o arquivo. Agora basta iniciar o serviço a partir do ícone na área de trabalho, depois clicar com o botão direito no ícone próximo ao relógio do Windows e clicar em conectar.
Isso é tudo!
Esse artigo foi útil? Colabore com o nosso site para podermos continuar dando mais dicas como essa!
Formas de doação:
- Boleto / Cartão de crédito: https//bit.ly/AprendendoLinux
- Pix: [email protected]
- PicPay: @henrique_fagundes
- PayPal: [email protected]
- Bitcoin: bc1qtnn5z058htzy799dslwrpjcdpm0vuta3vrj28l
Favorecido: Luiz Henrique Marques Fagundes