Post em Destaque

Intel direciona desenvolvedor com anos de experiência para projeto FreeBSD

A Intel resolveu alocar o desenvolvedor Ben Widawsky, arquiteto de drivers gráficos para Linux, para focar no desenvolvimento do FreeBSD. Ele deixa o time Linux da Intel e ficará dedicado no time FreeBSD. A mudança não visa só melhorias na parte gráfica mas também em outras áreas do FreeBSD,...

Leia mais...

Acelere o carregamento do seu site/blog com PHP flush

Posted by lgvalentim | Posted in Dicas | Posted on 28-06-2012

Tags:

1

Flush é uma função do PHP que já vêm sendo muito utilizada afim de acelerar o carregamento das páginas de sites ou blogs, pois ele força o servidor a enviar o cabeçalho do site antes de todo o conteúdo restante. Assim o seu navegador terá tempo para baixar todos os arquivos de folhas de estilo (CSS) indicadas entre as tags <head> e </head> de seu código.

flush 3 Acelere o carregamento do seu site/blog com PHP flush

Para implementar esta função basta inserior o código <?php flush(); ?> logo após o fechamento da tag </head>. Se você usa WordPress, deve editar o arquivo header.php do seu tema.

Ex.:

flush code Acelere o carregamento do seu site/blog com PHP flush

Com isso você deve, além de melhorar o tempo de carregamento do seu site, diminuir também sua taxa de rejeição uma vez que terá todas as informações da página carregadas rapidamente.

Share Button

Programação para lançamento do FreeBSD 9.1R

Posted by gondim | Posted in FreeBSD, Software Livre, Tecnologia | Posted on 14-06-2012

Tags:,

0

Texto original do anúncio abaixo:

Just a quick note to say we have settled on a target schedule for the
FreeBSD 9.1 Release.  The schedule itself is here:

  http://www.freebsd.org/releases/9.1R/schedule.html

The highlights:

Code Freeze:	July 2nd, 2012
BETA1:		July 6th, 2012
RC1:		July 20th, 2012
RC2:		August 3rd, 2012
Release:	August 13th, 2012

Those are the target dates for when builds start.  The builds becoming
available is usually a few days afterwards (except for the final release
which is often times 4 days to a week after the builds start because
there is more prep work involved...).

Thanks.
Share Button

Novas vulnerabilidades – bind 9 e sysret + correção IPv6

Posted by gondim | Posted in Dicas, FreeBSD, Segurança | Posted on 12-06-2012

Tags:

0

Saíram 2 novas vulnerabilidades e um acerto relacionado ao IPv6.

É bom atualizarem os sistemas e sempre se manterem seguros. Abaixo os links com todas as informações necessárias:

http://security.freebsd.org/advisories/FreeBSD-SA-12:04.sysret.asc

http://security.freebsd.org/advisories/FreeBSD-SA-12:03.bind.asc

http://security.freebsd.org/advisories/FreeBSD-EN-12:02.ipv6refcount.asc

O problema do sysret só ocorre em sistemas FreeBSD 64 bits e em  CPU que não seja AMD.

Share Button

BSDMagazine – mês de Junho.

Posted by gondim | Posted in FreeBSD, Software Livre, Tecnologia | Posted on 11-06-2012

Tags:,

0

BSD Magazine é uma revista mensal de excelente qualidade técnica, visual e gratuita para todo e qualquer profissional que queira ficar bem informado sobre tecnologia e informação utilizando BSD e outros Softwares Livres.

A revista encontra-se em idioma Inglês e para baixá-la basta informar o seu e-mail e clicar para baixar. Todas as outras edições anteriores também podem ser baixadas. Seu formato está em pdf.

Conteúdo:

– DNSSEC: Threats to DNS Transactions Part 2

– Anatomy of a FreeBSD Compromise Part 6

– Using Qjail to set up the basejail

– PostgreSQL: Server-Side Programming Part 2

– Synchronization Problems or: How I Learned to Stop Worrying and Love the Sleep Mutex

– ZFS Madness with BEADM – How To

Bsd_06_2012

 

Share Button

OpenVPN interligando empresas

Posted by gondim | Posted in FreeBSD, Segurança, Software Livre | Posted on 11-06-2012

Tags:,

0

Informação sempre foi e sempre será o grande tesouro da humanidade. Algumas delas podem ser públicas e outras extremamente sigilosas. A troca de informação entre filiais de uma mesma empresa, muitas das vezes serão confidenciais e por isso existe a necessidade de recursos para que isso se torne possível.

Para que haja comunicação entre essas filiais é necessário que se tenha um meio físico por onde passará todo o fluxo de informação. A Internet é hoje o maior meio físico em comum para troca de informações e que interliga todo o mundo.

