O Conectiva Linux 5.1 Ed. Servidor já tem kernel
preparado para freeswan 1.3. Se a versão instalada ainda
não for esta, então faça o upgrade do pacote
RPM do kernel para o pacote que vem com a 5.1
Após ter o kernel correto, certifique-se que o pacote
freeswan-1.3-2cl também está instalado.Se não
tiver, instale-o.
Para isso, monte o primeiro cd do conectiva 5.1, 4.2 ou o cd 2
do conectiva 5.0. Outras versões do conectiva precisam
baixar o pacote em:
ftp://ftp.conectiva.com.br/pub/conectiva/5.1/cd1/conectiva/RPMS/freeswan-1.4-7cl.i386.rpm
Para montar o cdrom, utilize:
[root@localhost]# mount /mnt/cdrom
|
e instale o pacote:
[root@localhost]# rpm -ivh /mnt/cdrom/conectiva/RPMS/freeswan-*i386.rpm
|
Ele contém tudo o que é extra-kernel
(utilitários e daemons) e é instalado
separadamente.Tenha certeza que a configuração do
kernel está ok. A parte de rede deve estar funcionando
perfeitamente antes de iniciar a instalação.
Verifique se o arquivo contém o seguinte:
[root@localhost]# mcedit /etc/sysconfig/network
FORWARD_IPV4="yes"
|
ou algo parecido (talvez o "yes" esteja como "true", tudo
bem).
Verifique se o arquivo contém
[root@localhost]# mcedit /etc/sysconfig/cl-firewall
RP_FILTER=0
|
Este parâmetro quando setado para 2 (como está
originalmente) impede o link de ser estabelecido com sucesso.
Nenhuma configuração será necessária
nas estações, apenas nos gateways. Toda a
configuração é baseada em apenas dois
arquivos:
/etc/ipsec.conf e
/etc/ipsec.secrets
Estes arquivos (ambos) devem ter permissões 600 por
questões de segurança. O dono e o grupo deve ser
"root:root".
O arquivo ipsec.conf
O primeiro guarda as configurações gerais do
ipsec, e o segundo guarda as chaves de criptografias.
Para editá-lo digite:
[root@localhost]# mcedit /etc/ipsec.conf
|
A seguir um exemplo (para o caso mais comum). Só foram
listadas as partes relevantes. O resto pode ser deixado como
está no arquivo original.
Imagine o seguinte exemplo:
+~~~~~~~~~~~~+
+==| INTERNET |==+
| +............~ |
200.200.0.23 | | 200.252.02.12
+~~~~~~~~~~~+ +~~~~~~~~~~~+
| gateway A | | gateway B |
+...........+ +...........+
192.168.6.1 | | 10.0.0.1
| |
| |
...~~~~~~~~~~~~~~+~~~+~~~~~... ...~~~~~~+~~~+~~~~~~~~~~~~~~~...
| |
192.168.6.2 | | 10.0.0.2
255.255.255.0 | | 255.255.255.0
+~~~~~~~~~+ +~~~~~~~~~+
| host 1A | | host 1B |
+.........+ +.........+
|
Segue um arquivo de configuração que serviria para
a rede acima. Observe que o arquivo de configuração
original é muito mais completo, e aqui só foram
mostradas as partes relevantes. O restante do arquivo pode ser
deixado intacto, salvo nota específica.
config setup
interfaces=%defaultroute
klipsdebug=none
plutodebug=none
conn %default
esp=3des-md5-96
authby=rsasig
conn con123
left=200.200.0.23
leftsubnet=192.168.6.0/24
#leftnexthop=192.168.255.220
leftrsasigkey=0x01039d827220755...
#leftfirewall=yes
right=200.252.02.12
rightsubnet=10.0.0.0/24
#rightnexthop=10.0.0.1
rightrsasigkey=0x01034bd3e30995...
#rightfirewall=yes
auto=start
|
Na primeira secção temos config setup que
especifica a secção geral de
configuração do ipsec. Esta secção
normalmente não será modificada. Cuide para que pelo
menos as linhas listadas existam e estejam corretas.
Logo após, temos conn %default. Esta secção
não indica uma conexão específica, mas serve
para que você possa listar quaisquer parâmetros que
você queira que sejam válidos para todas as
conexões. Listar alguma opção aqui é o
mesmo que listá-la repetidas vezes dentro de cada uma das
conexões.
No caso acima estão listadas duas keywords interessantes
(as outras podem ser deixadas como estão no original).
esp=3des-md5-96 indica o tipo de criptografia que queremos usar.
3des-md5-96 é uma boa opção, sugerido como
default. authby=rsasig indica que queremos usar
autenticação e criptografia do tipo RSA (chaves
públicas e privadas). As opções são
secret (defaut) para PSK (pre shared keys) e rsasig para chaves
RSA.
Por último, conn con123 é a conexão que
estamos tentando estabelecer. Podem existir várias
conexões, basta repetir esta parte com novos
parâmetros.
Antes de irmos para os números em si, uma breve
explicação do significado de left e right. Eles
representam "os dois lados" da conexão. Não faz
diferença quem é qual, apenas que os dois lados
estejam listados. O freeswam descobre sozinho qual é ele
mesmo e qual é o outro lado, através do IP
indicado.
Agora vejamos as keywords usadas no exemplo, uma a uma:
left=192.168.6.1 indica o IP da máquina gateway de um dos
lados. Assumimos aqui que o "left" representa o "GATEWAY A".
leftsubnet=192.168.6.0/24 indica qual é a rede que
está "atrás" do gateway, cujos pacotes serão
protegidos. Deve-se indicar a netmask em conjunto com o
endereço de rede.
leftnexthop= indica qual o IP do gateway que está acima
do GATEWAY A. Normalmente este endereço será obtido
automaticamente através da rota do gateway padrão
(exatamente por isso existe aquela instrução
interfaces=%defaultroute na primeira secção. Nesses
casos comuns pode-se deixar as instruções "nexthop"
comentadas, como no exemplo.
leftrsasigkey=0x01039d827220755... indica a chave pública
RSA do outro lado. Mais sobre isso adiante, no item do arquivo
ipsec.secrets.
leftfirewall=yes indica que a máquina firewall não
está fazendo masquerading para a rede que ela está
protegendo, e esta rede tem IPs não roteáveis que
não devem ser repassados para o lado de fora. Normalmente
não será usada.
Todos estes conceitos são igualmente
aplicáveis ao outro lado, apenas substituindo "left" por
"right".
auto=start indica que esta conexão deve ser iniciada
durante o boot do micro. Outra opção seria auto=add
para apenas adicionar a conexão na lista de conexões
mas não iniciá-la no boot. Ela poderá ser
iniciada mais tarde manualmente(pouco usado).
O arquivo ipsec.secrets
Agora é necessário configurar as chaves que
serão usadas para a criptografia e
autenticação. Em primeiro lugar você deve
escolher qual o tipo de chave a ser usada, PSK ou RSA. Como
já foi dito, deve-se dar preferência para o tipo
RSA.
Por vários motivos.
Vejamos:
-
Nenhum problema de transmissão de chaves. No caso das
chaves
-
compartilhadas (PSK) você deve enviar a chave para o outro
lado de algum modo. Com o mecanismo de chave
pública/privada, você transmite para o outro lado
apenas a chave pública. O sistema foi desenvolvido para que
não importe caso alguém pegue sua chave
pública, nada poderá ser feito com ela (para
descriptografar o que foi criptografado com a chave pública,
é necessária a chave privada que não foi
transmitida.
-
Fácil manutenção. Se você tiver mais
de uma conexão, com mais de um gateway diferente, pode
deixar sua chave pública em um lugar conhecido e todos
pegarem. Não haverá a necessidade de ficar gerando
novas chaves e repassando-as para cada um dos novos gateways. Usar
a mesma PSK para todos nem pensar!
-
Não requer que os IPs das pontas sejam fixos, pois a
chave irá garantir a autenticidade da outra máquina.
Isto é usado para redes virtuais privadas com IPs
móveis, e não será alvo deste documento. Para
maiores informações consulte o manual do freeswan, no
site na web.Para gerar o par de chaves, execute o comando:
[root@localhost]# ipsec rsasigkey 128
|
Isto irá gerar um par de chaves RSA de 128 bits.
Aconselha-se usar mais bits, como por exemplo 1024. Para 128, a
geração é rápida, mas para 1024 pode
levar até alguns minutos dependendo da máquina em que
está sendo executado o comando. Usamos 128 aqui para um
exemplo ilustrativo.
A saída deste comando será parecida com o
seguinte:
# 128 bits, Tue Apr 25 21:08:09 2000
# for signatures only, UNSAFE FOR ENCRYPTION
#pubkey=0x01039efb4e4a84f0026202cd872e41dfbce7
Modulus: 0x9efb4e4a84f0026202cd872e41dfbce7
PublicExponent: 0x03
# everything after this point is secret
PrivateExponent: 0x69fcdedc58a001959e5053f6c7c6154b
Prime1: 0xde02e368132d3ac9
Prime2: 0xb75225d40309622f
Exponent1: 0x9401ecf00cc8d1db
Exponent2: 0x7a36c3e2acb0ec1f
Coefficient: 0x7cc39b384223f7f3
|
Com exceção dos comentários, e da linha que
inicia com #pubkey (que também está comentada), todo
o resto é a chave privada. Aquele número contido na
linha #pubkey deve ser repassado para a outra máquina
gateway, para ser inserido no arquivo de configuração
ipsec.conf na keyword "leftrsasigkey=0x01039ef..." (ou right,
conforme o caso). Todo o restante deverá ser inserido no
arquivo ipsec.secrets da máquina local (que gerou a chave)
como sendo sua própria chave privada. O arquivo de
configuração ficará parecido com isto:
192.168.255.213 10.0.2.25: RSA {
Modulus: 0x9efb4e4a84f0026202cd872e41dfbce7
PublicExponent: 0x03
PrivateExponent: 0x69fcdedc58a001959e5053f6c7c6154b
Prime1: 0xde02e368132d3ac9
Prime2: 0xb75225d40309622f
Exponent1: 0x9401ecf00cc8d1db
Exponent2: 0x7a36c3e2acb0ec1f
Coefficient: 0x7cc39b384223f7f3
}
|
A listagem acima contém exatamente a tag de abertura
(primeira linha) e em seguida deve ser colado o conteúdo
EXATO das chaves geradas com o comando mencionado anteriormente, e
por último, o tag de fechamento.
Na primeira linha, os IPs são opcionais. Você pode
iniciar direto a partir dos ": RSA {" se quiser. O importante
é que na primeira linha, os IPs (ou os ":") iniciem
exatamente na primeira coluna, e no resto do texto até o
final do bloco, nenhuma outra linha inicie no primeiro caractere
(identar todas as outras linhas). Também deixe sempre
espaços entre as tags (por exemplo ":RSA{" não
funciona).
O outro lado deve fazer a mesma coisa. Gerar as chaves, guardar
as suas chaves privadas no arquivo de secrets local, e enviar a
chave pública para ser acrescentada no arquivo ipsec.conf do
lado de cá.
Finalmente, para tudo isto funcionar, habilite a
autenticação via RSA no .conf de cada um, com a
instrução authby=rsasig já mostrada
anteriormente.
Não se assuste com o tamanho dos número, eles
realmente serão enormes. O exemplo de 128 bits é
apenas ilustrativo, as chaves de 1024 poderão ter até
4 ou 5 linhas de texto numa janela texto de 80 colunas. Mantenha
estes números sempre numa linha só, cada um deles,
nunca deixe o editor quebrar a linha em várias.
Acrescente "alias ipsec0 ipsec" no arquivo
/etc/conf.modules.
Ao final, dê um reboot na máquina, e deixe que ela
carregue tudo automaticamente. Observe se houve alguma mensagem de
erro durante o carregamento do "pluto".
Testes Pós-Instalação
Durante a fase de testes, talvez seja interessante manter a
conexão como "auto=add" no arquivo .conf ao invés de
"auto=start", pois assim você poderá startar e parar a
conexão na mão quantas vezes quiser. Ao final, mude
novamente para "auto=start" dos dois lados para que as coisas
voltem a ser autoáticas.
LINKS ÚTEIS PARA CONSULTA
Lista de discussão IPSec:
http://www.sandelman.ottawa.on.ca/linux-ipsec/
http://www.nexial.com/cgi-bin/lipsec
Um artigo sobre o assunto: Ipsec practical configurations for
Linux Freeswan 1.3.http://jixen.tripod.com/
### VERSÃO 6.0 ###
Siga os mesmos procedimentos apenas troque o nome do arquivo /etc/conf.modules por
/etc/modules.conf