Configurando o OpenVPN para múltiplos clientes
Muitas vezes precisamos interligar de forma segura diversos pontos que nao estao próximos fisicamente, ou, devido a algum imprevisto acabamos tendo que acessar remotamente e de forma segura os servidores de algum cliente.
Vou explicar aqui como configurar um servidor OpenVPN para aceitar conexões de múltiplos clientes utilizando certificados gerados com o OpenSSL.
-
Download e instalaçao do OpenVPN
-
Modelo do arquivo openssl.cnf
-
Gerando os certificados
-
Modelo do arquivo servidor.conf
-
Modelo do arquivo cliente.conf
Download e Instalaçao do OpenVPN
Aqui temos aquele mamao com açúcar que a grande maioria sabe de cor e salteado.
## Download do OpenVPN
wget http://openvpn.net/release/openvpn-2.0.9.tar.gz
## Descompactar o conteúdo do arquivo
tar -zxvf openvpn-2.0.9.tar.gz
## Isto é só para a organizaçao
mv openvpn-2.0.9/ /usr/src/
## Compilar e pronto
cd /usr/src/openvpn-2.0.9
./configure --prefix=/usr/local/openvpn
make && make install ## Ou ainda mais simples que tudo isso...
apt-get install openvpn</code>
Sou usuário do Debian e do Ubuntu, entao por questões de comodidade própria ;) vou prosseguir como se tivesse instalado via apt.
Modelo do arquivo openssl.cnf
Vou assumir que você já possui o OpenSSL instalado. Você pode alterar ou até mesmo usar o seu próprio openssl.cnf, estou fornecendo este pra deixar tudo bem completo =). Geralmente este arquivo encontra-se em /etc/ssl/openssl.cnf.
#
# OpenSSL example configuration file.
# This is mostly being used for generation of certificate requests.
#
RANDFILE = /dev/arandom
[ca]
default_ca = CA_default
[CA_default]
dir = /etc/openvpn
certificate = $dir/xx.crt
private_key = $dir/xx.key
serial = $dir/serial
database = $dir/index.txt
new_certs_dir = $dir/
default_md = md5
policy = policy_match
default_days = 3500
[policy_match]
countryName = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
####################################################################
[ req ]
default_bits = 1024
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
attributes = req_attributes
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
#countryName_default = AU
countryName_min = 2
countryName_max = 2
stateOrProvinceName = State or Province Name (full name)
#stateOrProvinceName_default = Some-State
localityName = Locality Name (eg, city)
0.organizationName = Organization Name (eg, company)
#0.organizationName_default = Internet Widgits Pty Ltd
# we can do this but it is not needed normally :-)
#1.organizationName = Second Organization Name (eg, company)
#1.organizationName_default = CryptSoft Pty Ltd
organizationalUnitName = Organizational Unit Name (eg, section)
#organizationalUnitName_default =
commonName = Common Name (eg, fully qualified host name)
commonName_max = 64
emailAddress = Email Address
emailAddress_max = 64
[ req_attributes ]
challengePassword = A challenge password
challengePassword_min = 4
challengePassword_max = 20
unstructuredName = An optional company name
[ x509v3_extensions ]
nsCaRevocationUrl = http://www.cryptsoft.com/ca-crl.pem
nsComment = "This is a comment"
# under ASN.1, the 0 bit would be encoded as 80
nsCertType = 0x40
#nsBaseUrl
#nsRevocationUrl
#nsRenewalUrl
#nsCaPolicyUrl
#nsSslServerName
#nsCertSequence
#nsCertExt
#nsDataType</code>
Gerando os certificados
Certificado da entidade certificadora (apenas um)
openssl req -nodes -new -x509 -keyout my-ca.key -out my-ca.crt -days 3650
Certificado do cliente (um para cada cliente)
openssl req -nodes -new -keyout xx.key -out xx.csr
openssl ca -out xx.crt -in xx.csr
Parametros Diffie Hellman no servidor.
openssl dhparam -out dh1024.pem 1024
Modelo do arquivo servidor.conf
Como o próprio nome diz, este é o arquivo de configuraçao do servidor. Este arquivo deve ficar localizado em /etc/openvpn. Lembrando que no servidor devemos ter os certificados da unidade certificadora, do servidor e as chaves públicas dos clientes.
port 443 #modifiquei a porta padrao do openvpn
proto tcp
dev tun
ca pmg.crt #certificado da unidade certificadora
cert xx.crt #chave pública do cliente
key xx.key #chave privada do cliente
dh dh1024.pem
client-config-dir ccd #criar o diretorio ccd diretorio no /etc/openvpn
route 10.0.1.0 255.255.255.0
server 10.0.1.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 3
Modelo do arquivo cliente.conf
Hum… em qual das máquinas vai este arquivo ?? ;) Claro que é na máquina cliente, no diretorio /etc/openvpn. Lembrando que no cliente devemos ter a chave publica da unidade certificadora, do servidor e as chaves publica e privada do proprio cliente.
dev tun0
proto tcp
remote 111.111.111.11 443 #endereco IP do servidor
nobind
persist-key
persist-tun
ca xx.crt #certificado do orgao certificador
cert xx.crt #certificado publico do cliente
key xx.key #chave privada do cliente
comp-lzo
verb 3
Com essas configurações podemos iniciar o openvpn e sair conectando os clientes. Os endereços IP serao atribuados dinamicamente.
openvpn --config /etc/openvpn/servidor.conf --daemon