Pular para o conteúdo principal

Servidor OpenVPN para Multiplas Conexões

VPN no Linux Ubuntu/Debian com OpenVPN - Multiusuários

Esse é um exemplo totalmente prático para implementação de uma segurança a mais para
qualquer tipo de rede, usando o OpenVPN como uma solução simples, segura e um benefício
a mais para interligação de redes distantes, sendo estas, localizadas na internet.


Quando iniciei meu primeiro projeto de VPN (uns 2 anos atrás), me deparei com algumas
ferramentas disponíveis para atender tal serviço. Como as coisas sempre aparecem e tem que
ser executadas de última hora, resolvi sem muito planejamento e estudo utilizar a ferramenta
OpenVPN.


Esse artigo tem como objetivo mostrar de forma rápida e simples a configuração de uma VPN
baseada em Linux utilizando o OpenVPN como ferramenta, sendo que este é um software
estável, simples de configurar, além de ser um projeto que está sempre em desenvolvimento.


Utilizaremos como ferramentas os aplicativos OpenVPN, para gerenciamento da rede virtual, tanto para os Servidores e Cliente, o OpenSSL para gerar os certificados necessários para a nossa segurança e para aqueles que têm um link de internet com IP dinâmico.

Vamos criar uma pasta para realizar o download do aplicativo LZO (biblioteca de compressão de dados).

# mkdir apps

# cd apps


Vamos realizar o download do LZO:

# wget http://www.winlinuxtecnologia.com/downloads/lzo-2.06.tar.gz


Vamos agora descompactar e instalar o LZO:

# tar -zxvf lzo-2.06.tar.gz

# cd lzo-2.06

# ./configure

# make

# make install


Bom instalado o LZO em seu Linux, agora vamos a instalação e configuração do OpenVPN com OpenSSL:

# apt-get install openvpn openssl


Copiar para o diretório /etc/openvpn os scripts do openvpn para facilitar nossas vidas, no Debian
encontramos estes scripts no diretório /usr/share/doc/openvpn/examples/easy-rsa/2.0/ copiamos todo o
conteúdo deste diretório para /etc/openvpn/easy-rsa/.


# mkdir /etc/openvpn/easy-rsa

# cp -rp /usr/share/doc/openvpn/examples/easy-rsa/2.0/. /etc/openvpn/easy-rsa/


Editamos o arquivo vars, no final deste arquivo alteramos os seguintes campos:

# vi /etc/openvpn/easy-rsa/vars

Para sua empresa podemos utilizar:

export KEY_COUNTRY="SEUPAIS"
export KEY_PROVINCE="SEUESTADO"
export KEY_CITY="SUACIDADE"
export KEY_ORG="Sua Empresa"
export KEY_EMAIL="email@dominio.com.br"



Obs.: Por padrão, os certificados criados, são configurados para expirar em 3650 dias, caso queira diminuir
este período para algum cliente, antes de gerar as chaves editamos no arquivo vars e alteramos o
parâmetro "export KEY_EXPIRE=3650" e no local de 3650 colocamos o valor que acharmos necessário, após essa alteração precisamos executar "source vars" para que sejam carregadas as variáveis editadas no arquivo vars.


Após editarmos o arquivo vars, precisamos carregar as variáveis editas, no diretório /etc/openvpn/easy-rsa/ executamos na linha de comando:

# source vars


Criamos o diretório keys dentro de /etc/openvpn/easy-rsa, onde será criada todos os certificados:

# mkdir /etc/openvpn/easy-rsa/keys


Caso este diretório já exista e você queira apagar todas as informações contidas nele, você pode executar na linha de comando:

# /etc/openvpn/easy-rsa/./clean-all

ATENÇÃO: Este script clean-all só deve ser executado uma vez, a não ser que você queira limpar todas as chaves e certificados criados do servidor e usuários da sua VPN para configurar tudo novamente.

Vamos agora gerar o certificado raiz, no diretório /etc/openvpn/easy-rsa encontramos o script build-ca,
executamos:


# /etc/openvpn/easy-rsa/./build-ca


Ele pedirá as seguintes informações:

Generating a 1024 bit RSA private key
...................++++++
.....................++++++
writing new private key to 'ca.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) [SEUPAIS]:
State or Province Name (full name) [SEUESTADO]:
Locality Name (eg, city) [SUACIDADE]:
Organization Name (eg, company) [SUAEMPRESA]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address [email@dominio.com.br]:



