Redes wi-fi abertas disponíveis ao público já são comuns de encontrar em eventos, bares, shoppings. Mas como navegar de maneira segura através das redes públicas?
A solução para isso é uso de VPNs (Virtual Private Network, ou Rede Privada Virtual). Conforme definição na wikipedia:
Rede Privada Virtual é uma rede de comunicações privada normalmente utilizada por uma empresa ou um conjunto de empresas e/ou instituições, construída em cima de uma rede de comunicações pública (como por exemplo, a Internet). O tráfego de dados é levado pela rede pública utilizando protocolos padrão, não necessariamente seguros.
VPNs seguras usam protocolos de criptografia por tunelamento que fornecem a confidencialidade, autenticação e integridade necessárias para garantir a privacidade das comunicações requeridas. Quando adequadamente implementados, estes protocolos podem assegurar comunicações seguras através de redes inseguras.
Deve ser notado que a escolha, implementação e uso destes protocolos não é algo trivial, e várias soluções de VPN inseguras são distribuídas no mercado. Adverte-se os usuários para que investiguem com cuidado os produtos que fornecem VPNs. Por si só, o rótulo VPN é apenas uma ferramenta de marketing.
O PROBLEMA:
Possuo um smartphone com o sistema operacional Android, e por diversas vezes preciso utilizar as redes wifi públicas para acessar alguns serviços da internet, e gostaria de fazer isso de forma segura e simples. Já que precisaria implantar um servidor de VPN, estabeleci alguns requisitos:
- Simples de configurar nos clientes VPN
- Uso de criptografia forte
- Tenha clientes multiplataforma (Smartphones Android, IPhone, sistemas operacionais Mac OS, Linux, Windows, BSD)
- Tenha cliente nativo em Android, sem necessidade de procedimento de root
- Cliente nativo para Mac OS, para utilizar a VPN no notebook
- Como vou utilizar um servidor Linux (em um provedor fora do país), utilizar pacotes disponíveis na distribuição Debian
A SOLUÇÃO:
Verificando os requisitos acima, cheguei até a opção de servidor VPN L2TP/IPSec (alguém tem alguma outra sugestão?). Para facilitar a configuração, a VPN vai ser através do uso de uma chave pré-compartilhada (PSK - Pre-shared key) e uma autenticação de usuário e senha. Simples e eficiente. É possível fazer a configuração utilizando certificados digitais, porém sua configuração dos clientes é mais complicada.
O servidor utilizado é um Linux Debian Lenny, utilizando sempre softwares instalados através do gerenciador de pacotes do repositório oficial. Alguns sites de referência que utilizei foram esses:
http://www.jacco2.dds.nl/networking/openswan-macosx.html
http://riobard.com/blog/2010-04-30-l2tp-over-ipsec-ubuntu/
http://tools.ietf.org/html/rfc3193
http://tools.ietf.org/html/rfc2661
Passo 1: Instalar os pacotes
# apt-get install openswan xl2tpd ppp
Passo 2: Configurar o IPSec
Editar o arquivo /etc/ipsec.conf e colocar o seguinte conteúdo:
version 2.0
config setup
nat_traversal=yes
virtual_private=%v4:10.0.0.0/8 <-- Mude os IPs da VPN conforme necessidade
protostack=netkey
conn L2TP-PSK-NAT
rightsubnet=vhost:%priv
also=L2TP-PSK-noNAT
conn L2TP-PSK-noNAT
authby=secret
pfs=no
auto=add
keyingtries=3
rekey=no
ikelifetime=8h
keylife=1h
type=transport
left=IP.SEU.SERVIDOR <-- Mude para o IP do seu servidor VPN
leftprotoport=17/1701
right=%any
rightprotoport=17/%any
# 'include' this file to disable Opportunistic Encryption.
# See /usr/share/doc/openswan/policygroups.html for details.
#
# RCSID $Id: no_oe.conf.in,v 1.2 2004-10-03 19:33:10 paul Exp $
conn block
auto=ignore
conn private
auto=ignore
conn private-or-clear
auto=ignore
conn clear-or-private
auto=ignore
conn clear
auto=ignore
conn packetdefault
auto=ignore
Editar o arquivo /etc/ipsec.secrets:
IP.SEU.SERVIDOR %any: PSK "SuaSenhaCompartilhada"
Passo 3: Configurar o L2TP
O L2TP (Layer 2 Tunneling Protocol) fornece um túnel para enviar dados. Ele não fornece criptografia e autenticação, porém, é por isso que precisamos usá-lo em conjunto com o IPSec. Curiosamente, tanto a Apple quanto a Microsoft costumam se referir ao L2TP como a tecnologia VPN segura, mas ignoram totalmente o fato de que a segurança é fornecida pelo IPSec.
Edite o arquivo /etc/xl2tpd/xl2tpd.conf:
[global]
ipsec saref = yes
[lns default]
ip range = 10.1.2.2-10.1.2.255 <-- Modifique de acordo com o número de clientes
local ip = 10.1.2.1 <-- IP do servidor VPN no túnel (lado esquerdo)
refuse chap = yes
refuse pap = yes
require authentication = yes
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
Passo 4: Configuração do PPP
Edite o arquivo /etc/ppp/options.xl2tpd:
require-mschap-v2
ms-dns 8.8.8.8 <-- Coloquei aqui os servidores DNS públicos do google
ms-dns 8.8.4.4
asyncmap 0
auth
crtscts
lock
hide-password
modem
debug
name l2tpd
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4
Edite o arquivo /etc/ppp/chap-secrets para cadastrar os usuários e senhas:
# user server password ip
test l2tpd testpassword *
Passo 5: Prepare a rede conforme necessidade
Eu criei um script de start de todos os serviços, já configurando a rede para a VPN e realizando NAT:
#!/bin/bash
for each in /proc/sys/net/ipv4/conf/*
do
echo 0 > $each/accept_redirects
echo 0 > $each/send_redirects
done
/etc/init.d/ipsec start
/etc/init.d/xl2tpd start
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Nesse site tem as configurações do cliente VPN em smartphones Android:https://12vpn.com/wiki/index.php?title=Android_1.6_L2TP/IPSec_PSK_instructions
Pronto. A configuração de clientes para Android e para Mac OS é bem simples e é nativo, não é necessário instalar nenhum programa para configuração. Agora você já pode utilizar as redes públicas abertas de forma segura.
domingo, janeiro 30, 2011
Assinar:
Postar comentários (Atom)
3 comentários:
Update: confirmei o funcionamento com um cliente nativo de VPN do Iphone.
Zucco, Parabens pelo blog e pelo tutorial, mas devo confessar que tive um pouco de dor de cabeça para colocar para funcionar no ubuntu 10.10. Nessa versão do Ubuntu tem um Bug no xl2ptd que não fornece automaticamente o ip para o cliente, devendo você colocar o ip na mão no arquivo /etc/ppp/chap-secrets
Link para o bug: https://bugs.launchpad.net/ubuntu/+source/xl2tpd/+bug/659181
Do resto testei com meu Xoom com android 3.1 e funcionou perfeito.
Só uma resalva, se você tem mais de um dispositivo movel, cadastre usuarios diferentes para não ter problema de conflito de IP's caso utilize o ubuntu 10.10 e ou cadastre os IP's manualmente no chap-secrets.
Abraço
Pedro H. Matheus
ZUCCO to com um problema
Seguei o tuto e de boa, a VPN fecha tunel
O problema é quando eu tento um acesso externo, configuro o computador para DMZ e nada!!
Uso conexao domestica e SPEEDD
ME Ajuda por favor
Obrigado,
Daniel Moreno
Postar um comentário