VPN com FreeS/WAN

O FreeS/WAN é uma das várias implementações do IPSec (Internet Protocol Security) e IKE (Internet Key Exchange) para GNU/Linux. Com ele você pode fazer uma VPN entre redes fisicamente distantes usando uma rede insegura como a internet.

[ Hits: 86.061 ]

Por: Pedro Pereira em 10/05/2005 | Blog: http://www.pedropereira.net


Configurando o serviço IPSec - utilizando o arquivo ipsec.conf



Depois que você gerou todas as chaves necessárias em todos os hosts, é hora de editar o arquivo ipsec.conf para configurar como será a nossa VPN.

Vou tentar deixar claro para que servem todas as opções neste arquivo (que não são muitas).

interfaces=%defaultroute

Essa opção necessariamente tem que estar certa sempre, ou praticamente nada irá dar certo!

Se o seu gateway for o caminho certo para a VPN, então pode deixar exatamente como está. Se não, altere para a placa de rede que terá a comunicação com a outra ponta da VPN. Por exemplo, se a VPN for estabelecida via a placa de rede eth0, então a linha deverá ficar:

interfaces="ipsec0=eth0"

A opção interfaces="ipsec0=eth0" vai ser o suficiente se a sua VPN for bem simples.

klipsdebug=none
plutodebug=none


Estas opções geralmente são mais necessárias quando a sua VPN está com algum problema. Elas "medem" o nível de informação que será logado pelo serviço IPSec. Se você quiser o máximo de informações possível, é só mudar "none" para "all".

uniqueids=yes

Esta opção faz com que uma conexão antiga seja encerrada quando uma nova, com a mesma ID, apareça.

Nas opções acima, será muito difícil você ter que alterar alguma coisa, a não ser que a sua VPN seja um caso um pouco mais específico.

keyingtries=0

Esta opção indica a quantidade de tentativas que devem ser feitas para se negociar uma conexão antes de desistir. Esta opção só tem efeito localmente, ou seja, o outro lado não precisa necessariamente ter o mesmo número de tentativas especificadas nesta opção. Para fazer com que o serviço não desista nunca, deixe com o "0" ou substitua por %forever (é recomendado que se deixe o "0" mesmo).

disablearrivalcheck=no

Habilita ou desabilita a checagem dos pacotes que acabam de chegar do túnel. É recomendado que você nunca desabilite esta opção, pois ela aumenta a segurança e confiabilidade do túnel e não atrapalha em nada.

authby=rsasig

Define como os gateways participantes da VPN irão autenticar-se. As opções são:
  • secret, para senhas;
  • rsasig, para assinaturas RSA (o padrão e melhor opção);
  • secret|rsasig, para usar ambas as opções ou never, usado se você nunca for querer estabelecer a conexão ou não for aceitá- la.

Como já foi dito anteriormente, a melhor opção é usar assinaturas RSA (rsasig).

leftrsasigkey=%dns
rightrsasigkey=%dns


Define como será encontrada a chave RSA. Os valores que podem ser usados são:
  • %none = é o mesmo que não especificar um valor;
  • %dnsondemand = é o valor padrão. Significa que a chave será lida do DNS quando for necessária;
  • %dnsonload = com esta opção, a chave RSA será lida do DNS quando a conexão for ativada. Nas versões mais atuais do FreeS/WAN, esta opção será tratada como %none se right=%any ou %opportunistic;
  • %dns = é tratado como %dnsonload.

conn sample

Aqui começam as configurações dos túneis que serão estabelecidos. A linha "conn sample" é o nome da conexão. Você poderia mudá-la para qualquer nome, como "conn campinas". Lembre-se que você não pode mudar o "conn", apenas o nome que segue.

type=tunnel

Define o tipo da conexão a ser estabelecida. Você pode colocar os seguintes valores aqui:
  • tunnel = define uma conexão host a host, host a sub-rede ou sub-rede a sub-rede. Esta é a opção padrão;
  • passthrough = define que o IPSec não deve ser usado para estabelecer a conexão;
  • drop = define que todos os pacotes devem ser descartados;
  • reject = define que os pacotes devem ser descartados.

