Post em Destaque

FreeBSD 9.1-RELEASE no SVN

É isso mesmo pessoal!!! Para quem está usando a árvore svn releng/9.1 já pode atualizar e usar o FreeBSD 9.1-RELEASE. Abaixo o BSDInfo já usando o sistema novo.  🙂 (root@zeus)[~]# uname -a FreeBSD zeus.bsdinfo.com.br 9.1-RELEASE FreeBSD 9.1-RELEASE #38 r243752: Sat Dec  1 15:10:14 BRST 2012    ...

Leia mais...

Jail com VIMAGE carregando automaticamente no boot.

Posted by gondim | Posted in FreeBSD, Segurança, Software Livre, Tecnologia | Posted on 09-08-2012

Tags:, ,

0

Pois é pessoal, depois de penar um pouco com jails aqui em meu ambiente de testes consegui fazer uma configuração bem legal usando o VIMAGE. O que matava usando o vimage era que a jail não carregava os serviços e configurações automaticamente no boot porque o script /etc/rc.d/jail não tem ainda um suporte oficial para vnet. Mas futucando na Internet achei um patch para isso e que funciona tanto no FreeBSD 8 quanto no FreeBSD 9. Bem eu testei no FreeBSD 9-PRERELEASE. Abaixo vou dar um exemplo de como fazer essa configuração:

Primeiro você precisa compilar o seu kernel com suporte ao VIMAGE. Adicione a seguinte linha ao seu kernel, compile e instale ele:

options VIMAGE

Vamos agora baixar e aplicar o patch para o /etc/rc.d/jail de acordo com o seu FreeBSD:

# cd /etc/rc.d
# patch < (local_onde_baixou_patch)/jail_rc9.patch

Após aplicar o patch o seu script /etc/rc.d/jail terá suporte ao vnet que precisamos e assim carregar automaticamente nossas jails no /etc/rc.conf.

Depois de iniciar com o seu novo kernel, vamos montar a estrutura de uma nova jail para vermos como isso vai funcionar. Darei o nome da minha jail de “mail”. Vamos dizer que eu quisesse montar um servidor de correio nessa jail.

# mkdir -p /usr/jail/mail

Para cada nova jail a estrutura estaria dentro de /usr/jail. Se você já compilou e instalou seu sistema FreeBSD, a coisa fica mais rápida fazendo assim:

# cd /usr/src
# make installworld DESTDIR=/usr/jail/mail
# make distribution DESTDIR=/usr/jail/mail

Agora vamos preparar o ambiente do servidor:

# mkdir -p /etc/jails/fstabs
# echo “/usr/src              /usr/jail/mail/usr/src            nullfs      rw     0     0” > /etc/jails/fstabs/mail
# echo “/usr/ports            /usr/jail/mail/usr/ports          nullfs      rw     0     0” >> /etc/jails/fstabs/mail

No nosso /etc/rc.conf ficará essa configuração:

hostname=”virtsrv.localdomain.net”
keymap=”br275.iso.acc.kbd”
cloned_interfaces=”bridge0 epair0″
ifconfig_bridge0=”inet 192.168.8.34 netmask 255.255.255.0 addm em0 up”
ifconfig_em0=”up”
ifconfig_epair0a=”up”
defaultrouter=”192.168.8.253″
sshd_enable=”YES”
# Set dumpdev to “AUTO” to enable crash dumps, “NO” to disable
dumpdev=”NO”

jail_enable=”YES”
jail_v2_enable=”YES”
jail_list=””
jail_set_hostname_allow=”YES”
jail_socket_unixiproute_only=”YES”
jail_sysvipc_allow=”YES”
jail_list=”$jail_list mail”
jail_mail_name=”mail”
jail_mail_hostname=”mail.teste.com.br”
jail_mail_devfs_enable=”YES”
jail_mail_rootdir=”/usr/jail/mail”
jail_mail_mount_enable=”YES”
jail_mail_fstab=”/etc/jails/fstabs/mail”
jail_mail_vnet_enable=”YES”

