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.htmlhttp://riobard.com/blog/2010-04-30-l2tp-over-ipsec-ubuntu/http://tools.ietf.org/html/rfc3193http://tools.ietf.org/html/rfc2661Passo 1: Instalar os pacotes# apt-get install openswan xl2tpd ppp
Passo 2: Configurar o IPSecEditar 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 L2TPO
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 PPPEdite 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 necessidadeEu 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_instructionsPronto. 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.