Podemos observar que ele sugere em alguns campos as variáveis que editamos no arquivo vars, caso isso não aconteça e porque você esqueceu de executar o comando source vars ou não editou o arquivo vars adicionando suas informações.

Podemos observar que no diretório /etc/openvpn/easy-rsa/keys encontramos os arquivos:
 

ca.crt
ca.key
index.txt
serial



Agora geramos o certificado do servidor, muita atenção agora, precisamos executar o script buildkey-
server mais um nome qualquer como referência do servidor, este nome será informado quando o script
perguntar:


# /etc/openvpn/easy-rsa/./build-key-server nomeescolhido


Country Name (2 letter code) [SEUPAIS]:
State or Province Name (full name) [SEUESTADO]:
Locality Name (eg, city) [SUACIDADE]:
Organization Name (eg, company) [SUAEMPRESA]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) [nomeescolhido]: nomeescolhido



Depois você terá a opção de digitar uma senha que será solicitada toda vez que o usuário conectar à VPN, eu deixei em branco:

A challenge password []:



Finalizando o script será perguntado se você quer inscrever este certificado, você pressionará "y" para as duas solicitações:

Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y



Da mesma forma que geramos o certificado do servidor agora precisamos gerar o certificado para os
usuários da VPN, também precisamos definir um common name para os certificados dos usuários. Para os certificados dos usuários usamos o script build-key:


# /etc/openvpn/easy-rsa/./build-key usuariodavpn


Country Name (2 letter code) [SEUPAIS]:
State or Province Name (full name) [SEUESTADO]:
Locality Name (eg, city) [SUACIDADE]:
Organization Name (eg, company) [SUAEMPRESA]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []: usuariodavpn
 

Neste script também serão solicitados os campos:

A challenge password []:
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y


Eu deixei o campo de senha zerado.

Obs.: Toda vez que você precisar gerar um novo certificado é preciso executar o comando source vars no diretório /etc/openvpn/easy-rsa mesmo não tendo alterado as opções do arquivo vars.


ATENÇÃO: Não execute o comando clean-all caso não queira criar todos os certificados novamente.

Para reforçar a segurança e permitir a troca de chaves entre o servidor e os clientes no momento da
conexão, executamos o script build-dh sem utilizar parâmetros com o script.


# /etc/openvpn/easy-rsa/./build-dh


Criamos uma assinatura secreta como chave para o servidor executando o comando:
 

# openvpn --genkey --secret chave.key


Com este comando geramos a chave chave.key no diretório corrente e não no padrão /etc/openvpn/easyrsa/ keys.

Após criada a chave podemos copiá-la para o diretório /etc/openvpn/easy-rsa/keys para manter um padrão de diretórios utilizados.


Por padrão, os scripts executados acima, geram as chaves e certificados necessários para o servidor e o cliente no diretório /etc/openvpn/easy-rsa/keys.



Criamos o arquivo de configuração do servidor no diretório /etc/openvpn/ com o nome padrão server.conf (você pode utilizar o nome que quiser, assim facilita a administração) com os seguintes parâmetros:

# vim /etc/openvpn/server.conf


# ----------------------------------------------------------------------
# PROTOCOLO DE CONEXAO
# ----------------------------------------------------------------------

proto tcp

# ----------------------------------------------------------------------
# PORTA DA VPN
# ----------------------------------------------------------------------

port 1194

# ----------------------------------------------------------------------
# DRIVER DA INTERFACE
# ----------------------------------------------------------------------

dev tun
 

# ----------------------------------------------------------------------
# ATRIBUI ENDERECOS DE IP DHCP PARA USUARIOS DA VPN
# ----------------------------------------------------------------------

server 192.168.100.0 255.255.255.0


# ----------------------------------------------------------------------
# ADICIONANDO RODAS AOS USUARIO PARA REDE LOCAL
# ----------------------------------------------------------------------

push "route 192.168.0.0 255.255.255.0"
push "dhcp-option DNS 192.168.0.1"
push "dhcp-option WINS 192.168.0.1"


# ----------------------------------------------------------------------
# CONFIGURACOES ADICIONAIS PARA USUARIO
# ----------------------------------------------------------------------

push "ping 10"
push "ping-restart 60"