Então se temos o meio físico o que falta para uma comunicação segura e confidencial? Falta uma coisa chamada VPN (Virtual Private Network) que pode ser encriptada ou não. A definição de VPN seria a de se ter um túnel privativo interligado duas ou mais redes e apenas essas redes se enxergariam. Contudo se alguém conseguisse entrar nesse túnel teria acesso a todas as informações trafegando em texto puro. Por existir essa brecha é que utilizamos a criptografia dos dados em uma VPN com a finalidade de impossibilitar que terceiros tenham acesso ao conteúdo da comunicação.

Nesse artigo falarei sobre uma ferramenta que tem crescido muito nesses últimos anos e competindo com outras mais antigas. Seu sucesso tem se dado pela simplicidade, segurança e robustez. Irei falar aqui sobre o OpenVPN um software que nos permite criar VPNs para interligar de forma segura e simples, qualquer empresa e suas filiais. Mostrarei exemplos interligando uma empresa fictícia e suas duas filiais também fictícias.

Existe um ditado que diz: “uma imagem vale mais que 1000 palavras” e por isso vou exemplificar nosso trabalho com um desenho da rede que criaremos.

  • Empresa: BSDInfo matriz
  • Localidade: Brasil / Araruama
  • Bloco IP da Rede: 10.200.200.0/24
  • IP Público fictício: 169.169.169.1/24
  • IP VPN: 172.16.24.1/30

 

  • Empresa: BSDInfo filial
  • Localidade: Brasil / Saquarema
  • Bloco IP da Rede: 10.200.201.0/24
  • IP Público fictício: 169.169.169.2/24
  • IP VPN: 172.16.24.6/30

 

  • Empresa: BSDInfo filial
  • Localidade: Brasil / São Pedro
  • Bloco IP da rede: 10.200.202.0/24
  • IP Público fictício: 169.169.169.3/24
  • IP VPN: 172.16.24.10/30

Baseado nas informações acima o diagrama abaixo será usado como referência para o nosso laboratório:

Conforme o diagrama acima, faremos com que todas as redes 10.200.200.0/24, 10.200.201.0/24 e 10.200.202.0/24 possam trocar dados seguramente entre eles e utilizando a Internet como meio de transporte das informações.

Para a nossa configuração usaremos um servidor FreeBSD em cada localidade com 2 interfaces de rede em cada um deles.

Na BSDInfo Araruama (matriz) será onde configuraremos o OpenVPN como Servidor e nas filiais configuraremos o OpenVPN como Cliente.

Instalando o OpenVPN nos servidores:

Atualizando os ports:

# portsnap fetch update

Instalando o bash porque os scripts do OpenVPN são em bash:

# cd /usr/ports/shells/bash
# make install clean
# rehash

Instalando o OpenVPN:

# cd /usr/ports/security/openvpn
# make install clean
# rehash

Não precisa selecionar qualquer opção na próxima tela, mantenha o default e continue a instalação. Faça os passos acima nos 3 servidores do nosso diagrama.

Começaremos nossa configuração no servidor principal que receberá as conexões das filiais. Após a instalação do OpenVPN criaremos o diretório onde faremos as nossas configurações:

# mkdir /usr/local/etc/openvpn
# chmod 700 /usr/local/etc/openvpn

Todos os procedimentos acima deverão ser feitos em todos os servidores da VPN.

Começaremos então a configuração do servidor principal da VPN.

Para facilitar a criação de VPNs, o OpenVPN vem com uma coleção de scripts para criação dos certificados e chaves que iremos utilizar nas conexões dos clientes com o servidor.

Façamos os procedimentos abaixo para nos facilitar:

# cd /usr/local/etc/openvpn
# cp -rp /usr/local/share/doc/openvpn/easy-rsa/2.0 .
# cd 2.0
# chmod +x build-ca build-dh build-inter build-key build-key-pass build-key-pkcs12 build-key-server build-req build-req-pass clean-all inherit-inter list-crl pkitool revoke-full sign-req whichopensslcnf

Dentro deste diretório 2.0 estão todos os shell scripts que falei. Dentro dele existe um arquivo chamado vars e faremos uma configuração nele antes de gerarmos os certificados. Mudaremos as variáveis abaixo do arquivo vars.

export KEY_COUNTRY=”US”
export KEY_PROVINCE=”CA”
export KEY_CITY=”SanFrancisco”
export KEY_ORG=”Fort-Funston”
export KEY_EMAIL=”me@myhost.mydomain”
export KEY_EMAIL=mail@host.domain
export KEY_CN=changeme
export KEY_NAME=changeme
export KEY_OU=changeme

 Mudaremos o bloco acima para o nosso exemplo:

export KEY_COUNTRY=”BR”
export KEY_PROVINCE=”RJ”
export KEY_CITY=”Araruama”
export KEY_ORG=”BSDInfo”
export KEY_EMAIL=”ti@bsdinfo.com.br”
export KEY_CN=vpnsrv
export KEY_NAME=vpnsrv
export KEY_OU=TI