jail_mail_exec_prestart0=”mount -t devfs devfs /usr/jail/mail/dev”
jail_mail_exec_prestart1=”ifconfig bridge0 addm epair0a”
jail_mail_exec_earlypoststart0=”ifconfig epair0b vnet mail”
jail_mail_exec_afterstart0=”ifconfig lo0 127.0.0.1″
jail_mail_exec_afterstart1=”ifconfig epair0b 192.168.8.173 netmask 255.255.255.0 up”
jail_mail_exec_afterstart2=”route add default 192.168.8.253″
jail_mail_exec_afterstart3=”/bin/sh /etc/rc”
jail_mail_exec_poststop0=”ifconfig bridge0 deletem epair0a”

Na nossa configuração acima o IP do servidor das jails será o 192.168.8.34 e o IP que estamos dando para a jail será 192.168.8.173. Use os IPs que melhor atender a sua necessidade. 🙂

Antes de iniciar a nossa jail de exemplo precisamos prepará-la para uso:

Adicione as linhas abaixo em /usr/jail/mail/etc/rc.conf:

hostname=”mail.teste.com.br”
network_interfaces=””
sshd_enable=”YES”

Por último vamos criar um fstab fazio:

# touch /usr/jail/mail/etc/fstab
# mkdir /usr/jail/mail/usr/ports

Agora podemos iniciar nossa jail fazendo:

#/etc/rc.d/jail start mail

Após carregar a jail, podemos entrar nela via jexec e configurar o time zone com tzsetup, colocar senha no root e criar novos users para o sistema. Para fazer isso:

# jls
JID  IP Address      Hostname                      Path
–               mail.teste.com.br             /usr/jail/mail

# jexec 1 sh
# passwd root
# tzsetup
# adduser
# exit

Bem é isso aí pessoal.  :

Muitas coisas desse artigo foram baseadas nesse aqui.

 

Share Button

Bind9 vulnerabilidade – DNSSEC validation Denial of Service

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

Tags:

9

Para aqueles que tem um servidor de DNS com bind 9.x dêem uma olhada nesse advisory abaixo
e corrijam o quanto antes o problema:

==========================================================================
FreeBSD-SA-12:05.bind                                       Security Advisory
                                                          The FreeBSD Project

Topic:          named(8) DNSSEC validation Denial of Service

Category:       contrib
Module:         bind
Announced:      2012-08-06
Credits:        Einar Lonn of IIS.se
Affects:        All supported versions of FreeBSD
Corrected:      2012-08-06 21:33:11 UTC (RELENG_7, 7.4-STABLE)
                2012-08-06 21:33:11 UTC (RELENG_7_4, 7.4-RELEASE-p10)
                2012-07-24 19:04:35 UTC (RELENG_8, 8.3-STABLE)
                2012-08-06 21:33:11 UTC (RELENG_8_3, 8.3-RELEASE-p4)
                2012-08-06 21:33:11 UTC (RELENG_8_2, 8.2-RELEASE-p10)
                2012-08-06 21:33:11 UTC (RELENG_8_1, 8.1-RELEASE-p13)
                2012-07-24 22:32:03 UTC (RELENG_9, 9.1-PRERELEASE)
                2012-08-06 21:33:11 UTC (RELENG_9_0, 9.0-RELEASE-p4)
CVE Name:       CVE-2012-3817

For general information regarding FreeBSD Security Advisories,
including descriptions of the fields above, security branches, and the
following sections, please visit <URL:http://security.FreeBSD.org/>.

I.   Background

BIND 9 is an implementation of the Domain Name System (DNS) protocols.
The named(8) daemon is an Internet Domain Name Server.

DNS Security Extensions (DNSSEC) provides data integrity, origin
authentication and authenticated denial of existence to resolvers.

II.  Problem Description

BIND 9 stores a cache of query names that are known to be failing due
to misconfigured name servers or a broken chain of trust.  Under high
query loads, when DNSSEC validation is active, it is possible for a
condition to arise in which data from this cache of failing queries
could be used before it was fully initialized, triggering an assertion
failure.

III. Impact

A remote attacker that is able to generate high volume of DNSSEC
validation enabled queries can trigger the assertion failure that causes
it to crash, resulting in a denial of service.

