Uso do IPSEC em Linux ao configurar conexões VPN de rede a rede e ponto a ponto

Este artigo lança um olhar detalhado sobre os princípios de desenvolvimento, a base para a implementação de VPN e o conceito de protocolo IPSEC, fornecendo uma descrição das características gerais de IPSEC e dos mecanismos necessários para sua implementação. Este artigo foi especialmente selecionado para a tradução pela developerWorks Rússia como um exemplo de developerWorks nas ofertas em todo o mundo.

Aleksandr Derevyanko, Engineer IT department, Consultor

Aleksandr Derevyanko trabalha no setor de TI desde 1990. Ele ocupou cargos que variam de engenheiro "Categoria 1" a chefe de um departamento de TI. Ele está atualmente trabalhando como consultor especialista sênior do departamento de engenharia e suporte técnico no Escritório Administrativo do Território Krasnodar, na Federação Russa.



18/Jun/2012

Introdução

Muitas organizações em todo o mundo usam qualquer método de conexão física disponível para vincular os seus escritórios individuais. A opção escolhida pode ser as duas linhas dedicadas digitais e redes privadas virtuais (VPN), que são significativamente mais baratas do que seus equivalentes físicos. VPNs, que geralmente implementam as mesmas abordagens como linhas dedicadas, podem combinar várias LANs em uma e criptografar o tráfego para ocultar os dados que estão sendo transmitidos. Quando a criptografia VPN é implementada em tecnologia, geralmente são usados os padrões abertos. Isto envolve o tráfego a ser transmitido em cima do IP e usando datagramas como o nível de transporte.

De uma perspectiva técnica, as VPNs podem ser implementadas usando software e hardware. Em Linux®, a tecnologia FreeS/Wan tem muitas vezes sido implementada, usando a implementação padrão do protocolo de segurança IPSEC (Internet Protocol Security). Estas soluções, que são implementadas usando software e hardware, operam como roteadores nas extremidades das conexões VPN. Quando um pacote é transmitido pelo cliente, ele é enviado para este roteador dedicado, que inclui um cabeçalho de autenticação (AH) para ele. Após estes dados serem criptografados e as instruções serem incluídas para decriptografá-lo e processá-lo, o pacote é transferido para o roteador dedicado na outra extremidade. Uma vez que o pacote é recebido, o roteador final decriptografa, descartando o cabeçalho, e transmite o pacote limpo para o usuário no local de destino.

Se a criptografia for usada entre as redes, o host na LAN receberá o pacote já decriptografado e começará a processá-lo de forma normal. Isto significa que quando a criptografia é usada entre as redes, o processo de codificação/decodificação inteiro se torna transparente para o host da rede final.

Vários níveis de autenticação e criptografia são usados em VPNs, tornando-os seguros e eficazes o suficiente para combinar diversos nós remotos em uma única intranet.

O IPSEC é uma implementação popular do padrão VPN que é confiável o suficiente para satisfazer aos requisitos dos clientes em termos de conexão de suas filiais ou usuários remotos às suas redes.


Visão geral do IPSEC

O IPSEC é usado, geralmente, para suportar conexões seguras entre nós e redes em toda a Internet. Ele pode ser operado em uma configuração de nó a nó (com um computador ligado a outro) ou em uma configuração de rede a rede (com uma LAN/WAN conectada a outra). O IPSEC é implementado usando o protocolo de troca de chave da Internet (IKE) desenvolvido pelo Internet Engineering Task Force (IETF) para a autenticação mútua e comparação de parâmetros de segurança entre os sistemas ou redes conectadas umas às outras.

O processo de conexão do IPSEC é dividido em duas fases lógicas. Durante a primeira fase, o nó IPSEC estabelece uma conexão com um nó remoto ou rede. O nó remoto/de rede verifica as credenciais do nó solicitante e os dois lados concordam com o método de autenticação a ser usado na conexão. Um algoritmo com uma chave pré-compartilhada é geralmente usado para autenticação do nó IPSEC. Se a conexão IPSEC usar uma chave pré-compartilhada, os dois nós deverão usar a mesma chave. Será possível, então, proceder à segunda fase de estabelecimento de uma conexão.

A segunda fase de estabelecimento de uma conexão entre os nós IPSEC é realizada usando a Associação de Segurança (SA). Trata-se de dados de configuração, tais como o método de criptografia, os meios de troca de chaves secretas da sessão e alguns outros parâmetros que estão sendo importados para o banco de dados SA. Esta fase também gerencia a conexão IPSEC entre os nós e redes distribuídas em toda a WAN.