Após a configuração do arquivo vars com os dados da criação dos nossos certificados, precisamos inicializar a estrutura que acomodará os certificados que os scripts criarão. Executaremos os seguintes passos:

# cd /usr/local/etc/openvpn/2.0
# bash
# source vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /usr/local/etc/openvpn/2.0/keys

Com os comandos acima armazenaremos os valores das variáveis que configuramos, em memória, para que os scripts possam usar. Importante executar o bash antes de executar qualquer coisa senão os scripts não funcionarão.

O próximo procedimento só deve ser feito apenas uma vez porque este irá criar a estrutura de controle dos certificados e chaves. Se for feito após a criação de qualquer certificado, todos quem foram criados serão apagados e o controle iniciará do zero.

# ./clean-all

Após o comando acima será criado o diretório /usr/local/etc/openvpn/2.0/keys com os arquivos: index.txt e serial que serão usados no controle da criação dos certificados.

Vamos agora criar Diffie-Hellman do nosso servidor de VPN:

# cd /usr/local/etc/openvpn/2.0
# ./build-dh
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
…..+…………………..++*++*++*

A configuração é um pouco trabalhosa mas não é nenhum bicho de 7 cabeças. Após tudo funcionando, configurar outros servidores será muito simples. A única coisa que poderá deixar complexa a sua configuração é quando existirem muitas redes atrás dos servidores e elas precisarem ser acessadas de todos os lugares.

Agora criaremos o certificado da CA do nosso servidor. Muito cuidado com ele porque é o segredo da segurança da nossa VPN. Qualquer certificado assinado por ele será autorizado à conectar em nossa VPN. Esse é o principal motivo de não se usar certificados de CAs conhecidas. Necessitamos de criar nossa própria CA.

# ./build-ca
Generating a 1024 bit RSA private key
………….++++++
……………++++++
writing new private key to ‘ca.key’
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [BR]:
State or Province Name (full name) [RJ]:
Locality Name (eg, city) [Araruama]:
Organization Name (eg, company) [BSDInfo]:
Organizational Unit Name (eg, section) [TI]:
Common Name (eg, your name or your server’s hostname) [vpnsrv]:BSDInfo – CA
Name [vpnsrv]:
Email Address [ti@bsdinfo.com.br]:

Vamos dar uma olhada agora no nosso diretório de keys?

# ls -l /usr/local/etc/openvpn/2.0/keys/
total 16
-rw-r–r–  1 root  wheel  1334 May 28 01:29 ca.crt
-rw——-  1 root  wheel   887 May 28 01:29 ca.key
-rw-r–r–  1 root  wheel   245 May 28 01:24 dh1024.pem
-rw-r–r–  1 root  wheel     0 May 28 01:11 index.txt
-rw-r–r–  1 root  wheel     3 May 28 01:11 serial

Agora já temos o certificado da CA (ca.crt) que usaremos para assinar o certificado do nosso servidor da VPN e dos outros servidores clientes.

Vamos agora criar nosso primeiro certificado do servidor das VPNs:

# cd /usr/local/etc/openvpn/2.0/
# ./build-key-server vpnsrv
Generating a 1024 bit RSA private key
……………..++++++
…….++++++
writing new private key to ‘vpnsrv.key’
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [BR]:
State or Province Name (full name) [RJ]:
Locality Name (eg, city) [Araruama]:
Organization Name (eg, company) [BSDInfo]:
Organizational Unit Name (eg, section) [TI]:
Common Name (eg, your name or your server’s hostname) [vpnsrv]:
Name [vpnsrv]:
Email Address [ti@bsdinfo.com.br]:
Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /usr/local/etc/openvpn/2.0/openssl-0.9.8.cnf
Check that the request matches the signature
Signature ok
The Subject’s Distinguished Name is as follows
countryName           :PRINTABLE:’BR’
stateOrProvinceName   :PRINTABLE:’RJ’
localityName          :PRINTABLE:’Araruama’
organizationName      :PRINTABLE:’BSDInfo’
organizationalUnitName:PRINTABLE:’TI’
commonName            :PRINTABLE:’vpnsrv’
name                  :PRINTABLE:’vpnsrv’
emailAddress          :IA5STRING:’ti@bsdinfo.com.br’
Certificate is to be certified until May 26 05:20:25 2022 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

Aproveitando que estamos criando os certificados, vamos agora criar os certificados das VPNs cliente. Primeiro a da BSDInfo – Saquarema:

