Claudio Borges

Blog técnico sobre Linux, BSD, Mac OS X, Games e etc.

VPN Ipsec entre OpenBSD e Juniper Netscreen

with 2 comments

Há alguns dias precisei configurar uma VPN Ipsec entre um Juniper Netscreen e um OpenBSD. Como o protocolo é Ipsec, o OpenBSD tem tudo nativo :) . Nele você pode configurar uma VPN Ipsec utilizando 2 caminhos:

- ipsec: A configuração é definida em um único arquivo (/etc/ipsec.conf). Configuração bastante simples.
- isakmpd: Além do arquivo de configuração (/etc/isakmpd/isakmpd.conf), você precisa configurar o arquivo de policy (/etc/isakmpd/isakmpd.policy). Configuração um pouco complexa de entender no inicio.

Não vou entrar em detalhes sobre o ipsec e isakmpd, caso precise leia a documentação do mesmo, nada como um man arquivo não resolva, ou então clique nos respectivos links :) .

Deixando a teoria de lado, vamos a pratica. As informações do Netscreen são praticamente iguais as utilizadas nas VPNs Cisco e no CheckPoint. Então esta documentação serve para os 3 produtos. O que pode mudar é o group, hash, encryption algorithm e é claro, a shared-key:

IP Netscreen: 201.56.120.125
Lan Netscreen: 192.168.1.0/24
Shared Key: fGrkApZlrNf@uR0@zlr#!4ka

Fase 1:

Hashing Algorithm: MD5
Diffie-Hellman Group: Group-2
Transform (IPSec Protocol): ESP
Perfect Forward Secrecy: PFS
Encryption Algorithm: 3DES

Fase 2:

Diffie-Hellman Group: Group-0
Encryption Algorithm: 3DES
Hashing Algorithm: MD5
Perfect Forward Secrecy: noPfs

No meu servidor OpenBSD tenho os seguintes IPs:

IP OpenBSD: 187.10.223.67
Lan OpenBSD: 10.10.1.0/24

Consultando a documentação do ipsec.conf (man ipsec.conf), listei as opções que recebi do Netscreen e criei uma lista compatível que será usada no arquivo /etc/ipsec.conf:

Fase 1 = main mode
Hashing Algorithm: hmac-md5
Diffie-Hellman Group: modp1024
Transform (IPSec Protocol): esp
Encryption Algorithm: 3des

Fase 2 = quick mode
Diffie-Hellman Group: none
Encryption Algorithm: 3des
Hashing Algorithm: hmac-md5

Baseado nas informações anteriores, gerei o esqueleto da configuração para um melhor entendimento:

ike [Transform (IPSec Protocol)] from src to dst \
        main auth [Hashing Algorithm] enc [Encryption Algorithm] group [Diffie-Hellman Group] \
        quick auth [Hashing Algorithm] enc [Encryption Algorithm] group [Diffie-Hellman Group] \
        psk [shared-key]

Depois de entender a lógica da configuração, vamos criar o arquivo final. Renomeie o /etc/ipsec.conf para /etc/ipsec.conf.default:

mv /etc/ipsec.conf /etc/ipsec.conf.default

Crie o /etc/ipsec.conf com o seguinte conteúdo:

# /etc/ipsec.conf
#
ext_if = "fxp0"
openbsd_lan = "10.10.1.0/24"
netscreen_lan = "192.168.1.0/24"
netscreen_gw = "201.56.120.125"

ike esp from $openbsd_lan to $netscreen_lan peer $netscreen_gw \
        main auth hmac-md5 enc 3des group modp1024 \
        quick auth hmac-md5 enc 3des group none \
        psk "fGrkApZlrNf@uR0@zlr#!4ka"

Antes de iniciar a VPN, é preciso criar o arquivo de policy do isakmpd. Este procedimento torna-se necessário para o isakmpd não ficar gerando log dizendo que o arquivo de policy não foi encontrado:

