De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.


How-to do IPsec FreeSWAN

Colaboração: Luis Dosso

Data de Publicação: 03 de Dezembro de 2002

O Linux FreeS/WAN é uma implementação de IPSEC & IKE para Linux.

O IPSEC é o Internet Protocol Security. Ele usa criptografia forte para prover autenticação e serviços de criptografia. A autenticação assegura que os pacotes são do remetente correto e que não foram alterados em trânsito. A criptografia previne leitura não-autorizada do conteúdo dos pacotes.

Estes serviços lhe permitem construir túneis seguros por redes não confiáveis. Tudo que passa através da rede não confiável é codificado pela máquina gateway IPSEC e é decodificado pelo gateway na outra ponta. O resultado é Virtual Private Network ou VPN, isto é, uma rede que é efetivamente privada embora inclua máquinas em vários locais diferentes conectados pela Internet.

A Dextra Sistemas (http://www.dextra.com.br) desenvolveu um how-to, reproduzido abaixo, para a instalação e configuração do IPSEC FreeS/WAN em sistemas Red Hat Linux 7.3. A publicação deste material é parte da política da Dextra Sistemas para contribuir com a comunidade de Software Livre.

How-to IPSEC FreeS/WAN

FreeS/WAN
Instalando e Configurando o FreeS/WAN em RedHat 7.3

11/11/2002

1) Download dos arquivos necessários

Os arquivos necessários a esta instalação podem ser obtidos em "http://rpms.steamballoon.com/freeswan/". Nós fizemos os seguintes downloads:

  • O source do kernel com suporte a IPsec compatível com o seu sistema. Aconselhamos: "kernel-source-2.4.18-3ipsec.i386.rpm"
  • As ferramentas do FreeS/WAN: "freeswan-1.97-0.i386.rpm"

Salvamos os arquivos em um diretório temporário, por exemplo "/tmp".

2) Extração do source do kernel

  [root@faith tmp]# rpm -ivh kernel-source-2.4.18-3ipsec.i386.rpm
  [root@faith tmp]# cd /usr/src/linux-2.4/

3) Compilação do kernel

Compilamos o kernel como fazemos usualmente, sem esquecer de habilitar as opções de IPsec dele.

Aqui segue a lista das opções do IPsec que ficam no menu Networking Options:

  -> IP Security Protocol (FreeS/WAN IPSEC)
  -> IPSEC: IP-in-IP encapsulation (tunnel mode)
  -> IPSEC: Authentication Header
  -> HMAC-MD5 authentication algorithm
  -> HMAC-SHA1 authentication algorithm
  -> IPSEC: Encapsulating Security Payload
  -> 3DES encryption algorithm
  -> IPSEC: IP Compression
  -> IPSEC: Debugging Option

Aconselhamos colocar suporte nativo para essas opções.

Veja detalhes sobre compilação do kernel em "The Linux Kernel HOWTO.

  [root@faith linux-2.4]# make menuconfig
  [root@faith linux-2.4]# make dep
  [root@faith linux-2.4]# make clean
  [root@faith linux-2.4]# make bzImage install
  [root@faith linux-2.4]# make modules
  [root@faith linux-2.4]# make modules_install

Não se esqueça de manter uma cópia do seu kernel atual para caso de falhas no novo kernel (veja "lilo(8)" ou "grub(8)").

4) Reinicialização do sistema

  [root@faith linux-2.4]# init 6

Logue como root ao entrar no sistema novamente.

5) Instalação das ferramentas do FreeS/WAN

  [root@faith tmp]# rpm -ivh freeswan-1.97-0.i386.rpm

6) Configuração do FreeS/WAN

Agora está tudo certo para que possamos começar a configurar o FreeS/WAN. A configuração toda acontece no arquivo "/etc/ipsec.conf".

Daremos 2 exemplos de configuração: HOST-TO-HOST e VPN.

O FreeS/WAN considera uma máquina como sendo left e a outra como sendo right.

Vamos começar com o exemplo HOST-TO-HOST.

Primeiro, precisamos das chaves RSA de ambas as máquinas.

Na máquina left (que em nosso caso se chama faith), digite:

  [root@faith /]# ipsec showhostkey --left
  #RSA 2048 bits host data
  leftrsasigkey=...<aqui vem a chave>...
  [root@faith /]#

Agora logamos na máquina right, e fazemos:

  [root@right /]# ipsec showhostkey --right
  #RSA 2048 bits host data
  rightrsasigkey=...<aqui vem a chave>...
  [root@right /]#

Com estes dados, estamos prontos para montar a configuração. Você vai precisar saber os IPs das duas máquinas.

Editando o /etc/ipsec.conf, você verá que existem 3 partes: o setup geral, a conexão default e as conexões que você cria. A parte do setup e default ficariam assim:

  config setup
          interfaces="ipsec0=eth0"
          klipsdebug=none
          plutodebug=none
          plutoload=%search
          plutostart=%search
          uniqueids=yes
  conn %default
          keyingtries=0
          disablearrivalcheck=no
          authby=rsasig
          leftrsasigkey=%dns
          rightrsasigkey=%dns
          type=transport