# ./build-key vpnsaq
Generating a 1024 bit RSA private key
..++++++
…………++++++
writing new private key to ‘vpnsaq.key’
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [BR]:
State or Province Name (full name) [RJ]:
Locality Name (eg, city) [Araruama]:
Organization Name (eg, company) [BSDInfo]:
Organizational Unit Name (eg, section) [TI]:
Common Name (eg, your name or your server’s hostname) [vpnsaq]:
Name [vpnsrv]:vpnsaq
Email Address [ti@bsdinfo.com.br]:
Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /usr/local/etc/openvpn/2.0/openssl-0.9.8.cnf
Check that the request matches the signature
Signature ok
The Subject’s Distinguished Name is as follows
countryName           :PRINTABLE:’BR’
stateOrProvinceName   :PRINTABLE:’RJ’
localityName          :PRINTABLE:’Araruama’
organizationName      :PRINTABLE:’BSDInfo’
organizationalUnitName:PRINTABLE:’TI’
commonName            :PRINTABLE:’vpnsaq’
name                  :PRINTABLE:’vpnsaq’
emailAddress          :IA5STRING:’ti@bsdinfo.com.br’
Certificate is to be certified until May 26 06:22:01 2022 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Update

Agora o certificado e chave da BSDInfo – São Pedro:

# ./build-key vpnspa
Generating a 1024 bit RSA private key
….++++++
………………………………………………………………………………..++++++
writing new private key to ‘vpnspa.key’
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [BR]:
State or Province Name (full name) [RJ]:
Locality Name (eg, city) [Araruama]:
Organization Name (eg, company) [BSDInfo]:
Organizational Unit Name (eg, section) [TI]:
Common Name (eg, your name or your server’s hostname) [vpnspa]:
Name [vpnsrv]:vpnspa
Email Address [ti@bsdinfo.com.br]:
Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /usr/local/etc/openvpn/2.0/openssl-0.9.8.cnf
Check that the request matches the signature
Signature ok
The Subject’s Distinguished Name is as follows
countryName           :PRINTABLE:’BR’
stateOrProvinceName   :PRINTABLE:’RJ’
localityName          :PRINTABLE:’Araruama’
organizationName      :PRINTABLE:’BSDInfo’
organizationalUnitName:PRINTABLE:’TI’
commonName            :PRINTABLE:’vpnspa’
name                  :PRINTABLE:’vpnspa’
emailAddress          :IA5STRING:’ti@bsdinfo.com.br’
Certificate is to be certified until May 26 06:31:52 2022 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

Vamos dar uma olhada agora nos certificados e chaves que temos:

# ls -l /usr/local/etc/openvpn/2.0/keys/
total 84
-rw-r–r–  1 root  wheel  4030 May 28 02:21 01.pem
-rw-r–r–  1 root  wheel  3913 May 28 03:23 02.pem
-rw-r–r–  1 root  wheel  3913 May 28 03:31 03.pem
-rw-r–r–  1 root  wheel  1334 May 28 01:29 ca.crt
-rw——-  1 root  wheel   887 May 28 01:29 ca.key
-rw-r–r–  1 root  wheel   245 May 28 01:24 dh1024.pem
-rw-r–r–  1 root  wheel   360 May 28 03:31 index.txt
-rw-r–r–  1 root  wheel    21 May 28 03:31 index.txt.attr
-rw-r–r–  1 root  wheel    21 May 28 03:23 index.txt.attr.old
-rw-r–r–  1 root  wheel   240 May 28 03:23 index.txt.old
-rw-r–r–  1 root  wheel     3 May 28 03:31 serial
-rw-r–r–  1 root  wheel     3 May 28 03:23 serial.old
-rw-r–r–  1 root  wheel  3913 May 28 03:23 vpnsaq.crt
-rw-r–r–  1 root  wheel   708 May 28 03:22 vpnsaq.csr
-rw——-  1 root  wheel   891 May 28 03:22 vpnsaq.key
-rw-r–r–  1 root  wheel  3913 May 28 03:31 vpnspa.crt
-rw-r–r–  1 root  wheel   708 May 28 03:31 vpnspa.csr
-rw——-  1 root  wheel   887 May 28 03:31 vpnspa.key
-rw-r–r–  1 root  wheel  4030 May 28 02:21 vpnsrv.crt
-rw-r–r–  1 root  wheel   708 May 28 02:20 vpnsrv.csr
-rw——-  1 root  wheel   887 May 28 02:20 vpnsrv.key

Agora que temos todos os certificados e chaves que iremos utilizar podemos enfim criar o arquivo de configuração do servidor:

# cd /usr/local/etc/openvpn/
# mkdir /var/log/openvpn
# chmod 750 /var/log/openvpn
# mkdir ccd
# openvpn –genkey –secret ta.key
# cat <<EOF>> vpnsrv.conf
port 1190
proto tcp
dev tun
ca /usr/local/etc/openvpn/2.0/keys/ca.crt
cert /usr/local/etc/openvpn/2.0/keys/vpnsrv.crt
key /usr/local/etc/openvpn/2.0/keys/vpnsrv.key
dh /usr/local/etc/openvpn/2.0/keys/dh1024.pem
server 172.16.24.0 255.255.255.0
ifconfig-pool-persist /usr/local/etc/openvpn/ipp.txt
client-config-dir /usr/local/etc/openvpn/ccd
tls-auth /usr/local/etc/openvpn/ta.key 0
keepalive 10 120
comp-lzo
persist-key
persist-tun
log-append /var/log/openvpn/openvpn.log
status /var/log/openvpn/status.log
client-to-client