left=210.xxx.xxx.xxx
right=200.xxx.xxx.xxx


Define qual será a ponta left (ou right) do seu túnel VPN. O FreeS/WAN trabalha do seguinte modo: cada host participante do túnel pode ser left ou right. Não importa qual seja o tipo da VPN a ser estabelecida, você sempre deve definir quem será o left e quem será o right. Nesta opção, deve ser definido o IP do host que você definiu que será o left. Não tem muita importância um host ser left ou right (na verdade, isso praticamente não importa) desde que você seja consistente na sua escolha, ou seja, se você definiu o host gateway1 como left, referencie- se a ele sempre como left.

leftsubnet=192.168.0.0/24
rightsubnet=192.168.0.0/24


Aqui é definido qual é o endereço da sub-rede (da rede que está "atrás") do host. No exemplo é 192.168.0.0, que é um endereço de classe C. Se usássemos um endereço de classe A, deveríamos colocar /8; caso fosse classe B seria /16.

leftrsasigkey=0s$Pa%6...
rightrsasigkey=$#1@psoeKe~...


Aqui você deve colocar a chave RSA do host left para que o túnel seja estabelecido com sucesso. A chave que deve ser colocada aqui, é a chave que está no arquivo ipsec.secrets, mais especificamente a chave que está na linha "pubkey=...", que foi gerada com o comando ipsec_newhostkey explicado anteriormente. O mesmo vale para a opção rightrsasigkey encontrada mais adiante no ipsec.conf.

leftnexthop=200.xxx.xxx.xxx
rightnexthop=200.xxx.xxx.xxx


Aqui deve ser definido qual o endereço IP do gateway usado pelo host. Esta opção só tem importância localmente, ou seja, não necessariamente deve ser igual nas duas pontas do túnel.

auto=start

Define quando a conexão referenciada por esta opção será ativada. Alguns valores que podem ser colocados aqui são:
  • start = define que a conexão será iniciada assim que o serviço IPSec for iniciado;
  • add = define que a conexão será feita manualmente. Para que se consiga estabelecer a conexão manualmente, deve- se usar o comando ipsec auto --up nome_da_conexão.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Instalação
   3. Gerando as chaves RSA - utilizando o arquivo ipsec.secrets
   4. Configurando o serviço IPSec - utilizando o arquivo ipsec.conf
   5. Testando os túneis
   6. Troubleshooting - corrigindo os inevitáveis erros
   7. Fontes e conclusão
Outros artigos deste autor

Aplicando patches no kernel

Instalando o Ocomon 1.40 no FreeBSD 6.0

OpenVPN se comportando como PPTP

Auditando senhas com John The Ripper

Leitura recomendada

VPN com openVPN no Slackware 11

Criptografia de disco

Cliente "automágico" Linux logando no domínio NT/Samba

Verifique a sua fortaleza com lsat - software de auditoria em servidores e desktops

Security Hacks: Linux & BSD

  
Comentários
[1] Comentário enviado por y2h4ck em 10/05/2005 - 09:55h

Ola tudo bem ?
Bom so pra fechar queria dar uma dica, ao inves de fazer com FreeSWAN, utilizem o OpenSWAN pois ele e a continuacao do projeto FreeSWAN que se acabou fazem 2 anos +/-.

ABracos

[2] Comentário enviado por peregrino em 10/05/2005 - 10:39h

opa blz

fala spaw tudo bem e concerteza openswan é bem melhor por ter suporte mas ta otimo esse tutorial

cara gostaria de saber como eu gero chaves dinamicas com essa vpn ou em openswan

obrigado

[3] Comentário enviado por Bique em 10/05/2005 - 12:29h

Simplismente Beleza...Keep Going na minha lingua de Mocambique KANIMAMBO.

[4] Comentário enviado por crayon em 10/05/2005 - 23:15h

O artigo está muito bom, mas a dica do peregrino deve ser seguida, uma vez que o FreeS/WAN acabou, infelizmente.
O Openswan está bem documentado e não tive problemas em sua utilização.