touch /etc/isakmpd/isakmpd.policy

Repara que o arquivo acima foi criado sem nenhum conteúdo.

Adicione a variável netscreen_gw = “201.56.120.125″ no seu /etc/pf.conf, depois adicione as linhas abaixo para permitir o tráfego entre o OpenBSD e o GW Netscreen:

pass in  on $ext_if proto udp from $netscreen_gw to $ext_if port { 500, 4500 }
pass out on $ext_if proto udp from $ext_if to $netscreen_gw port { 500, 4500 }
pass in  on $ext_if proto esp from $netscreen_gw to $ext_if
pass out on $ext_if proto esp from $ext_if to $netscreen_gw

Dê um reload nas suas regras e start a VPN:

pfctl -f /etc/pf.conf
isakmpd -K
ipsecctl -f /etc/ipsec.conf

Caso não tenha recebido nenhuma mensagem de erro, verifique se o túnel subiu:

netstat -nr

Nas últimas linhas você verá as seguintes informações:

Encap:
Source             Port  Destination        Port  Proto SA(Address/Proto/Type/Direction)
192.168.1.0/24     0     10.10.1.0/24       0     0     201.56.120.125/esp/use/in
10.10.1.0/24       0     192.168.1.0/24     0     0     201.56.120.125/esp/require/out

Utilizamos o ipsecctl para verificar as regras de policy do ipsec:

FLOWS:
flow esp in from 192.168.1.0/24 to 10.10.1.0/24 peer 201.56.120.125 srcid 187.10.223.67/32 dstid 201.56.120.125/32 type use
flow esp out from 10.10.1.0/24 to 192.168.1.0/24 peer 201.56.120.125 srcid 187.10.223.67/32 dstid 201.56.120.125/32 type require

SAD:
esp tunnel from 187.10.223.67 to 201.56.120.125 spi 0x097a93d3 auth hmac-md5 enc 3des-cbc
esp tunnel from 201.56.120.125 to 187.10.223.67 spi 0x6f5c0fef auth hmac-md5 enc 3des-cbc

Adicione as seguintes linhas no /etc/rc.conf.local para que a VPN suba se o servidor reiniciar:

isakmpd_flags="-K"              # enabled isamkpd
ipsec=YES                       # enabled ipsec

Para visualizar o tráfego utilize o tcpdump na interface externa filtrando tudo que entra e sai para o IP do Netscreen:

tcpdump -i fxp0 -netttvvv src or dst 201.56.120.125

Chegamos ao final, VPN pronta, tunel no ar e clientes felizes :) .

Written by but3k4

abril 17th, 2010 at 12:13 pm

Posted in OpenBSD

Tagged with , , ,

Adicionando suporte a HP Smart Array B110i no Redhat 5.4

with 3 comments

Há alguns dias atrás me deparei com um problema. Estava mexendo em uma blade HP e fiz o raid 1 via hardware, até ae tudo bem. Depois gravei o iso do Red Hat 5.4 e fui fazer a instalação. Quando a instalação começou, vi que os discos eram reconhecidos individualmente, ou seja, o SO reconheceu os 2 discos e não o volume que criei. Há princípio achei que era problema na controlada, pois todos os servidores que já mexi, quando a controladora não é reconhecida, os discos também não são.

Depois de muito apanhar, descobri que o problema era driver.

Com o problema em mãos, fui atrás de uma solução. Pesquisei no site da HP e vi que ela disponibiliza o driver em em formato .rpm. Só que o rpm neste momento não me ajuda pois preciso que a controladora seja reconhecida no boot e não depois da instalação. Eles até disponibilizam o disquete de boot com o driver, mas para RedHat 5.3, como o kernel do 5.4 é mais novo o driver não funciona.

Por este motivo resolvi criar este artigo. Os passos que irei mostrar servem para qualquer driver, e funcionam tanto em Red Hat quanto para CentOS, ajuste-o conforme sua necessidade.