# Saquarema Network
route 10.200.201.0 255.255.255.255

# Sao Pedro Network
route 10.200.202.0 255.255.255.255
EOF

O parâmetro cliente-to-client é extremamente importante para que as redes dos clientes possam trocar dados entre si. Caso contrário eles só trocarão dados com a rede do servidor da VPN (10.200.200.0/24).

O diretório ccd é usado para armazenarmos as configurações que forçaremos os clientes à usarem. Nós também criamos e usaremos o ta.key para aumentarmos a segurança e evitarmos um DoS na porta 1190/TCP do nosso servidor OpenVPN. Você pode alterar a porta e o protocolo para UDP como bem quiser, desde que configure também nos clientes.

Adicionamos também as rotas paras as redes 10.200.201.0/24 e 10.200.202.0/24. No parâmetro server definimos a rede usada pelas VPNs entre si que será 172.16.24.0/24.

Estamos quase acabando o servidor. Agora precisamos configurar ele para iniciar no boot do sistema:

# cd /usr/local/etc/rc.d
# ln –sf openvpn vpnsrv
# cat <<EOF>> /etc/rc.conf
vpnsrv_enable=”YES”
vpnsrv_if=”tun”
vpnsrv_configfile=”/usr/local/etc/openvpn/vpnsrv.conf”
vpnsrv_dir=”/usr/local/etc/openvpn”
EOF

Agora sim podemos iniciar nosso servidor de VPN:

 # service vpnsrv start

Se tudo correr bem teremos o serviço rodando e algo já nos logs:

# cat /var/log/openvpn.log
Mon May 28 06:47:48 2012 OpenVPN 2.2.2 amd64-portbld-freebsd9.0 [SSL] [LZO2] [eurephia] built on May 27 2012
Mon May 28 06:47:48 2012 NOTE: OpenVPN 2.1 requires ‘–script-security 2’ or higher to call user-defined scripts or executables
Mon May 28 06:47:48 2012 Control Channel Authentication: using ‘/usr/local/etc/openvpn/ta.key’ as a OpenVPN static key file
Mon May 28 06:47:48 2012 TUN/TAP device /dev/tun0 opened
Mon May 28 06:47:48 2012 /sbin/ifconfig tun0 172.16.24.1 172.16.24.2 mtu 1500 netmask 255.255.255.255 up
add net 10.200.201.0: gateway 172.16.24.2
add net 10.200.202.0: gateway 172.16.24.2
add net 172.16.24.0: gateway 172.16.24.2
Mon May 28 06:47:48 2012 Listening for incoming TCP connection on [undef]:1190
Mon May 28 06:47:48 2012 TCPv4_SERVER link local (bound): [undef]:1190
Mon May 28 06:47:48 2012 TCPv4_SERVER link remote: [undef]
Mon May 28 06:47:48 2012 Initialization Sequence Completed
Mon May 28 06:47:48 2012 Ipv6 in tun mode is not supported in OpenVPN 2.2

Notaremos uma nova interface de rede que será usada nos túneis das VPNs:

# ifconfig tun0
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1500
options=80000<LINKSTATE>
inet6 fe80::a00:27ff:fed0:bdc3%tun0 prefixlen 64 scopeid 0x4
inet 172.16.24.1 à 172.16.24.2 netmask 0xffffffff
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
Opened by PID 42385

Agora precisamos finalizar nosso servidor criando os arquivos de configuração para as outras VPNs naquele diretório /usr/local/etc/openvpn/ccd:

# cd /usr/local/etc/openvpn/ccd/
# cat <<EOF>> vpnsaq
ifconfig-push 172.16.24.6 172.16.24.5
iroute 10.200.201.0 255.255.255.0
EOF

O nome do arquivo, vpnsaq, é muito importante e deve ser o mesmo nome que usamos quando criamos o certificado para BSDInfo Saquarema. Reparem no trecho abaixo:

Organization Name (eg, company) [BSDInfo]:
Organizational Unit Name (eg, section) [TI]:
Common Name (eg, your name or your server’s hostname) [vpnsaq]:

Como podem ver mantive o nome vpnsaq no Common Name e esse deve ser o nome do arquivo de configuração porque quando o cliente se conectar no servidor VPN, o mesmo irá checar o Common Name e tentará abrir o arquivo com aquele nome no /usr/local/etc/openvpn/ccd e aí passará o IP e configurações para o cliente da VPN.