Atc,
Kassiano

[5] Comentário enviado por ferjun01 em 30/08/2008 - 11:13h

Salve galera, peço ajuda para resolver este problema..

Estou com problemas para fechar uma vpn com Freeswan no Slackware, esta configuração já existia e alterei apenas os ip's, a chave PSK e inclui o 3-DES, quando subo a vpn aparentemente está fechada, mas quando mando um telnet para o destino ele vai por fora da vpn, abaixo vou colocar os arquivos de configuraçâo, se possível peço sua ajuda neste caso, muito obrigado :

IPSEC.CONF

# /etc/ipsec.conf - FreeS/WAN IPsec configuration file
# RCSID $Id: ipsec.conf.in,v 1.11 2003/06/13 23:28:41 sam Exp $

# This file: /usr/local/share/doc/freeswan/ipsec.conf-sample
#
# Manual: ipsec.conf.5
#
# Help:
# http://www.strongsec.com/freeswan/install.htm

version 2.0 # conforms to second version of ipsec.conf specification

# basic configuration
config setup
interfaces="ipsec0=eth0"
klipsdebug=none
plutodebug=none
# plutoload=%search
# plutostart=%search
# plutowait=no

# Debug-logging controls: "none" for (almost) none, "all" for lots.
# klipsdebug=all
# plutodebug=all
# crlcheckinterval=600
# strictcrlpolicy=yes

conn %default
auto=add
type=tunnel
left=
right=
authby=secret
keyexchange=ike
esp=3des-md5-96i
keylife=24h

# OE policy groups are disabled by default
conn block
auto=ignore

conn clear
auto=ignore

conn private
auto=ignore

conn private-or-clear
auto=ignore

conn clear-or-private
auto=ignore

conn packetdefault
auto=ignore

# Add connections here.

# sample VPN connection
#sample# conn sample
#sample# # Left security gateway, subnet behind it, next hop toward right.
#sample# left=%defaultroute
#sample# leftcert=myCert.pem
#sample# leftsubnet=172.16.0.0/24
#sample# # Right security gateway, subnet behind it, next hop toward left.
#sample# right=10.12.12.1
#sample# rightid="<Distinguished name of right security gateway>"
#sample# rightsubnet=192.168.0.0/24
#sample# # To authorize this connection, but not actually start it, at startup,
#sample# # uncomment this.
#sample# #auto=start
conn vpn
auto=add
type=tunnel
left=200.X.X.11
leftsubnet=200.X.X.51/32
leftnexthop=
right=201.X.X.2
rightsubnet=192.168.1.0/24
rightnexthop=201.X.X.1
authby=secret
esp=3des-md5-96i
keylife=24h
pfs=yes
rekeymargin=9m
rekeyfuzz=25%

No ipsec.secret, tem apenas uma linha contendo a chave, substitui uma pela outra :

ipsec.secret

:PSK "CHAVE"


Dando um ipsec auto --status :
ipsec auto --status
000 interface ipsec0/eth0 201.X.X.2
000 %myid = (none)
000 debug none
000
000 "vpn": 192.168.1.0/24===201.X.X.2---201.X.X.1...200.X.X.11===200.X.X.51/32; erouted; eroute owner: #4
000 "vpn": ike_life: 3600s; ipsec_life: 86400s; rekey_margin: 540s; rekey_fuzz: 25%; keyingtries: 0
000 "vpn": policy: PSK+ENCRYPT+TUNNEL+PFS+UP; prio: 32,24; interface: eth0;
000 "vpn": newest ISAKMP SA: #3; newest IPsec SA: #4;
000
000 #4: "vpn" STATE_QUICK_I2 (sent QI2, IPsec SA established); EVENT_SA_REPLACE in 85714s; newest IPSEC; eroute owner
000 #4: "vpn" esp.243f75c5@200.X.X.11 esp.bbaf1782@201.X.X.2 tun.1004@200.X.X.11 tun.1003@201.X.X.2
000 #3: "vpn" STATE_MAIN_I4 (ISAKMP SA established); EVENT_SA_REPLACE in 3042s; newest ISAKMP
000


