O Internet Protocol Security (IPsec) consiste num conjunto de protocolos desenvolvidos pelo IETF para garantir a segurança das ligações efectuadas através da Internet. Faz nativamente parte do protocolo IPv6, sendo que as suas funcionalidades foram transportadas para o protocolo IPv4. Actua na camada 3 da pilha OSI. O IPsec possui as seguintes características:
- Encripta o tráfego.
- Controla a integridade.
- Controla o acesso.
- Controla a autenticação.
- Duas Redes
- Um host e uma Rede
Veremos como ligar duas Redes utilizando IPSec. Será necessário configurar as interfaces de Rede e configurar o processo racoon, que é necessáro para O IKE. Saliente-se que o racoon é um processo responsável pela troca de chaves entre dois pontos IPSec.
Existem várias implementações de IPSec para Linux, como o openswan, freeswan e uma implementação nativa na versão 2.6 do kernel. O CentOs disponibiliza o openswan e a versão do Kernel, mais o pacote ipsec-tools. Usaremos a implementação do Kernel e o pacote ipsec-tools.
Existem várias implementações de IPSec para Linux, como o openswan, freeswan e uma implementação nativa na versão 2.6 do kernel. O CentOs disponibiliza o openswan e a versão do Kernel, mais o pacote ipsec-tools. Usaremos a implementação do Kernel e o pacote ipsec-tools.
O IPSec é um conjunto de protocolos, sendo dois deles os primeiros a serem utilizados. Um é o AH ( Authentication Header) e o outro é o Encapsulating Security Payload (ESP) ( Ver /etc/protocols/ ). A firewall pré-configurada no CentOs permite tráfego inbound destes dois protocolos. Obviamente se tal assim não for, o IPSec não funcionará.
[root@client ~]# iptables -L RH-Firewall-1-INPUT
O protocolo AH providencia uma forma de autenticação adicionado um cabeçalho checksum à volta do pacote original, que pode ser verificado do outro lado do túnel IPSec. Utilizando IPSec com AH, podemos garantir que os pacotes não serão alterados ao percorrerem o túnel, mas apenas com AH não é garantida a encriptação dos mesmos.
Se for necessária encriptação, o protocolo a utilizar é o ESP, pois este encripta o conteúdo do pacote original e adiciona o seu próprio cabeçalho. Dependendo se o IPSec é utilzado em modo de Transporte ou modo de Túnel, o ESP comporta-se distintamente.
Em modo de Tranporte, o ESP coloca o cabeçalho à volta do playload e efectua a encriptação posteriormente. Os cabeçalhos para routing são deixados intactos. Um pirata poderá analisar a infomação de controlo da ligação fornecida por esses pacotes ( dados para o roteamento), mas não poderá ver a informação, visto esta estar encriptada.
Em modo de Túnel, o ESP encripta todo o pacote, não apenas o playload. Assim sendo, ningém excepto os respectivos endpoints do túnel IPSec poderão ver toda a informação.
Se for necessária encriptação, o protocolo a utilizar é o ESP, pois este encripta o conteúdo do pacote original e adiciona o seu próprio cabeçalho. Dependendo se o IPSec é utilzado em modo de Transporte ou modo de Túnel, o ESP comporta-se distintamente.
Em modo de Tranporte, o ESP coloca o cabeçalho à volta do playload e efectua a encriptação posteriormente. Os cabeçalhos para routing são deixados intactos. Um pirata poderá analisar a infomação de controlo da ligação fornecida por esses pacotes ( dados para o roteamento), mas não poderá ver a informação, visto esta estar encriptada.
Em modo de Túnel, o ESP encripta todo o pacote, não apenas o playload. Assim sendo, ningém excepto os respectivos endpoints do túnel IPSec poderão ver toda a informação.
O que acontece quando é iniciada uma ligação IPSec? A iniciação ocorre em dois passos. Quando as interfaces IPSec são activadas, o IKE faz o seguinte:
- Autentica ambos os peers, garantido-se que são o que pretendem ser, através da chave pré-partilhada ou de um Certificado.
- Na fase 2, após sucesso da fase 1, são negociadas as Associações de Segurança ( Security Associations ou SA's) entre os dois pontos. Logo após, é gerada uma chave simétrica para encriptação do playload usando o algorítmo Diffie-Hellman .
As Associação de Segurança são então guardadas numa base de dados ( SAD - security association database). Essa base de dados mantém os registos dos endereços IP, do modo de IPSec utilzado ( AH ou ESP) e informação sobre as chaves de segurança e o algorítmo de encriptação utilizado ( AES, 3DES ou Blowfish).
O IPSec no CentOs 5 suporta 3 cifras de encriptação simétrica: Triple Data Encryptition Standard (3DES), RIjndael e Blowfish 448. O IPSec utiliza chaves simétricas depois da troca de chaves inicial ( IKE) porque garantem melhor desempenho do que as chaves assimétricas.
Verifique que tem o pacote ipsec-tools instalado executando o comando rpm -q ipsec-tools . Caso não esteja, execute o comando yum install ipsec-tools. ( Nota: Os comandos presentes neste artigo foram utilizados numa versão 5.x do CentOs. Verificou-se que na versão 6.0 o comando yum update ipsec-tools não funciona, sendo necessário efectuar o download do pacote em formato rpm. Aguarda-se que uma actualização mais abrangente à versão 6.0 do CentOs solucione este problema.
O IPSec no CentOs 5 suporta 3 cifras de encriptação simétrica: Triple Data Encryptition Standard (3DES), RIjndael e Blowfish 448. O IPSec utiliza chaves simétricas depois da troca de chaves inicial ( IKE) porque garantem melhor desempenho do que as chaves assimétricas.
Verifique que tem o pacote ipsec-tools instalado executando o comando rpm -q ipsec-tools . Caso não esteja, execute o comando yum install ipsec-tools. ( Nota: Os comandos presentes neste artigo foram utilizados numa versão 5.x do CentOs. Verificou-se que na versão 6.0 o comando yum update ipsec-tools não funciona, sendo necessário efectuar o download do pacote em formato rpm. Aguarda-se que uma actualização mais abrangente à versão 6.0 do CentOs solucione este problema.
Todas as restentes ferramentas já existem no Kernel. As interfaces IPSec são configuradas como dispositivos normais de Rede editando-se etc/sysconfig/network-scripts/ifcfg-ipsec* . A troca de chaves e as associações seguras são feitas pelo processo racoon, que é chamado pelo Kernel quando uma interface IPSec se torna activa
No CentOs a autenticação é feita através da troca de chaves pré-partilhadas. Assim sendo, para configurar uma ligação IPSec é necessário definir e configurar uma interface IPSec, configurar o processo racoon e gerar as chaves pré-partilhadas necessárias para a autenticações entre os hosts.
Analisemos a Rede do esquema anterior: Temos dois locais (sites), A e B. Ambos os locais possuem um IP público para ligação à Internet e um IP privado que serve de gateway para ambas as LAN. No esquema verificamos que os IP’s públicos são o 192.168.1.104 e o 192.168.1.105. Obviamente esses IP’s pertencem a gamas privadas, não podendo ser atríbuidos na realidade a ligações à Internet. Como tal, considere-se a sua utilização apenas para efeitos desmonstrativos.
Note-se que ambos os routers precisam de ter o IP forwarding activo. Para verificar, edite o ficheiro /etc/sysctl.conf e mude net.ipv4. ip_forward = 0 para net.ipv4.ip_forward = 1. Faça sysctl -p para aplicar a mudança na configuração do ficheiro.
Note-se que ambos os routers precisam de ter o IP forwarding activo. Para verificar, edite o ficheiro /etc/sysctl.conf e mude net.ipv4. ip_forward = 0 para net.ipv4.ip_forward = 1. Faça sysctl -p para aplicar a mudança na configuração do ficheiro.
Crie o ficheiro /etc/sysconfig/network-scripts/ifcfg-ipsec0 no Router A. Insira a informação:
TYPE=IPSEC
ONBOOT=yes
IKE_METHOD=PSK
SRCGW=10.0.3.254
DSTGW=10.0.7.254
SRCNET=10.0.3.0/24
DSTNET=10.0.7.0/24
DST=192.168.1.105
ONBOOT=yes
IKE_METHOD=PSK
SRCGW=10.0.3.254
DSTGW=10.0.7.254
SRCNET=10.0.3.0/24
DSTNET=10.0.7.0/24
DST=192.168.1.105
Explicando, o tipo de interface é naturalmente IPSec, pretende-se que em cada reboot da máquina a mesma fique activa ( ONBOOT=yes) e o método para criar as chaves pré-partilhadas é o PSK. A gateway do site A é 10.0.3.254, do site B é 10.0.7.254. A rede do site A é 10.0.3.0/24, a Rede de destino é 10.0.7.0/24. Na última linha, temos o IP Público do site B.
Analogamente criamos no Router B um ficheiro com o mesmo nome e localização, colocando a informação análoga.
TYPE=IPSEC
ONBOOT=yes
IKE_METHOD=PSK
SRCGW=10.0.7.254
DSTGW=10.0.3.254
SRCNET=10.0.7.0/24
DSTNET=10.0.3.0/24
DST=192.168.1.104
Analogamente criamos no Router B um ficheiro com o mesmo nome e localização, colocando a informação análoga.
TYPE=IPSEC
ONBOOT=yes
IKE_METHOD=PSK
SRCGW=10.0.7.254
DSTGW=10.0.3.254
SRCNET=10.0.7.0/24
DSTNET=10.0.3.0/24
DST=192.168.1.104
Necessitamos de uma chave pré-partilhada como password de maneira a que a fase 1 do IKE (troca de chaves) possa ser efectuada. Apenas o root deverá manusear essa chave, sendo a mesma guardada em etc/sysconfig/network-scripts/keys-ipsec0. Se utilizar um número diferente para a interface tal deve reflectir-se no nome do ficheiro onde está armazenada a chave. Ou seja se escolher o nome fcfg-ipsec1, a chave respectiva deverá ser guardada em keys-ipsec1.
[root@centos ~]# cd /etc/sysconfig/network-scripts/
[root@centos network-scripts]# echo 'IKE_PSK=FkxUD30peU2JCQBZ8fhYHR0Dsb8=' > keys-ipsec0
[root@centos network-scripts]# chown root:root keys-ipsec0
[root@centos network-scripts]# chmod 0600 keys-ipsec0
[root@centos network-scripts]# echo 'IKE_PSK=FkxUD30peU2JCQBZ8fhYHR0Dsb8=' > keys-ipsec0
[root@centos network-scripts]# chown root:root keys-ipsec0
[root@centos network-scripts]# chmod 0600 keys-ipsec0
Siga exactamente o mesmo passo para o Router do site B.
Agora é necessário configurar o processo racoon. Edite /etc/racoon/racoon.conf e verifique que o ficheiro fica com a seguinte informação.
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 ; }
Agora é necessário configurar o processo racoon. Edite /etc/racoon/racoon.conf e verifique que o ficheiro fica com a seguinte informação.
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 ; }
Não há muito para modificar no ficheiro. Sucintamente, em sainfo anonymous definimos que os dois hosts podem associar-se, visto terem a mesma chave, ou seja, uma chave pré-partilhada no nosso caso. Em lifetime definimos o tempo de duração da associação antes da mesma ser renovada. Em pfs_group2 definimos que o grupo 2 do protocolo de troca de chaves Diffie-Hellman é usado. Finalmente temos a suite de protocolos de encriptação a serem utilizados e a linha compression_algorithm deflate que informa o processo racoon para negociar o tipo de compressão do playload do pacote.
Existirá uma linha adicional no fim do ficheiro quando o túnel levantar.
include "/etc/racoon/X.X.X.X.conf
O processo racoon modifica este ficheiro quando o IPSec é activado. A configuração apresentada é muito básica, sendo no entanto um bom ponto de partida para uma ligação site-to-site. Se pretender usar IPSec para ligações pc para gateway IPSec ( conhecidas por ligações Road-Warrior) pode implementar políticas neste ficheiro, colocando o servidor de DNS a atríbuir, etc...
Com a configuração terminada, pode levantar o túbel correndo o comando
ifup ipsec0
em ambos os Routers.
Se verificar na directoria /etc/racoon do router B, existe um ficheiro 192.168.1.104.conf . Esta é a configuração que vai ser usada para o túnel .
remote 192.168.1.104
{ exchange_mode aggressive, main;
my_identifier address;
proposal {
encryption_algorithm 3des;
hash_algorithm sha1;
authentication_method pre_shared_key;
dh_group 2;
}
}
Pode-se usar o comando tcpdump para verificar se o túnel está funcional. Supondo que o serviço SSH está ctivo na interface LAN do site A, é possíbvel estabelecer uma ligação a partir do site B. Inicie o tcpdump no site A e execute o comando ssh 10.0.3.254 no Router B.
[root@centos ~]# tcpdump -i eth1 host 192.168.1.105
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 96 bytes
06:06:22.368328 IP 192.168.1.105 > 192.168.1.104: AH(spi=0x045529f8,seq=0xbe): IP 192.168.1.105 > 192.168.1.104: ESP(spi=0x0cdb1d46,seq=0xbe), length 92 (ipip-proto-4)
06:06:22.368328 IP 192.168.1.105 > 192.168.1.104: ESP(spi=0x0cdb1d46,seq=0xbe), length 92
06:06:22.368550 IP 192.168.1.104 > 192.168.1.105:AH(spi=0x06247830,seq=0xae): IP 192.168.1.104 > 192.168.1.105: ESP(spi=0x0ca0bae7,seq=0xae), length 92 (ipip-proto-4)
Verifica-se que todos os pacotes possuem cabeçalhos ESP e AH, o que significa que estão encriptados. Não se consegue ver que o tráfego é SSH ou para que host dentro da LAN é efectuado o roteamento.
O comando setkey -D permite verificar o que foi negociado entre os hosts, visto que tem como output a SAD.
[root@centos ~]# setkey -D
192.168.1.105 192.168.1.104
esp mode=tunnel spi=215686470(0x0cdb1d46) reqid=0(0x00000000)
E: 3des-cbc d83142ca 00706bdb 16da1fd1 39f92b74 f816d048 b63fb881
A: hmac-sha1 83c06fba ffdd6a7c 6a231e78 b142696f 21555916
seq=0x00000000 replay=4 flags=0x00000000 state=mature
created: Apr 4 05:35:16 2009 current: Apr 4 06:21:48 2009
diff: 2792(s) hard: 3600(s) soft: 2880(s)
last: Apr 4 05:35:17 2009 hard: 0(s) soft: 0(s)
current: 27833(bytes) hard: 0(bytes) soft: 0(bytes)
allocated: 290 hard: 0 soft: 0
sadb_seq=7 pid=7280 refcnt=0
Podemos verificar que se trata de uma ligação ESP em modo de túnel. É usado 3DES para encriptação, e hmac-sha1 como algorítmo de hash. É apresentada a data de criação.
A criação de VPN’s site-to-site IPSec pode ser problemática se utilizados sistemas operativos diferentes e mesmo versões diferentes do mesmo sistema operativo. No entanto, se bem configurada, a solução apresentada avizinha-se altamente estável. Para soluções Road-Warrior, em que um utilizador pretende ligar-se à sua Rede Empresarial ou Pessoal através de VPN IPSec, sugere-se a utilização de OpenVPN.
Existirá uma linha adicional no fim do ficheiro quando o túnel levantar.
include "/etc/racoon/X.X.X.X.conf
O processo racoon modifica este ficheiro quando o IPSec é activado. A configuração apresentada é muito básica, sendo no entanto um bom ponto de partida para uma ligação site-to-site. Se pretender usar IPSec para ligações pc para gateway IPSec ( conhecidas por ligações Road-Warrior) pode implementar políticas neste ficheiro, colocando o servidor de DNS a atríbuir, etc...
Com a configuração terminada, pode levantar o túbel correndo o comando
ifup ipsec0
em ambos os Routers.
Se verificar na directoria /etc/racoon do router B, existe um ficheiro 192.168.1.104.conf . Esta é a configuração que vai ser usada para o túnel .
remote 192.168.1.104
{ exchange_mode aggressive, main;
my_identifier address;
proposal {
encryption_algorithm 3des;
hash_algorithm sha1;
authentication_method pre_shared_key;
dh_group 2;
}
}
Pode-se usar o comando tcpdump para verificar se o túnel está funcional. Supondo que o serviço SSH está ctivo na interface LAN do site A, é possíbvel estabelecer uma ligação a partir do site B. Inicie o tcpdump no site A e execute o comando ssh 10.0.3.254 no Router B.
[root@centos ~]# tcpdump -i eth1 host 192.168.1.105
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 96 bytes
06:06:22.368328 IP 192.168.1.105 > 192.168.1.104: AH(spi=0x045529f8,seq=0xbe): IP 192.168.1.105 > 192.168.1.104: ESP(spi=0x0cdb1d46,seq=0xbe), length 92 (ipip-proto-4)
06:06:22.368328 IP 192.168.1.105 > 192.168.1.104: ESP(spi=0x0cdb1d46,seq=0xbe), length 92
06:06:22.368550 IP 192.168.1.104 > 192.168.1.105:AH(spi=0x06247830,seq=0xae): IP 192.168.1.104 > 192.168.1.105: ESP(spi=0x0ca0bae7,seq=0xae), length 92 (ipip-proto-4)
Verifica-se que todos os pacotes possuem cabeçalhos ESP e AH, o que significa que estão encriptados. Não se consegue ver que o tráfego é SSH ou para que host dentro da LAN é efectuado o roteamento.
O comando setkey -D permite verificar o que foi negociado entre os hosts, visto que tem como output a SAD.
[root@centos ~]# setkey -D
192.168.1.105 192.168.1.104
esp mode=tunnel spi=215686470(0x0cdb1d46) reqid=0(0x00000000)
E: 3des-cbc d83142ca 00706bdb 16da1fd1 39f92b74 f816d048 b63fb881
A: hmac-sha1 83c06fba ffdd6a7c 6a231e78 b142696f 21555916
seq=0x00000000 replay=4 flags=0x00000000 state=mature
created: Apr 4 05:35:16 2009 current: Apr 4 06:21:48 2009
diff: 2792(s) hard: 3600(s) soft: 2880(s)
last: Apr 4 05:35:17 2009 hard: 0(s) soft: 0(s)
current: 27833(bytes) hard: 0(bytes) soft: 0(bytes)
allocated: 290 hard: 0 soft: 0
sadb_seq=7 pid=7280 refcnt=0
Podemos verificar que se trata de uma ligação ESP em modo de túnel. É usado 3DES para encriptação, e hmac-sha1 como algorítmo de hash. É apresentada a data de criação.
A criação de VPN’s site-to-site IPSec pode ser problemática se utilizados sistemas operativos diferentes e mesmo versões diferentes do mesmo sistema operativo. No entanto, se bem configurada, a solução apresentada avizinha-se altamente estável. Para soluções Road-Warrior, em que um utilizador pretende ligar-se à sua Rede Empresarial ou Pessoal através de VPN IPSec, sugere-se a utilização de OpenVPN.