Agora, considere a implementação de IPSEC com base no exemplo da distribuição Linux CentOS. Para implementar IPSEC em todas as máquinas na rede (no caso de uma configuração de nó a nó) ou nos roteadores (no caso de uma configuração de rede a rede), você deve configurar os pacotes relevantes para o gerenciamento da configuração IPSEC. Estes pacotes devem incluir bibliotecas básicas, daemons e arquivos de configuração que ajudam a estabelecer a conexão IPSec, incluindo a biblioteca /lib/libipsec.so que contém a interface para gerenciar a chave confiável, PF_KEY, entre o kernel Linux e a implementação do IPSEC que está sendo usada no CentOS Linux. Nesse caso:

  • /sbin/setkey fornece gerenciamento-chave e os atributos de segurança IPSEC no kernel. Este programa está em conformidade com o daemon racoon que gerencia as chaves. Informações adicionais sobre o conjunto-chave estão disponíveis na man page setkey(8) (consulte Recursos).
  • /sbin/racoon é o daemon que gerencia as chaves IKE e supervisiona a troca de chaves e associação de segurança entre os computadores que executam o IPSEC. Este daemon pode ser criado após a edição do arquivo/etc/racoon/racoon.conf. Informações adicionais sobre o racoon estão disponíveis na man page racoon(8) (consulte Recursos).
  • /etc/racoon/racoon.conf é o arquivo de configuração onde vários parâmetros de conexão IPSEC são definidos, incluindo os métodos de autenticação e algoritmos de criptografia. Informações detalhadas sobre este assunto estão disponíveis novamente na conclusão do comando na man page racoon.conf(5) (consulte Recursos).

Configurando o IPSEC para configuração nó a nó

O IPSEC pode ser usado para conectar uma estação de trabalho a outra, com base em uma conexão de nó a nó. Com este tipo de conexão, a rede à qual ambos os nós estão conectados é usada para criar um túnel seguro. Os nós precisam apenas de uma conexão permanente à Internet ou outra rede operando constantemente para estabelecer a conexão IPSEC.

Os seguintes dados são necessários para criar uma conexão nó a nó:

  • Endereços IP para os nós
  • Um nome exclusivo para a conexão IPSEC, diferenciando-o dos outros dispositivos ou conexões (ipsec0)
  • Uma chave de criptografia que é permanente ou criada automaticamente usando racoon
  • Uma autenticação de chave pré-compartilhada usada para estabelecer a conexão e troca de chaves de criptografia durante a sessão de conexão

Agora olhe para o cenário em que dois hosts estabelecem uma conexão entre si. Eles farão isso usando a chave compartilhada my_keye o daemon racoonpara criar automaticamente e trocar uma chave de autenticação. O nome de conexão será ipsec0.

A estação de trabalho usa o arquivo ifcfg , na Listagem 1, para estabelecer a conexão IPSEC nó a nó com outra estação de trabalho. Listagem 1 mostra o formato do arquivo /etc/sysconfig/network-scripts/ifcfg-ipsec0.

Listagem 1. Formato do ifcfg-ipsec0
DST=X.X.X.X’
TYPE=IPSEC
ONBOOT=yes
IKE_METHOD=PSK

No primeiro computador, as letras X.X.X.X deverão ser substituídas pelo endereço IP do segundo computador, e vice-versa no segundo computador. Esta conexão é estabelecida durante a inicialização (ONBOOT=yes) e usa o método de autenticação chave pré-compartilhado (IKE_METHOD=PSK).

O arquivo com a chave compartilhada (/etc/sysconfig/network-scripts/keys-ipsec0), mostrado na Listagem 2, é necessária para os dois computadores para autenticação mútua. O conteúdo deste arquivo deve ser o mesmo nos dois computadores, e somente o usuário root deve ser capaz de acessá-lo: IKE_PSK=my_key.

Emita o seguinte comando para restringir o acesso ao arquivo keys-ipsec0 :

Listagem 2. Arquivo com a chave compartilhada
 chmod 600 /etc/sysconfig/network-scripts/keys-ipsec0.

Para alterar a chave de autenticação a qualquer momento, você deve editar o arquivo keys-ipsec0 nos dois computadores. As duas chaves devem ser idênticas para estabelecer a conexão.

A Listagem 3 examina o processo de configuração para a primeira fase se conectar a um nó remoto. Este arquivo é chamado de X.X.X.X.conf (X.X.X.X é substituído pelo endereço IP do roteador IPSEC remoto). Lembre-se que este arquivo é gerado automaticamente quando o túnel IPSEC é ativado e não é editado manualmente.

Listagem 3. Formato do arquivo X.X.X.X.conf
;
remote X.X.X.X
{
        exchange_mode aggressive, main;
        my_identifier address;
        proposal {
                encryption_algorithm 3des;
                hash_algorithm sha1;
                authentication_method pre_shared_key;
                dh_group 2 ;
        }
}
  • O comando remotos X.X.X.X indica que as seguintes sequências no arquivo de configuração só são aplicadas ao nó remoto que está sendo designado ao endereço X.X.X.X.
  • exchange_mode aggressive no padrão de configuração IPSEC no Linux CentOS é um método de autenticação que permite diferentes conexões IPSEC com diversos nós.
  • my_identifier address define o método de identificação que será usado para autenticação de nó. O CentOS Linux identifica os nós nos endereços IP.
  • encryption_algorithm 3des define o algoritmo de criptografia usado para autenticação. O método padrão é o Padrão de Criptografia de Dados Triplo (3DES).
  • hash_algorithm sha1 indica o algoritmo de cálculo de hash usado durante a primeira fase da conexão.
  • authentication_method pre_shared_key define o método de autenticação usado durante a sincronização de nós.
  • Вdh_group 2 indica o número do grupo Diffie-Hellman para selecionar as chaves de sessão geradas dinamicamente. O grupo de 1024 bits é usado por padrão.

A /etc/racoon/racoon.conf também devem ser idênticos a todos os nós IPSEC, além do operador inclui"/etc/racoon/X.X.X.X.conf", que terá um endereço IP diferente. A operação e o arquivo são gerados quando o túnel IPSEC é ativado. Listagem 4 mostra o típico racoon.conf produzido quando a conexão IPSEC é estabelecida:

Listagem 4. Formato do arquivo racoon.conf
# Arquivo de configuração daemon IKE Racoon.

# Consulte 'man racoon.conf' para obter uma descrição do formato e das entradas.

path include "/etc/racoon";
path pre_shared_key "/etc/racoon/psk.txt";
path certificate "/etc/racoon/certs";

sainfo anonymous
{
	pfs_group 2;
	lifetime time 1 hour ;
	encryption_algorithm 3des, blowfish 448, rijndael ;
	authentication_algorithm hmac_sha1, hmac_md5 ;
	compression_algorithm deflate ;
}
include "/etc/racoon/X.X.X.X.conf"

A descrição de todos os parâmetros para os arquivos de configuração está fora do escopo deste artigo. É possível obtê-la nos manuais apropriados.

Para estabelecer a conexão, reinicie o computador ou execute o seguinte comando em cada nó, em nome da root: /sbin/ifup ipsec0.

Ative o utilitário tcpdump para verificar a conexão IPSEC. Ao fazer isso, o pacote deve conter os dados AH e ESP. ESP significa que a criptografia está funcionando. Listagem 5 mostra um exemplo de tcpdump:

Listagem 5. Amostra tcpdump
17:13:20.617872 pinky.example.com > ijin.example.com: \
AH(spi=0x0aaa749f,seq=0x335): ESP(spi=0x0ec0441e,seq=0x335) (DF)

Configurando o IPSEC para configuração rede a rede

Com o IPSEC, é possível conectar redes inteiras a outros segmentos de rede, organizando uma interligação de redes. Os roteadores IPSEC precisam ser instalados em cada rede, de modo que o tráfego a partir do nó de uma rede possa ser processado de forma transparente e atingir o nó da outra rede. Os roteadores IPSEC, que podem autenticar e combinar essas redes por meio de um túnel seguro, devem estar operando nessas redes, com tráfego fluindo por meio da Internet ou qualquer outra rede. Se os pacotes forem interceptados durante a transmissão, será necessário usar o método de busca para decifrar o código protegendo-os, o que pode ser um processo bastante longo e pode mesmo não ser relevante até ao final do procedimento.

As informações a seguir são necessárias para estabelecer uma conexão de interligação de redes:

  • Os endereços IP públicos dos roteadores IPSEC dedicados
  • Os endereços IP das interfaces dos gateways roteando o tráfego de nó de rede para a Internet
  • O nome exclusivo para a conexão IPSEC (como, ipsec0)
  • A chave de criptografia criada usando racoon
  • A chave pré-compartilhada de autenticação

Vamos olhar o exemplo de um túnel IPSEC entre a rede my_net1.com e o network my_net2.com. O endereço da primeira rede é 192.168.1.0/24, e o endereço da segunda é 192.168.2.0/24. O endereço IP do gateway na primeira rede é 192.168.1.254 e o da segunda é 192.168.2.254. Os roteadores são implementados separadamente dos gateways e usam duas interfaces de rede: eth0 tem o endereço IP estático público dedicado à Internet, enquanto eth1 recebe e processa os pacotes da LAN.

A conexão IPSEC entre as redes usa a chave pré-compartilhada r3dh4tl1nux. O conteúdo do arquivo ifcfg, que foi criado para a conexão interligação de redes IPSEC na primeira rede, mostrada na Listagem 6. No exemplo, esta conexão possui o nome exclusivo ipsec1. Listagem 6 mostra o exemplo /etc/sysconfig/network-scripts/ifcfg-ipsec1.

Listagem 6. Exemplo de ifcfg-ipsec1
TYPE=IPSEC
ONBOOT=yes
IKE_METHOD=PSK
SRCGW=192.168.1.254
DSTGW=192.168.2.254
SRCNET=192.168.1.0/24
DSTNET=192.168.2.0/24
DST=X.X.X.X

Esta conexão é estabelecida durante a inicialização (ONBOOT=yes) e usa o método de autenticação chave pré-compartilhado (IKE_METHOD=PSK).

O conteúdo do arquivo com a chave pré-compartilhada (chamado /etc/sysconfig/network-scripts/keys-ipsecX, comum, em que X é igual a 0 para a primeira rede e 1 para a segunda rede) é mostrado na na Listagem 7.

É possível alterar a chave de autenticação, o que requer o arquivo keys-ipsecX para ser editado nos roteadores IPSEC, a qualquer momento. As chaves devem ser idênticas. na Listagem 7 mostra o exemplo /etc/racoon/racoon.conf.

Listagem 7. Exemplo de arquivo racoon.conf
# Arquivo de configuração daemon IKE Racoon.

# Consulte 'man racoon.conf' para obter uma descrição do formato e das entradas.

path include "/etc/racoon";
path pre_shared_key "/etc/racoon/psk.txt";
path certificate "/etc/racoon/certs";

sainfo anonymous
{
	pfs_group 2;
	lifetime time 1 hour ;
	encryption_algorithm 3des, blowfish 448, rijndael ;
	authentication_algorithm hmac_sha1, hmac_md5 ;
	compression_algorithm deflate ;
}
include "/etc/racoon/X.X.X.X.conf"

Listagem 8 mostra a configuração da conexão específica com a rede remota. O nome deste arquivo é X.X.X.X.conf (onde X.X.X.X é o endereço IP do roteador IPSEC remoto).

Listagem 8. Amostra de arquivo X.X.X.X.conf
;
remote X.X.X.X
{
        exchange_mode aggressive, main;
        my_identifier address;
        proposal {
                encryption_algorithm 3des;
                hash_algorithm sha1;
                authentication_method pre_shared_key;
                dh_group 2 ;
        }
}

Antes de ativar a conexão IPSEC, ative o roteamento IP no kernel editando o arquivo /etc/sysctl.conf e configurando net.ipv4.ip_ para a frente igual a 1.

Para garantir que a mudança seja implementada, emita este comando: sysctl -p /etc/sysctl.conf.

Para estabelecer a conexão, reinicialize os roteadores ou execute o seguinte comando nos roteadores em nome da root: /sbin/ifup ipsec0.

Os roteadores geram automaticamente o cenário de inicialização ativado pelo comando ifup quando a conexão IPSEC é estabelecida.

Com o comando a seguir, verifique a lista de roteadores de rede: /sbin/ip route list.

Execute o utilitário tcpdump para verificar a conexão IPSEC, por exemplo: tcpdump -n -i eth0 host my_net1.com

O pacote deve conter os dados AH e ESP. Neste caso, a presença do ESP significará que a criptografia está funcionando. Listagem 9 mostra um exemplo do controle efetuado sobre um determinado pacote a partir da conexão estabelecida:

Listagem 9. Pacote de exemplo com criptografia
12:24:26.155529 my_net2.com > my_net1.com: AH(spi=0x021c9834,seq=0x358): \
my_net2.com > my_net1.com: ESP(spi=0x00c887ad,seq=0x358) (DF) \
(ipip-proto-4)

Conclusões

Neste artigo, observamos detalhadamente os princípios de desenvolvimento, a base para a implementação de VPN e o conceito de protocolo IPSEC, com uma descrição das características gerais do IPSEC e dos mecanismos necessários para sua implementação.

Examinamos a disposição dos métodos para o desenvolvimento de conexões protegidas usando o protocolo IPSEC. Uma descrição detalhada destas implementações em relação aos dois esquemas de conexão, nó a nó e rede a rede, foi fornecida juntamente com exemplos reais.

Recursos

Aprender

Obter produtos e tecnologias

  • Explore o artigo CentOS Linux na página inicial de distribuição.
  • Avalie produtos IBM da maneira que for melhor para você: faça download da versão de teste de um produto, avalie um produto on-line, use-o em um ambiente de nuvem ou passe algumas horas na SOA Sandbox aprendendo a implementar Arquitetura Orientada a Serviços de modo eficiente.

Discutir

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que acessar o developerWorks, um perfil será criado para você. Informações do seu perfil (tais como: nome, país / região, e empresa) estarão disponíveis ao público, que poderá acompanhar qualquer conteúdo que você publicar. Seu perfil no developerWorks pode ser atualizado a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Linux, Software livre
ArticleID=820913
ArticleTitle=Uso do IPSEC em Linux ao configurar conexões VPN de rede a rede e ponto a ponto
publish-date=06182012