# ----------------------------------------------------------------------
# ROTAS DO SERVIDOR
# ----------------------------------------------------------------------

route 192.168.100.0 255.255.255.0

# ----------------------------------------------------------------------
# COMPACTACAO LIB LZO
# ----------------------------------------------------------------------

comp-lzo
keepalive 10 120
float max-clients 10
persist-key
persist-tun
log-append /var/log/openvpn.log
verb 6
 

# ----------------------------------------------------------------------
# SERVIDOR TLS
# ----------------------------------------------------------------------

tls-server
 

# ----------------------------------------------------------------------
# CHAVES NECESSARIAS PARA CONEXAO VPN
# ----------------------------------------------------------------------

dh /etc/openvpn/easy-rsa/keys/dh1024.pem
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/nomeescolhido.crt
key /etc/openvpn/easy-rsa/keys/nomeescolhido.key


# ----------------------------------------------------------------------
# CHAVE SECRETA PARA ACESSO AO SERVIDOR
# ----------------------------------------------------------------------
tls-auth /etc/openvpn/easy-rsa/keys/chave.key
status /var/log/openvpn.stats



Reiniciamos o serviço OpenVPN:

# /etc/init.d/openvpn restart



Dicas de Firewall Iptables:

iptables -t filter -A INPUT -p udp --dport 1194 -j ACCEPT
iptables -t filter -A FORWARD -p udp -s 192.168.0.0/24 --dport 1194 -j ACCEPT
iptables -t filter -A FORWARD -p udp -d 192.168.0.0/24 --sport 1194 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d 10.0.0.0/24 -j ACCEPT
iptables -t nat -A POSTROUTING -d 192.168.0.0/24 -s 10.0.0.0/24 -j ACCEPT
iptables -t nat -I POSTROUTING -s 10.0.0.0/24 -o eth1 -j MASQUERADE



Fique a vontade para restringir os acessos da maneira que convier. As regras apresentadas acima permitirão aos usuários da VPN acesso livre aos sistemas de sua empresa.

Para observar se a porta utilizada no arquivo acima está ativa podemos digitar na linha de comando:
 

# netstat -nat | grep 1194


O resultado provavelmente será:

tcp 0 0 0.0.0.0:1194 0.0.0.0:*


Se você digitar na linha de comando ifconfig provavelmente terá informações do dispositivo virtual
configurado no arquivos acima.


# ifconfig


Terá algo do tipo:

tun0
Link encap:NAo Especificado
Endereço de HW 00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet end.: 192.168.100.1 P-a-P:102.168.100.2 Masc:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metrica:1
RX packets:19802 errors:0 dropped:0 overruns:0 frame:0
TX packets:19433 errors:0 dropped:0 overruns:0 carrier:0
colisÃμes:0 txqueuelen:100
RX bytes:4724842 (4.5 MiB) TX bytes:7234934 (6.8 MiB)



Configurando um cliente Windows

Como cliente Windows utilizei o Windows XP, mas já configurei o cliente no Windows 7 e funciona
perfeitamente. Realizar o download do cliente Windows no link:


http://www.winlinuxtecnologia.com/downloads/openvpn-2.1_rc22-install.exe


Instalamos mantendo as opções padrões do sistema, famoso Next, Next, continuar assim mesmo, next e Finish.


No diretório C:\Program Files\OpenVPN\config

Neste diretório criamos um novo diretório keys e copiamos para este diretório criado (keys) as seguintes chaves criadas no Servidor na pasta /etc/openvpn/easy-rsa/keys: dh1024.pem, ca.crt, usuariodavpn.crt, usuariodavpn.key, chave.key.

No diretório C:\Program Files\OpenVPN\config criamos um arquivo chamado cliente.ovpn (a extensão *.ovpn é obrigatória para o cliente Windows), neste arquivo configuramos os parâmetros:

client
dev tun
proto tcp
remote ensinalinux.sytes.net
port 1194
pull
comp-lzo
keepalive 10 120
float
tls-client
persist-tun
persist-key
dh keys/dh1024.pem
ca keys/ca.crt
cert keys/usuariodavpn.crt
key keys/usuariodavpn.key
tls-auth keys/chave.key
route-method exe
route-delay 2