Agora vamos montar a conexão host-to-host. Como no exemplo:

   +--------+                        +--------+
   | Host 1 |<-------INTERNET------->| Host 2 |
   +--------+                        +--------+
       |                                 |
   172.16.129.4                    172.16.129.1

A configuração é bem simples:

Você já possui os dados leftrsasigkey e rightrsasigkey. Basta substituir no arquivo, por algo assim:

  conn host-to-host
          leftrsasigkey=...<chave>...
          rightrsasigkey=...<chave>...
          left=172.16.129.4
          leftnexthop=
          right=172.16.129.1
          rightnexthop=
          spi=0x300
          esp=3des-md5-96
           espenckey=0x0a5b47ab_fec52b0c_6200e505_28ebcbee_d79c3726_7d02a827
          espauthkey=0x7767e921_3debaeef_66bc49ee_0ca71cb7
          type=tunnel
          auto=add

Depois, troque os endereços IP, e a configuração está pronta. Você deve copiar esse ipsec.conf para a máquina right. Depois executamos os comandos a seguir:

  [root@faith /]# service ipsec stop
  [root@faith /]# service ipsec start

E depois, na outra máquina, fazemos a mesma coisa:

  [root@right /]# service ipsec stop
  [root@right /]# service ipsec start

Escolha uma das máquinas para levantar a conexão. Nós escolhemos a faith. Então:

  [root@faith /]# ipsec auto --up host-to-host

Pronto, estamos com a conexão estabelecida!

Agora vamos fazer a conexão como uma VPN. A idéia é que tenhamos 2 máquinas, uma em cada lado, que funcionarão como gateways entre as 2 redes. Exemplo:

  +-------+     +------+                  +-------+     +-------+
  | rede1 |<--->| GW 1 |<----INTERNET---->| GW 2  |<--->| rede2 |
  +-------+     +------+                  +-------+     +-------+
  |             |      |                  |       |             |
  |             | 200.200.200.200 100.100.100.100 |             |
  |        192.168.0.1                       192.168.1.1        |
  |                                                             |
  192.168.0.0/24                                   192.168.1.0/24

O esquema não muda muito em relação ao primeiro. Vamos precisar das chaves, e o resto é mais ou menos a mesma coisa.

  conn vpn
          leftrsasigkey=...<chave>...
          rightrsasigkey=...<chave>...
          left=200.200.200.200
          leftsubnet=192.168.0.0/24
          leftnexthop=
          right=100.100.100.100
          rightsubnet=192.168.1.0/24
          rightnexthop=
          spi=0x300
          esp=3des-md5-96
          espenckey=0x0a5b47ab_fec52b0c_6200e505_28ebcbee_d79c3726_7d02a827
          espauthkey=0x7767e921_3debaeef_66bc49ee_0ca71cb7
          type=tunnel
          auto=add

Salve estas alterações nas 2 máquinas e vamos aos comandos:

  [root@faith /]# service ipsec stop
  [root@faith /]# service ipsec start

E depois, como fizemos anteriormente, temos que dar estes comandos na outra máquina:

  [root@right /]# service ipsec stop
  [root@right /]# service ipsec start

Agora escolhemos uma das máquinas para levantar a conexão:

  [root@faith /]# ipsec auto --up vpn

Pronto, a conexão está estabelecida!

7) Possíveis problemas

Durante a instalação, tivemos problemas com filtros, iptables e NAT.

Primeiramente, existe um arquivo chamado rp_filter em /proc/sys/net/ipv4/conf/eth0/rp_filter, e talvez tenha outro também em /proc/sys/net/ipv4/conf/ipsec0/rp_filter, que você deve setar para 0 antes de levantar a conexão, como no exemplo:

  [root@faith /]# echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter
  [root@faith /]# echo 0 > /proc/sys/net/ipv4/conf/ipsec0/rp_filter (tivemos que fazer isso num Mandrake)

Depois dos comandos, você pode levantar as conexões:

  [root@faith /]# ipsec auto --up vpn

ou:

  [root@faith /]# ipsec auto --up host-to-host

Outro problema que encontramos foi com o iptables. Verifique se o iptables não esta filtrando a porta 500 UDP e TCP. Se estiver, providencie para que ele pare de filtrar estas portas. No nosso caso, desliguamos o iptables no teste:

  [root@faith /]# /etc/rc.d/init.d/iptables stop
  [root@faith /]# ipsec auto --up vpn

Outro ponto importantíssimo que não tivemos a oportunidade de testar é o seguinte: existem boatos de que é um tanto complicado configurar um GW IPsec com NAT. Costuma acontecer confusão demais nisso. Se tivermos a oportunidade de testar, publicaremos algo.

SEMPRE olhe os logs. Os logs são a alma do negócio. Através dos logs você consegue descobrir aonde estão os erros e o que está acontecendo. A dica é: /var/log/secure e /var/log/messages .

Nos campos de configuração indicados por leftnexthop e rightnexthop, costuma-se colocar o endereço de um gateway que fica entre a máquina que está sendo configurada e a rede insegura, pela qual passará o tunel.

Bom, é isso. Boa sorte!

Dextra Sistemas

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


Veja a relação completa dos artigos de Luis Dosso