O parâmetro “ifconfig-push 172.16.24.6 172.16.24.5” diz ao cliente VPN de Saquarema que ele usará o IP 172.16.24.6 e seu gateway 172.16.24.5.

Já o parâmetro “eyste 10.200.201.0 255.255.255.0” serve para disponibilizar a rede interna de Saquarema para os demais clientes que no caso do nosso exemplo, seria a VPN de São Pedro. Sem esse parâmetro, a rede de São Pedro (10.200.202.0/24) não conseguiria acessar a rede de Saquarema (10.200.201.0/24).

Agora faremos o mesmo para a VPN da BSDInfo São Pedro:

# cd /usr/local/etc/openvpn/ccd/
# cat <<EOF>> vpnspa
ifconfig-push 172.16.24.10 172.16.24.9
iroute 10.200.202.0 255.255.255.0
EOF

Assim terminamos nossa configuração no servidor da nossa VPN. Passaremos para a configuração dos outros 2 servidores que serão os clientes nesse nosso artigo.

Para configurarmos os clientes precisaremos levar alguns arquivos para esses servidores:

BSDInfo Saquarema:

  • /usr/local/etc/openvpn/ta.key
  • /usr/local/etc/openvpn/2.0/keys/ca.crt
  • /usr/local/etc/openvpn/2.0/keys/vpnsaq.crt
  • /usr/local/etc/openvpn/2.0/eys/vpnsaq.key

BSDInfo São Pedro:

  • /usr/local/etc/openvpn/ta.key
  • /usr/local/etc/openvpn/2.0/eys/ca.crt
  • /usr/local/etc/openvpn/2.0/eys/vpnspa.crt
  • /usr/local/etc/openvpn/2.0/eys/vpnspa.key

No servidor de VPN da BSDInfo Saquarema faremos a instalação do OpenVPN conforme mostrado no início do nosso artigo. Criaremos o diretório /usr/local/etc/openvpn e o /var/log/openvpn. Não precisaremos mexer com a estrutura dos certificados e chaves, uma vez que já fizemos esse trabalho no servidor que atenderá as conexões das VPNs.

Colocaremos os arquivos de certificados e chaves, que trouxemos do servidor, em /usr/local/etc/openvpn. Após isso criaremos nosso arquivo de configuração assim:

# cd /usr/local/etc/openvpn/
# cat <<EOF>> vpnsaq.conf
client
dev tun
proto tcp
remote 169.169.169.1 1190
ns-cert-type server
nobind
persist-key
persist-tun
ca /usr/local/etc/openvpn/ca.crt
cert /usr/local/etc/openvpn/vpnsaq.crt
key /usr/local/etc/openvpn/vpnsaq.key
tls-auth /usr/local/etc/openvpn/ta.key 1
comp-lzo
log-append /var/log/openvpn/openvpn.log
status /var/log/openvpn/status.log

# Araruama Network
route 10.200.200.0 255.255.255.0

# Sao Pedro Network
route 10.200.202.0 255.255.255.0
EOF

Após criarmos esse arquivo de configuração teremos os seguintes arquivos:

# ls -l /usr/local/etc/openvpn/
total 20
-rw-r–r–  1 root  wheel  1334 May 28 08:46 ca.crt
-rw——-  1 root  wheel   636 May 28 08:46 ta.key
-rw-r–r–  1 root  wheel   337 May 28 08:47 vpnsaq.conf
-rw-r–r–  1 root  wheel  3913 May 28 08:46 vpnsaq.crt
-rw——-  1 root  wheel   891 May 28 08:46 vpnsaq.key

Para finalizarmos colocando o OpenVPN na inicialização do sistema:

# cd /usr/local/etc/rc.d
# ln –sf openvpn vpnsaq
# cat <<EOF>> /etc/rc.conf
vpnsaq_enable=”YES”
vpnsaq_if=”tun”
vpnsaq_configfile=”/usr/local/etc/openvpn/vpnsaq.conf”
vpnsaq_dir=”/usr/local/etc/openvpn”
EOF

Para finalizar nosso último cliente da VPN, usaremos os mesmos procedimentos citados no BSDInfo Saquarema mas alterando um pouco a conf e usando os certificados e chaves corretos:

# cd /usr/local/etc/openvpn/
# cat <<EOF>> vpnspa.conf
client
dev tun
proto tcp
remote 169.169.169.1 1190
ns-cert-type server
nobind
persist-key
persist-tun
ca /usr/local/etc/openvpn/ca.crt
cert /usr/local/etc/openvpn/vpnspa.crt
key /usr/local/etc/openvpn/vpnspa.key
tls-auth /usr/local/etc/openvpn/ta.key 1
comp-lzo
log-append /var/log/openvpn/openvpn.log
status /var/log/openvpn/status.log