Os itens que iremos utilizar são:

rhel-server-5.4-x86_64-dvd.iso
hpahcisr-1.2.1-9.rhel5.x86_64.rpm

Primeiramente vamos montar o iso e copiar os arquivos para customizá-lo. Os comandos abaixo são responsáveis por criar os diretórios que iremos utilizar para montar o iso e copiar os arquivos:

mkdir -p /mnt/{driver,original,customizado}
mount -o loop /root/rhel-server-5.4-x86_64-dvd.iso /mnt/original/
cp -av /mnt/original/* /mnt/original/.discinfo /mnt/original/.treeinfo /mnt/customizado/

Dando continuidade, vamos descompactar o hpahcisr-1.2.1-9.rhel5.x86_64.rpm para pegar o driver e incluir no initrd:

cd /mnt/driver/
rpm2cpio /root/hpahcisr-1.2.1-9.rhel5.x86_64.rpm | cpio -idmv

Dentro do diretório /mnt/driver ele vai criar o opt/hp/storage_drivers/hpahcisr-1.2.1_2009_09_17.tar.gz, precisamos descompactar este arquivo e separar os módulos que iremos utilizar:

tar xzf ./opt/hp/storage_drivers/hpahcisr-1.2.1_2009_09_17.tar.gz
cp -a hpahcisr-1.2.1_2009_09_17/lib/modules/2.6.18-164.el5/kernel/drivers/scsi/hpahcisr/hpahcisr.ko /mnt/driver/

Com o driver separado, vamos descompactar o initrd:

cd /mnt/customizado/isolinux/
mkdir initrd
cd initrd
gzip -dc ../initrd.img | cpio -ivd

Descompactando os modules:

cd modules
gzip -dc modules.cgz | cpio -idumv

Agora precisamos copiar o driver para dentro do diretório que foi criado com o comando acima e adicionar o mesmo nos arquivos para serem lidos no boot:

cp -a /mnt/driver/hpahcisr.ko 2.6.18-164.el5/x86_64/
modinfo -F alias 2.6.18-164.el5/x86_64/hpahcisr.ko | sed -e 's/^/alias /' -e 's/$/ hpahcisr/' >> modules.alias
sed -i '/^hptiop/ihpahcisr\n\tscsi\n\t\"Update HP HPAHCISR driver\"' module-info
sed -i '/^hptiop/ihpahcisr: scsi_mod' modules.dep

Depois de adicionar o driver e incluir o mesmo nos arquivos necessário, precisamos compactar os modules:

rm -f modules.cgz
find 2.6.18-164.el5 | cpio -o -H crc | gzip -9 > modules.cgz
rm -rf 2.6.18-164.el5
cd ..

Com este passo finalizado, vamos recriar o initrd:

find . | cpio -o -H newc | gzip -9 > ../initrd.img
cd ..
rm -rf initrd

O initrd está pronto, ou seja, agora quando você gravar o .iso, a controladora será reconhecida no boot, só que se você instalar o SO e não instalar o driver vai dar problema pois no initrd do kernel que vem no iso não tem o driver, então adicione o hpahcisr-1.2.1-9.rhel5.x86_64.rpm a arvore de pacotes e recriar os .xml utilizados para a instalação dos pacotes:

cp -a /root/hpahcisr-1.2.1-9.rhel5.x86_64.rpm /mnt/customizado/Server/
cd /mnt/customizado/Server/
createrepo -u "media://`head -1 ../.discinfo`" -g repodata/comps-rhel5-server-core.xml .

No passo final, vamos recriar o .iso:

cd /mnt/customized64/
mkisofs -V "Custom Red Hat 5.4" -r -R -J -T -v -no-emul-boot \
-boot-load-size 4 -boot-info-table -b isolinux/isolinux.bin \
-c isolinux/boot.cat -o /root/RedHatLinux54-customized.iso .

Grave o .iso em um dvd e instale seu servidor, na hora do boot, digite:

linux text

Quando finalizar a instalação, vai apagar um botão para dar boot, NÃO FAÇA ISSO AINDA, aperte:

alt + f2

Vai abrir um terminal, digite:

cd /mnt/sysimage/
chroot .
mount /dev/scd0 /media/
rpm -ivh /media/Server/hpahcisr-1.2.1-9.rhel5.x86_64.rpm
umount /media/
exit

Aperte alt +f1 e agora pressione o OK que quando o servidor voltar do boot, seu sistema vai estar instalado com o driver da controladora. A última coisa a ser feita é excluir o kernel das atualizações do sistema pois se você atualizar, irá perder o suporte da controladora e irá ferrar todo o seu sistema pois vai quebrar o raid, então digite:

echo "" >> /etc/yum.conf
echo "# Exclui o kernel da atualizacao, necessario para o modulo da hp." >> /etc/yum.conf
echo "# Nao tente copiar o modulo para uma versao mais nova do kernel," >> /etc/yum.conf
echo "# que alem de nao funcionar, vai foder o lvm." >> /etc/yum.conf
echo "exclude=kernel*" >> /etc/yum.conf

Agora você sabe como customizar um dvd de Red Hat e CentOS, caso queira remover pacotes e/ou atualizá-los, basta remover os arquivos .rpm do diretório Server e depois rodar o comando createrpo como mostrado anteriormente.

Written by but3k4

abril 16th, 2010 at 5:16 pm

Posted in Linux

Tagged with , ,

Media Server para xbox360 e ps3

without comments

Para todos aqueles apaixonados por video-games (assim como eu), resolvi escrever este post.

Muitos não sabem mas esta nova geração de video-games vai muito além dos jogos, você pode por exemplo, utilizá-lo para assistir seus animes, filmes, vídeos e fotos na tv. Este recurso se chama Media Center.

Usuários de Windows 7, o Windows Media Player já tem este recurso nativo e funciona tanto para PS3 e Xbox360. Como sou usuário de Mac, a coisa já fica um pouco complicada.

Para quem tem Playstation 3, existe o PS3 Media Server, ele é feito em java e funciona em Windows, Linux e Mac. Agora para Xbox360 infelizmente não existe quase nada para Mac, a grande maioria dos Media Servers são pagos. Dos pagos o melhor é o Connect360, ele custa 20 dólares, tá certo que não é um absurdo de caro, mas existem soluções grátis que funcionam tão bem quanto ele e é por isto que lhes apresento o Orb.

Este Media Server é muito bom, não testei todos os formatos de vídeos, mas mp4, avi e mpeg sei que funciona :) . Para ele poder utilizar este software, você precisa registrar um usuário no site, caso contrário o mesmo não irá funcionar. Depois feito o registro, baixe-o de acordo com o seu sistema operacional, no meu caso Mac.

A instalação é bem simples, ele vai pedir o usuário e senha que você registrou no site, depois disto é só configurá-lo.

Esta é a tela inicial, digite seu usuário e senha:

tela inicial

Painel de controle, onde tem todas as opções do programa:

control panel

Preferências, configure o seu conforme mostra a figura abaixo:

preferencies

Diretório que você vai compartilhar, ou seja, o lugar onde estão seus vídeos, fotos e músicas, como exemplo estão meus diretórios, altere para os seus :)

media source

Aqui é a parte do media server, clique no botão advanced e aumente a velocidade da conexão para o máximo:

media server

Depois de fechar, o seu Media server irá ficar como ícone na barra de ferramentas, agora é só ligar seu video-game e boa diversão. A vantagem deste é que ele roda como serviço, ou seja, basta ligar seu computador e ligar o video-game e assistir, assim nunca mais você vai precisar gravar dvds para assistir na tv :) .

Written by but3k4

abril 14th, 2010 at 12:43 pm

Posted in Games,Mac os x

Tagged with , ,