OBS.: "ensinalinux.sytes.net" foi usado neste tutorial devido o Servidor VPN não estar em uma rede com IP Fixo (Dedicado), então criamos um No-IP (www.no-ip.com), e realizamos a instalação do mesmo no Servidor. Não entraremos em detalhes neste tutorial de como instalar o No-IP.


Salve o arquivo client.ovpn e fechamos o arquivo criado.

Clicamos em Iniciar > Programas > OpenVPN > e clicamos em OpenVPN GUI, este abrirá próximo ao seu relógio, clique com o botão direito do mouse e em conectar.


Acredito que sua rede privada virtual já esteja funcionando, como dica não utilize a faixa de IP de sua
empresa para sua VPN em alguns casos pode dificultar na criação das rotas e para o cliente Windows XP ou Windows 7 o usuário da VPN precisa ser administrador local para criar as rotas de acesso.


Pronto seu Servidor VPN para os usuários externos está criado e configurado corretamente.



Abraços,

Fábio Vieira
System and Network Admin Linux and Windows

E-mail: ensinalinux@gmail.com
Website: www.winlinuxtecnologia.com
Tel.: (41) 9893-8701

Comentários

Postagens mais visitadas deste blog

Trabalhando com Raid via Software no Debian / Ubuntu

Redundant Array of Independent Drives , também denominado Redundant Array of Inexpensive Drives , mais conhecido como simplesmente RAID ou ainda em português: Conjunto Redundante de Discos Independentes ou também Conjunto Redundante de Discos Econômicos ou ainda Arranjo Redundante de Discos Independentes, é um meio de se criar um sub-sistema de armazenamento composto por vários discos individuais, com a finalidade de ganhar segurança e desempenho. Popularmente, RAID seriam dois ou mais discos (por exemplo, HD ou disco rígido) trabalhando simultaneamente para um mesmo fim, por exemplo, citando o exemplo de RAID -1 logo abaixo, serviria como um espelhamento simples, rápido e confiável entre dois discos, para fazer o backup de um disco em outro. Apesar do RAID oferecer segurança e confiabilidade na adição de redundância e evitar falhas dos discos, o RAID não protege contra falhas de energia ou erros de operação. Falhas de energia, código errado de núcleo ou erros o

Códigos de Status do Squid

Boa tarde galera, Muitos trabalham com servidores proxy usando squid e várias vezes temos que analisar os logs de acesso para tentar entender o que está acontecendo. Todos que já viram um log do squid conseguem identificar o site acessado, o usuário ou mesmo se o acesso foi bem sucedido ou não, contudo há alguns códigos que chamam a atenção. Veja um trecho de um log do squid a seguir: 1199263171.923    285 192.168.254.12 TCP_DENIED/403 1503 GET http://www.menshealth.com/media/images/cma/dec04_lust5_200x200.jpg jose NONE/- text/html 1199263176.363    302 192.168.254.15 TCP_MISS/000 0 GET http://www.google.com.br/carlos DIRECT/74.125.47.147 - 1199263176.379      0 192.168.254.15 TCP_DENIED/407 2033 GET http://www.folha.uol.com.br/folha/common.css - NONE/- text/html 1199263176.439     58 192.168.254.15 TCP_IMS_HIT/200 32356 GET http://www.folha.uol.com.br/folha/common.css carlos NONE/- text/css Nesses logs podemos identificar que o usuário “jose” teve seu acesso negado ao site menshealth.

Instalando Banco de Dados Firebird no Linux

Bom dia! Para muitos tem sido uma tortura instalar um servidor Firebird Linux. Reinstalar então nem se fala. Na internet há "trocentos" tutoriais ensinando. Mas você segue tudo à risca e não dá certo. Às vezes só consegue depois de ler uns dez tutorias e catando uma informação aqui e outra ali. Espero que este tutorial seja o único que você vai precisar ler para poder instalar o Firebird. Preparando o Terreno Para o modo como instalaremos o Firebird , o seu Linux precisa ter instalado a biblioteca libstdc++5 . Se você usa Ubuntu, Debian ou derivados, digite num terminal:  # apt-get install libstdc++5 Se você usa uma distribuição baseada em pacotes RPM (como openSUSE , Fedora e outras), terá que instalar o pacote compat-libstdc++ . Na maioria das distribuições RPM você instala assim: # yum install nome_do_pacote_rpm Baixando e instalando o Firebird   Acesse o site firebirdsql.org e depois clique em "Download Firebird 2.5.1" (versão disponíve