# Araruama Network
route 10.200.200.0 255.255.255.0

# Saquarema Network
route 10.200.201.0 255.255.255.0
EOF

No final teremos os seguintes arquivos em /usr/local/etc/openvpn/:

# ls -l /usr/local/etc/openvpn/
total 20
-rw-r–r–  1 root  wheel  1334 May 28 08:46 ca.crt
-rw——-  1 root  wheel   636 May 28 08:46 ta.key
-rw-r–r–  1 root  wheel   337 May 28 08:47 vpnspa.conf
-rw-r–r–  1 root  wheel  3913 May 28 08:46 vpnspa.crt
-rw——-  1 root  wheel   891 May 28 08:46 vpnspa.key

Finalizando o artigo com a configuração para a inicialização dessa VPN:

# cd /usr/local/etc/rc.d
# ln -sf openvpn vpnspa
# cat <<EOF>> /etc/rc.conf
vpnspa_enable=”YES”
vpnspa_if=”tun”
vpnspa_configfile=”/usr/local/etc/openvpn/vpnspa.conf”
vpnspa_dir=”/usr/local/etc/openvpn”
EOF

Qualquer problema sempre consultem os logs gerados em /var/log/openvpn, afinal é para isso que os logs servem. Para nos auxiliar em problemas, informações e gerar estatísticas.

Mais informações sobre OpenVPN podem ser consultadas aqui:

Autor: Marcelo Gondim gondim em bsdinfo.com.br

Data: 29/05/2012

Este artigo é livre para ser distribuído, alterado e melhorado desde que respeitando meus créditos e os créditos de todo aquele que vier à contribuir com este documento.

Share Button

FreeBSD – compatibilidade binária com Linux

Posted by gondim | Posted in FreeBSD, Software Livre, Tecnologia | Posted on 07-06-2012

Tags:,

2

FreeBSD possui o que chamamos de compatibilidade binária com Linux. Veja bem não é emulação! Não estamos falando de um Wine da vida. Tanto FreeBSD quanto Linux executam binários em formato ELF  (Executable and Linking Format) e a diferença entre um e outro é mínima. Com algumas configurações veremos que binários Linux podem rodar em FreeBSD e a maior parte deles roda com uma performance melhor no FreeBSD que no próprio Linux. Existem algumas exceções mas são poucas onde não se conseguiria rodar um binário ELF Linux. Usaremos para os nossos testes um FreeBSD 9 32 bits rodando um programa chamado Midnight Commander (mc) que peguei de um Ubuntu Lucid 32 bits. Eu sei, eu sei que existe no ports o Midnight Commander mas o objetivo aqui é ver um binário linux rodando no FreeBSD.  🙂

Vamos começar nossos testes carregando o módulo de compatibilidade binária:

# kldload linux
# kldstat
Id Refs Address            Size     Name
1    6 0xffffffff80200000 11cd9b0  kernel
2    1 0xffffffff81412000 1e17c    linux.ko

Acima carregamos o módulo e podemos observar o linux.ko carregado. Para que isso fique sendo carregado sempre após o boot, adicione a linha abaixo em seu /etc/rc.conf:

linux_enable=”YES”

Também vamos precisar de umas bibliotecas e outros programas utilizados em sistemas GNU/Linux para compor um ambiente necessário de funcionamento e por isso vamos instalar um port específico para isso:

# cd /usr/ports/emulators/linux_base-f10
# make install distclean

Reparem que o port está em “emulators” mas não se trata de emulação. Contudo vamos precisar informar ao FreeBSD que aquele binário é um ELF do tipo Linux para que ele possa lê-lo adequadamente. A maneira de se fazer isso é através de uma marcação no binário. Veja bem a marcação é feita apenas no binário e não nas bibliotecas que este utiliza.

Após a instalação do port acima teremos essa estrutura criada:

# ls -l /compat/linux/
total 48
drwxr-xr-x   2 root  wheel  1024 Jun  5 10:47 bin
drwxr-xr-x  17 root  wheel  1024 Jun  5 10:48 etc
drwxr-xr-x   6 root  wheel  2560 Jun  5 10:47 lib
drwxr-xr-x   2 root  wheel   512 Jun  5 10:47 mnt
drwxr-xr-x   2 root  wheel   512 Jun  5 10:47 opt
drwxr-xr-x   2 root  wheel   512 Jun  5 10:47 proc
drwxr-xr-x   2 root  wheel  1024 Jun  5 10:47 sbin
drwxr-xr-x   2 root  wheel   512 Jun  5 10:47 selinux
drwxr-xr-x   2 root  wheel   512 Jun  5 10:47 srv
drwxr-xr-x   2 root  wheel   512 Jun  5 10:47 sys
drwxr-xr-x  13 root  wheel   512 Jun  5 10:48 usr
drwxr-xr-x  14 root  wheel   512 Jun  5 10:48 var

