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.455 ]

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

OpenVPN se comportando como PPTP

Aplicando patches no kernel

Instalando o Ocomon 1.40 no FreeBSD 6.0

Auditando senhas com John The Ripper

Leitura recomendada

Instalando e integrando o amavis e o viruscan no sendmail

Segurança extrema com LIDS: novos recursos

Protegendo o ESB: Conceitos e técnicas de segurança para empresas de serviços web críticos

Trilhas de Certificação em Segurança da Informação - Qual caminho seguir?

wlmproxy - um proxy superior

  
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