IV.  Workaround

No workaround is available, but systems not running the BIND resolving
name server with dnssec-validation enabled are not affected.

V.   Solution

Perform one of the following:

1) Upgrade your vulnerable system to 7-STABLE, 8-STABLE, or 9-STABLE,
or to the RELENG_7_4, RELENG_8_3, RELENG_8_2, RELENG_8_1, or RELENG_9_0
security branch dated after the correction date.

2) To update your vulnerable system via a source code patch:

The following patches have been verified to apply to FreeBSD 7.4,
8.3, 8.2, 8.1 and 9.0 systems.

a) Download the relevant patch from the location below, and verify the
detached PGP signature using your PGP utility.

# fetch http://security.FreeBSD.org/patches/SA-12:05/bind.patch
# fetch http://security.FreeBSD.org/patches/SA-12:05/bind.patch.asc

b) Execute the following commands as root:

# cd /usr/src
# patch < /path/to/patch
# cd /usr/src/lib/bind/dns
# make obj && make depend && make && make install
# cd /usr/src/usr.sbin/named
# make obj && make depend && make && make install

3) To update your vulnerable system via a binary patch:

Systems running 7.4-RELEASE, 8.3-RELEASE, 8.2-RELEASE, 8.1-RELEASE,
or 9.0-RELEASE on the i386 or amd64 platforms can be updated via the
freebsd-update(8) utility:

# freebsd-update fetch
# freebsd-update install

4) Install and run BIND from the Ports Collection after the correction
date.  The following versions and newer versions of BIND installed from
the Ports Collection are not affected by this vulnerability:

        bind96-9.6.3.1.ESV.R7.2
        bind97-9.7.6.2
        bind98-9.8.3.2
        bind99-9.9.1.2

VI.  Correction details

The following list contains the revision numbers of each file that was
corrected in FreeBSD.

CVS:

Branch                                                           Revision
  Path
- -------------------------------------------------------------------------
RELENG_7
  src/contrib/bind9/lib/dns/resolver.c                       1.1.1.9.2.11
RELENG_7_4
  src/UPDATING                                            1.507.2.36.2.12
  src/sys/conf/newvers.sh                                  1.72.2.18.2.15
  src/contrib/bind9/lib/dns/resolver.c                    1.1.1.9.2.8.2.1
RELENG_8
  src/contrib/bind9/CHANGES                                      1.9.2.15
  src/contrib/bind9/lib/dns/resolver.c                            1.3.2.6
  src/contrib/bind9/lib/dns/zone.c                               1.6.2.10
  src/contrib/bind9/lib/isc/random.c                              1.2.2.4
  src/contrib/bind9/version                                      1.9.2.15
RELENG_8_3
  src/UPDATING                                             1.632.2.26.2.6
  src/sys/conf/newvers.sh                                   1.83.2.15.2.8
  src/contrib/bind9/lib/dns/resolver.c                        1.6.2.7.2.1
RELENG_8_2
  src/UPDATING                                            1.632.2.19.2.12
  src/sys/conf/newvers.sh                                  1.83.2.12.2.15
  src/contrib/bind9/lib/dns/resolver.c                        1.6.2.4.2.1
RELENG_8_1
  src/UPDATING                                            1.632.2.14.2.16
  src/sys/conf/newvers.sh                                  1.83.2.10.2.17
  src/contrib/bind9/lib/dns/resolver.c                        1.6.2.3.2.1
RELENG_9
  src/contrib/bind9/CHANGES                                      1.21.2.5
  src/contrib/bind9/lib/dns/resolver.c                           1.15.2.3
  src/contrib/bind9/lib/dns/zone.c                                1.7.2.3
  src/contrib/bind9/version                                      1.21.2.5
RELENG_9_0
  src/UPDATING                                              1.702.2.4.2.6
  src/sys/conf/newvers.sh                                    1.95.2.4.2.8
  src/contrib/bind9/lib/dns/resolver.c                           1.15.4.1
- -------------------------------------------------------------------------

Subversion:

Branch/path                                                      Revision
- -------------------------------------------------------------------------
stable/7/                                                         r239108
releng/7.4/                                                       r239108
stable/8/                                                         r238749
releng/8.3/                                                       r239108
releng/8.2/                                                       r239108
releng/8.1/                                                       r239108
stable/9/                                                         r238756
releng/9.0/                                                       r239108
- -------------------------------------------------------------------------

VII. References

https://kb.isc.org/article/AA-00729

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-3817

The latest revision of this advisory is available at
http://security.FreeBSD.org/advisories/FreeBSD-SA-12:05.bind.asc
Share Button

FreeBSD 9 agora na Nuvem / FreeNAS 8.2

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

Tags:, ,

0

Depois de uma semana que eu estava em curso e longe aqui do Blog venho com uma notícia excelente. Agora o Rackspace, um dos grandes líderes de Cloud Computing está suportando FreeBSD 9 como produto. Agora além da Amazon EC2 temos a Rackspace e esperamos que muitos outros venham. Isso é bom porque muitas empresas estão vendo que temos um excelente lugar ao sol e que estamos aí para ficar e mostrar para o que viemos. 😀

Rackspace

Brandi, um dos nomes fortes da nossa comunidade FreeBSD fez uns testes na Rackspace e postou os resultados em seu blog aqui.

A outra notícia um pouco mais atrasada é o lançamento do tão esperado FreeNAS 8.2 (Sistema de Storage Open Source). Quem ainda não usou, baixe a imagem e experimente, pode ser uma excelente solução e sem custos de sofware.  🙂

FreeNAS 8.2

Share Button

BSDMagazine – mês de julho

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

Tags:, ,

0

Um pouco atrasado mas antes tarde do que nunca! rsrsrs

  • Deploy a full-featured Mail Server on OpenBSD 5.1 with iRedMail
  • freebsd-update as Intrusion Detection System
  • Taming the Blowfish with a Dog
  • Upgrading Ports Using Portmaster
  • Hardening FreeBSD with TrustedBSD and Mandatory Access Controls
  • DNSSEC Part 3: Securing the DNS Hosting Environment
  • Interview with Gabriel Weinberg, Founder of DuckDuckGo
01___okladka
Share Button

Fim de linha para as versões 8.1 e 8.2 final do mês

Posted by gondim | Posted in FreeBSD, Segurança, Software Livre | Posted on 01-07-2012

Tags:, ,

0

É pessoal segundo o anúncio abaixo, 31/07 é o fim da linha para o FreeBSD 8.1 e 8.2 no quesito segurança. Aconselha-se para quem tiver usando um desses releases, atualizar para a versão 8.3 pelo menos e continuar tendo suporte em segurança.  🙂

Hello Everyone,

On July 31st 2012, FreeBSD 8.1 and FreeBSD 8.2 will reach their End of
Life and will no longer be supported by the FreeBSD Security Team.
Users of FreeBSD 8.1 and 8.2 are strongly encouraged to upgrade to one
of the newer releases before the that date.

The current supported branches and expected EoL dates are:

  +---------------------------------------------------------------------+
  |  Branch   |  Release   |  Type  |   Release date  |  Estimated EoL  |
  |-----------+------------+--------+-----------------+-----------------|
  |RELENG_7   |n/a         |n/a     |n/a              |February 28, 2013|
  |-----------+------------+--------+-----------------+-----------------|
  |RELENG_7_4 |7.4-RELEASE |Extended|February 24, 2011|February 28, 2013|
  |-----------+------------+--------+-----------------+-----------------|
  |RELENG_8 |n/a |n/a |n/a |last release + 2y|
  |-----------+------------+--------+-----------------+-----------------|
  |RELENG_8_1 |8.1-RELEASE |Extended|July 23, 2010    |July 31, 2012    |
  |-----------+------------+--------+-----------------+-----------------|
  |RELENG_8_2 |8.2-RELEASE |Normal  |February 24, 2011|July 31, 2012    |
  |-----------+------------+--------+-----------------+-----------------|
  |RELENG_8_3 |8.3-RELEASE |Extended|April 18, 2012   |April 30, 2014   |
  |-----------+------------+--------+-----------------+-----------------|
  |RELENG_9 |n/a |n/a |n/a |last release + 2y||-----------+------------+--------+-----------------+-----------------|
  |RELENG_9_0 |9.0-RELEASE |Normal  |January 10, 2012 |January 31, 2013 |
  +---------------------------------------------------------------------+