No var/log/secure apresenta um erro na 1ª linha do ipsec.secrets :
/var/log/secure
6378 Aug 28 22:27:13 servervpn pluto[15662]: Starting Pluto (FreeS/WAN Version 2.05 X.509-1.5.3 PLUTO_ USES_KEYRR)
6379 Aug 28 22:27:13 servervpn pluto[15662]: Using KLIPS IPsec interface code
6383 Aug 28 22:27:13 servervpn pluto[15662]: Changing to directory '/etc/ipsec.d/crls'
6384 Aug 28 22:27:13 servervpn pluto[15662]: added connection description "vpn"
6385 Aug 28 22:27:13 servervpn pluto[15662]: listening for IKE messages
6386 Aug 28 22:27:13 servervpn pluto[15662]: adding interface ipsec0/eth0 201.X.X.2
6387 Aug 28 22:27:13 servervpn pluto[15662]: loading secrets from "/etc/ipsec.secrets"
6388 Aug 28 22:27:13 servervpn pluto[15662]: ERROR "/etc/ipsec.secrets" line 1: index ":PSK" illegal l eading `:' in IPv6 numeric address
6389 Aug 28 22:27:16 servervpn pluto[15662]: "vpn" #1: initiating Main Mode
6390 Aug 28 22:27:16 servervpn pluto[15662]: "vpn" #1: received Vendor ID Payload; ASCII hash: tm{COMENTARIO}31` A{COMENTARIO}24kQo*,{COMENTARIO}16c}/({COMENTARIO}0748{COMENTARIO}37
6391 Aug 28 22:27:16 servervpn pluto[15662]: "vpn" #1: Peer ID is ID_IPV4_ADDR: '200.X.X.11'
6392 Aug 28 22:27:16 servervpn pluto[15662]: "vpn" #1: ISAKMP SA established
6393 Aug 28 22:27:16 servervpn pluto[15662]: "vpn" #2: initiating Quick Mode PSK+ENCRYPT+TUNNEL+PFS+UP {using isakmp#1}
6394 Aug 28 22:27:16 servervpn pluto[15662]: "vpn" #2: ignoring informational payload, type IPSEC_RESP ONDER_LIFETIME
6395 Aug 28 22:27:16 servervpn pluto[15662]: "vpn" #2: sent QI2, IPsec SA established {ESP=>0xd6e0a488 <0x92ec5888}
6396 Aug 28 22:28:11 servervpn pluto[15662]: shutting down
6397 Aug 28 22:28:11 servervpn pluto[15662]: forgetting secrets
6398 Aug 28 22:28:11 servervpn pluto[15662]: "vpn": deleting connection
6399 Aug 28 22:28:11 servervpn pluto[15662]: "vpn" #2: deleting state (STATE_QUICK_I2)
6400 Aug 28 22:28:11 servervpn pluto[15662]: "vpn" #1: deleting state (STATE_MAIN_I4)
6401 Aug 28 22:28:11 servervpn pluto[15662]: shutting down interface ipsec0/eth0 201.X.X.2

[6] Comentário enviado por ferjun01 em 30/08/2008 - 13:55h

Estes são os requerimentos para fechar a vpn :

Fase I – Protocolo IKE – Não será aceito outro protocolo senão IKE
Fase I – Algoritmos de criptografia e integridade  3DES com MD5
Fase I – Grupo Diffie-Hellman Grupo 2 (1024 bits)
Fase I – Renegociar IKE Security Associations a cada 1440 minutos
Fase I – Aggressive Mode (DESABILITADO)
Fase I – Método de autenticação Shared Secret
Fase II - Protocolo IPSEC
Fase II – Algoritmos de criptografia e integridade
A Fase II seguirá os mesmos algoritmos da Fase I.
Fase II –PFS (Perfect Forward Secrecy) Grupo Diffie-Helmann 2 (1024 bits)
Fase II – Renegociar IPSEC Security Association a cada 3600 segundos
Fase II – Compressão de dados IPSEC (DESABILITADO)


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts