Esta página dará um ideia de como subir um openvpn server, é mais simples do que parece mas requer uma porção de passos, a parte do ubuntu fica limitada ao comando para instalar o serviço, portanto você pode usar esse conhecimento outros OS tb :)
O Open vpn é uma solução gratuita para VPN - se você não faz ideia do que seja isso, utilize um dos links abaixo para saber mais
Vamos configurar um servidor remoto, na internet, para permitir que um determinado usuário faça parte da rede remota com um certificado (para melhorar a segurança)
Para ajudar, um pequeno “flow” do que vamos fazer:
Digite o comando
sudo apt-get install openssh
Agora que já instalamos, precisamos copiar uns arquivos de configuração, o openvpn não é um programa que você instala e pronto, é necessário configurar tudo (talvez por segurança)
Copiando e já renomeando tudo
cp /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn
mv /etc/openvpn/openssl-1.0.0.cnf /etc/openvpn/openssl.cnf
Agora precisamos editar umas variáveis padrões, não é tão necessário assim, mas é bom deixar tudo certo
* Editar o arquivo /etc/openvpn/vars (as últimas linhas)
Os campos são auto explicativos, 3650 no KEY_EXPIRE vale 10 anos, mas é referente a chave do servidor.
# generation process.
export KEY_SIZE=1024
# In how many days should the root CA key expire?
export CA_EXPIRE=3650
# In how many days should certificates expire?
export KEY_EXPIRE=3650
# These are the default values for fields
# which will be placed in the certificate.
# Don't leave any of these fields blank.
export KEY_COUNTRY="BR"
export KEY_PROVINCE="SP"
export KEY_CITY="Campinas"
export KEY_ORG="RagazziD"
export KEY_EMAIL="d@ragazzid.com.br"
export KEY_CN="RagazziD.com"
export KEY_NAME="ServidorVPN.ragazzid.com.br"
export KEY_OU="RagazziD - TI"
#export PKCS11_MODULE_PATH=changeme (aqui é pra qndo for usar token)
#export PKCS11_PIN=1234 (aqui também)
Esses scripts que vamos gerar servem para limpar o servidor e preparar ele para receber novas chaves, sabemos que ele está limpo, mas isso serve pra pegar a config existente e aplicar pra tudo, é necessário fazer isso pelo menos 1 vez (ou sempre que você quiser dar uma limpa):
cd /etc/openvpn
source /etc/openvpn/vars
/etc/openvpn/clean-all
/etc/openvpn/build-ca
/etc/openvpn/build-dh
Agora temos algum conteúdo novo dentro de /etc/openvpn/keys/
É utilizado 2 comandos diferentes para criar arquivos que vão para a mesma pasta, vai entender né? Mas aqui vão eles:
É o comando utilizado para criar as chaves do servidor, que iremos configurar posteriormente no /etc/openvpn/server.conf (eu sei que ainda não criamos ele)
Aqui vai meu output:
root@ragazzid:/etc/openvpn# ./build-key-server server
Generating a 1024 bit RSA private key
..++++++
.........................++++++
writing new private key to 'server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [BR]:
State or Province Name (full name) [SP]:
Locality Name (eg, city) [Campinas]:
Organization Name (eg, company) [RagazziD]:
Organizational Unit Name (eg, section) [RagazziD - TI]:
Common Name (eg, your name or your server's hostname) [server]:
Name [RagazziD]:
Email Address [d@ragazzid.com.br]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /etc/openvpn/openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'BR'
stateOrProvinceName :PRINTABLE:'SP'
localityName :PRINTABLE:'Campinas'
organizationName :PRINTABLE:'RagazziD'
organizationalUnitName:PRINTABLE:'RagazziD - TI'
commonName :PRINTABLE:'server'
name :PRINTABLE:'RagazziD'
emailAddress :IA5STRING:'d@ragazzid.com.br'
Certificate is to be certified until Jul 25 20:39:56 2024 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
Em “A challenge password []:” se você digitar algo ai, todos os certificados dos usuários
Quando esses comandos forem concluídos, teremos 2 arquivos novos no keys (para cada que você digitar)
Para cada novo cliente que você quiser que alcance sua vpn, faça o procedimento execute o comando abaixo:
/etc/openvpn/build-key-pass
Insira as informações do usuário, na verdade essa parte pode ser feita no máquina do usuário, ai você só coloca a chave pública e certificado dele no seu servidor, assina eles e pronto, mas ok.
Aqui vai meu output:
root@ragazzid:/etc/openvpn# ./build-key-pass DiegoR
Generating a 1024 bit RSA private key
..++++++
........++++++
writing new private key to 'DiegoR.key'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [BR]:
State or Province Name (full name) [SP]:
Locality Name (eg, city) [Campinas]:
Organization Name (eg, company) [RagazziD]:
Organizational Unit Name (eg, section) [RagazziD - TI]:
Common Name (eg, your name or your server's hostname) [DiegoR]:
Name [RagazziD]:Diego Ragazzi
Email Address [d@ragazzid.com.br]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /etc/openvpn/openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'BR'
stateOrProvinceName :PRINTABLE:'SP'
localityName :PRINTABLE:'Campinas'
organizationName :PRINTABLE:'RagazziD'
organizationalUnitName:PRINTABLE:'RagazziD - TI'
commonName :PRINTABLE:'DiegoR'
name :PRINTABLE:'Diego Ragazzi'
emailAddress :IA5STRING:'d@ragazzid.com.br'
Certificate is to be certified until Jul 25 20:51:04 2024 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Agora 3 novos arquivos foram criados dentro do keys:
Quando o usuário cria esses arquivos, ele manda apenas o .csr e o .crt para o servidor, o .key NUNCA deve ser compartilhado, nesse caso o servidor precisa mandar os 3 arquivos pro cliente, mas fazer oq né?
Também é necessário mandar o certificado público do sevidor, ca.crt para que haja comunicação e troca de chaves. Se você configurou uma chave TLS tem que enviar também!
Se quiser configurar a chave tls:
openvpn --genkey --secret /etc/openvpn/keys/ta.key
Para configurar o servidor teremos de ter um arquivo ponto conf (.conf) na pasta /etc/openssh/ então vamos usar o nome server.conf (porque eu quero), mas não iremos criar do nada, vamos pegar algo pronto da lib :)
zcat /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf
Agora vamos editar esse arquivo ai, qundo você o abrir ele já vai ser auto explicativo, mas vou deixar em baixo os campos mais importantes:
Feito isso, basta iniciar o serviço
service openvpn start
Vá no seu cliente, windows / mac / linux e tente se conectar, lembrando que o cliente deve ter os seguintes 3 arquivos:
É um parto configurar openvpn no windows, no linux é instalar umas coisas e tudo fica fácil, no mac eu não lembro, porém vou deixar um link para que você possa configurar por você mesmo:
Ubuntu Considerar a partir de GUI Tools for Connecting to OpenVPN
Vou ficar de vendo pra MAC :(