Claudio Borges

Technical blog about Linux, BSD, Mac OS X, Games and etc.

Archive for the ‘OpenBSD’ tag

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:

[text]
– 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.
[/text]

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:

[text]
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
[/text]

No meu servidor OpenBSD tenho os seguintes IPs:

[text]
IP OpenBSD: 187.10.223.67
Lan OpenBSD: 10.10.1.0/24
[/text]

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:

[text]
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
[/text]

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

[text]
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]
[/text]

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

[bash]
mv /etc/ipsec.conf /etc/ipsec.conf.default
[/bash]

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

[text]
# /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"
[/text]

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:

[bash]
touch /etc/isakmpd/isakmpd.policy
[/bash]

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:

[text]
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
[/text]

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

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

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

[bash]
netstat -nr
[/bash]

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

[text]
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
[/text]

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

[text]
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
[/text]

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

[text]
isakmpd_flags="-K" # enabled isamkpd
ipsec=YES # enabled ipsec
[/text]

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

[bash]
tcpdump -i fxp0 -netttvvv src or dst 201.56.120.125
[/bash]

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

Written by but3k4

April 17th, 2010 at 12:13 pm

Posted in OpenBSD

Tagged with , , ,

Montando pendrive no OpenBSD

without comments

Muitos usuários que estão iniciando no mundo BSD tem problemas com determinadas tarefas, sejam elas tarefas simples como montar um pendrive. Neste artigo irei mostrar como superar mais este obstáculo.

Primeiramente plugue seu pendrive no computador (que esteja rodando OpenBSD é claro), depois digite o comando dmesg, nas últimas linhas do resultado do comando, você verá uma saída similar a esta:

[bash]
umass0 at uhub0 port 8 configuration 1 interface 0 "USB2.0 DataTraveler100" rev 2.00/0.00 addr 2
umass0: using SCSI over Bulk-Only
scsibus1 at umass0: 2 targets, initiator 0
sd0 at scsibus1 targ 1 lun 0: SCSI2 0/direct removable
sd0: 8000MB, 1019 cyl, 255 head, 63 sec, 512 bytes/sec, 16384000 sec total
[/bash]

Agora sabemos que o sistema reconheceu o pendrive, falta saber qual partição do device sd0 iremos utilizar, para descobrir, digite:

[bash]
root@zangetsu:~# disklabel sd0
# /dev/rsd0c:
type: SCSI
disk: SCSI disk
label: DataTraveler100
flags:
bytes/sector: 512
sectors/track: 63
tracks/cylinder: 255
sectors/cylinder: 16065
cylinders: 1019
total sectors: 16384000
rpm: 3600
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0 # microseconds
track-to-track seek: 0 # microseconds
drivedata: 0

16 partitions:
# size offset fstype [fsize bsize cpg]
c: 16384000 0 unused 0 0
i: 16384000 0 MSDOS
root@zangetsu:~#
[/bash]

O comando acima mostou que a partição é a i, ou seja, o device sd0 + partição i = sd0i, com esta informação, podemos montá-lo com o seguinte comando:

[bash]
root@zangetsu:~# mount -t msdos /dev/sd0i /mnt/
[/bash]

Ou simplesmente:

[bash]
root@zangetsu:~# mount /dev/sd0i /mnt/
[/bash]

Você deve estar se perguntando por que utilizei o sistema de arquivos msdos em vez de fat, a resposta é simples: no mundo BSD, não existe sistemas de arquivos fat, apenas msdos, do mesmo jeito que não existe ext3, apenas ext2.

Para desmontar é igual em qualquer sistema *nix, ou seja, utilize o comando umount e bom proveito.

Written by but3k4

June 17th, 2009 at 10:54 pm

Posted in OpenBSD

Tagged with

Montando imagens .iso no OpenBSD

without comments

O OpenBSD não suporta montar imagens como no Linux, ou seja, você não pode digitar mount -o loop imagem /diretorio. Para tal tarefa você tem que carregar a imagem em um pseudo device e depois montar este device. Neste artigo vamos demonstrar como isto pode ser feito.

Primeiramente vamos carregar a imagem no device svnd0 utilizando o comando vnconfig e depois montá-lo no /mnt. Supondo que a imagem que queremos montar chama-se install45-amd64.iso, digite:

[bash]
root@zangetsu:~# vnconfig svnd0 install45-amd64.iso
root@zangetsu:~# mount /dev/svnd0a /mnt/
[/bash]

Com a imagem montada, vamos visualizar seu conteúdo:

[bash]
root@zangetsu:~# ls -la /mnt/
total 16
drwxr-xr-x 4 root wsrc 2048 Feb 28 19:27 ./
drwxr-xr-x 16 root wheel 512 May 25 10:58 ../
drwxr-xr-x 3 root wsrc 2048 Feb 28 19:27 4.5/
-r–r–r– 1 root wheel 82 Feb 28 19:28 TRANS.TBL
drwxr-xr-x 2 root wsrc 2048 Feb 28 19:27 etc/
root@zangetsu:~#
[/bash]

Depois de utilizar a imagem conforme sua necessidade, desmonte-a:

[bash]
root@zangetsu:~# umount /mnt/
root@zangetsu:~# vnconfig -u svnd0
[/bash]

Para maiores informações sobre o comando vnconfig, utilize a man-page do mesmo.

A partir de agora, se você não sabia como montar imagens no OpenBSD, já sabe.

Written by but3k4

June 17th, 2009 at 10:30 pm

Posted in OpenBSD

Tagged with