Precisamos adicionar algumas configurações para evitarmos problemas com programas linux que usem shared memory e proc. Façamos o seguinte:

1º Adicione a linha abaixo em /etc/devfs.conf:

link /tmp shm

2º Adicione a linha abaixo em /etc/fstab:

none /compat/linux/proc linprocfs rw 0 0

Reboot o sistema e começaremos com o Midnight Commander.

No Ubuntu fiz o seguinte comando para vermos todas as libs necessárias para a execução do nosso programa:

# ldd /usr/bin/mc
linux-gate.so.1 =>  (0x0018e000)
libgpm.so.2 => /usr/lib/libgpm.so.2 (0x0045b000)
libslang.so.2 => /lib/libslang.so.2 (0x0018f000)
libglib-2.0.so.0 => /lib/libglib-2.0.so.0 (0x0073d000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x00289000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0x00508000)
libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0x00110000)
libpcre.so.3 => /lib/libpcre.so.3 (0x00c1d000)
/lib/ld-linux.so.2 (0x005f9000)

Nem só de libs viverá um programa mas sim de todos os arquivos necessários para a sua perfeita execução. 🙂 Então vamos copiar o nosso /usr/bin/mc para o nosso FreeBSD e colocá-lo em /compat/linux/usr/bin/.

Reparem que toda a estrutura que o programa usará ficará embaixo de /compat/linux como se ele fosse a raiz para os binários que executaremos.

Antes de mais nada vamos precisar dizer ao FreeBSD que esse binário se trata de um binário ELF Linux e para isso vamos fazer apenas o seguinte:

# brandelf -t Linux /compat/linux/usr/bin/mc

Vou tentar rodar /compat/linux/mc e ver que erros pegarei:

# /compat/linux/usr/bin/mc
/compat/linux/usr/bin/mc: error while loading shared libraries: libgpm.so.2: cannot open shared object file: No such file or directory

Opa! Ele reclamou da libgpm.so.2 que na verdade é um link simbólico para libgpm.so.2.0.0. Vamos então copiar do Ubuntu a lib /usr/lib/libgpm.so.2.0.0 para o FreeBSD em /compat/linux/usr/lib e executar:

# cd /compat/linux/usr/lib
# ln -sf libgpm.so.2.0.0 libgpm.so.2

Depois disso vamos rodá-lo novamente e veremos algo assim:

Tem algo errado ainda porque a tela deveria estar com fundo azul e os gráficos certos. Bem, vamos sair com F10 e ver se aparece algum erro:

# /compat/linux/usr/bin/mc
Warning: file /etc/mc/extfs/extfs.ini not found
Warning: file /etc/mc/extfs/sfs.ini not found
Warning: file /etc/mc/mc.charsets not found
Warning: file /usr/share/mc/mc.charsets not found

 

Ummm podemos deduzir então que faltam algumas coisas como o /etc/mc e o /usr/share/mc que estão lá no Ubuntu. Para resolver isso pegaremos o conteúdo de cada diretório e colocaremos eles em /compat/linux/etc/mc e /compat/linux/usr/share/mc.

Feito isso agora sim rodaremos o nosso /compat/linux/usr/bin/mc e veremos a tela certa e sem erros:

Bem é isso pessoal, para mais informações vocês podem consultar o Handbook aqui.

Para fazer o mesmo em um FreeBSD 64 bits existem algumas coisas que precisam ser feitas. Aqui está uma página, embora antiga, boa para consultar sobre rodando binários 32 bits do Linux em FreeBSD 64 bits.

Be happy!!

 

Share Button

MeetBSD California 2012 – 3 e 4 de novembro

Posted by gondim | Posted in FreeBSD, Tecnologia | Posted on 01-06-2012

Tags:, ,

0

O pessoal do MeetBSD, em sua terceira bienal, convida à todos para participarem desse evento que ocorrerá na California no campus Yahoo! em Sunnyvale.
O evento ocorrerá em um sábado e domingo dias 03/11 e 04/11. Quem se registrar até o dia 30/06 pagará US$10,00, após essa data o registro custará US$75,00. Como ainda está distante, quem tiver interesse e condições de ir ainda dá tempo para se programar.

Abaixo mais informações para quem se interessar:

To keep up with information about MeetBSD California 2012, follow us on Twitter http://twitter.com/#!/MeetBSDCA, “Like” us on Facebook at
http://www.facebook.com/MeetbsdCalifornia, follow us on Google Plus at http://plus.google.com/109740340769158691256, or keep visiting http://www.meetbsd.com.

Conference registration link: https://www.meetbsd.com/registration
Travel/hotel information: https://www.meetbsd.com/travel
See the announcement here:
http://www.ixsystems.com/resources/ix/news/ixsystems-announces-meetbsd-california-2012.html

Share Button