— Simon L. B. Nielsen FreeBSD Security Officer
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

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

Liberdade ou prisão?

Posted by gondim | Posted in FreeBSD, Software Livre, Tecnologia | Posted on 30-05-2012

Tags:, ,

5

Hoje acordei e resolvi abordar algo que realmente sempre me irritou. Algumas pessoas que pregam a liberdade muitas das vezes distorcem o que é liberdade em prol do fanatismo que criaram em suas cabeças. Chega ao ponto de tentar obrigar algo à ser livre de determinada maneira. Porque se não for assim não será livre o suficiente.

Isso muito me lembra fatos religiosos, que não vou citar nomes mas, que vemos por aí o tempo todo onde a religião de fulano é a melhor porque é a certa e a do sicrano é a errada. Assim como na religião qualquer coisa que impomos estamos retirando a liberdade daquela pessoa de escolher. Mostrar e ajudar no caminho à seguir é uma forma de ajudar mas sem impor nada. No nosso mundo do software livre é a mesma coisa. Vejo muitas pessoas brigando entre si e afirmando que suas distribuições GNU/Linux são melhores, mais simples, mais tradicionais. Sempre as mesmas desculpas para as desavenças e para que tudo isso? Cada um gosta e usa o que quer. Qual o problema de uma pessoa gostar de usar um Microsoft Windows? Se ele tem dinheiro e quer pagar pela licença de uso então é a escolha dele, a liberdade que ele tem de decidir e nós como seres humanos deveríamos entender isso e respeitar.

O fato de ser pago e fechado não torna um programa ruim ou cheio de bugs. Todos os sistemas tem o seu valor e a sua aplicação. A Apple está aí para provar o quanto um sistema fechado e proprietário pode agradar à tanta gente no mundo. Ah! Mas o sistema da Apple é baseado em FreeBSD. Sim é sim mas muita coisa foram eles que desenvolveram e fecharam. Eu acho justo sim é existir opções livres para que as pessoas sem recursos possam usar e ter acesso à mesma tecnologia.

Liberdade na Informação deveria ser um direito de todos, da humanidade.

Eu citei distribuições GNU/Linux como exemplo mas são só um exemplo de muitos. Se formos mais à fundo e analisarmos o caso da licença GPL v3 na qual os novos compiladores GCC à partir da versão > 4.2, estão incorporando. Qualquer programa compilado com o GCC licenciado na GPL v3 está sujeito às regras impostas por esta licença e isso não está agradando muita gente, inclusive ao Linus Torvalds. Devido à isso, muitos projetos estão ajudando e migrando para o uso do Clang/LLVM (licença BSD) com o intuito de abandonar o GCC.

Imagine que se você compilar um programa usando um compilador GCC com licença GPL v3 seu programa automaticamente passa à adotar a GPL v3 como sua licença e fica obrigado à seguir suas regras. Bem, como muitos dizem isso foi um tiro no pé para o Richard Stallman. Agora o Clang/LLVM passa à ser o grande objetivo e todo esforço está sendo colocado para que no FreeBSD 10.0 tanto o sistema quanto os ports possam ser 100% compiláveis com o Clang. Atualmente, para a comunidade FreeBSD, qualquer programa que não possa ser compilado com o Clang possui um bug e precisa ser corrigido o quanto antes.

Na minha visão a GPL v3 vai de contra qualquer coisa que se diga livre e a jogada do Stallman era a de querer obrigar à todos que aceitassem a GPL v3 mudando a licença de um dos maiores compiladores livres que tínhamos.

Tudo isso é notícia velha e já acontece faz um bom tempo mas é sempre bom relembrar.

“O homem livre é um lutador e a liberdade é algo que se conquista”
Nietzche

Share Button