Monday, July 27, 2009

Broadcom bcm43xx em modo Monitor e Kismet no Ubuntu

Hoje em dia não é difícil encontar um laptop que tenha como interface wireless uma placa Broadcom. Apesar de não serem tão flexíveis quanto placas Atheros, as placas Broadcom apresentam um desepenho suficiente para maioria das tarefas cotidianas que necessitem de acesso a uma rede wireless.

Até algum tempo atrás essas placas não possuiam bom suporte no GNU/Linux. Seus usuários eram obrigados a utilizar um driver para Windows e o aplicativo Ndiswrapper ou trocar de placa wireless para ter acesso à rede. O desempenho não era tão significativo com o Ndiswrapper e alguns problemas não permitiam associar a uma BSSID escondida usando WPA.

Como o número de usuários GNU/Linux que utilizam essa placas tem crescido, a distribuição Ubuntu já vem com um driver "Broadcom STA wireless driver" que funciona muito bem, exceto pelo fato de não dar suporte ao modo Monitor da placa. Ou seja, se você é daqueles usuários que gosta de, uma vez ou outra, usar um sniffer para captura de pacotes, ou simplesmente para verificar a saúde da sua rede, esse driver certamente é um problema.

Mas se você ainda acredita na sua placa Broadcom e pretende usar seu modo Monitor, os passos são simples. Para aqueles que usam Ubuntu é muito simples, uma vez que já existem pacotes prontos nos repositórios oficiais. Para aqueles que usam outras distribuições, basta pegar o driver disponível em http://bcm43xx.berlios.de

O conteúdo deste post está baseado na distribuição GNU/Linux Ubuntu 9.04 (Jaunty Jackalope), mas não deve ser difícil de adaptar os passos para outras distribuições.

Primeiro passo: Instalar o pacote b43-fwcutter.
Este pacote contém o fwcutter, uma ferramenta para extrair firmware. Este pacote também fará o download dos firmwares necessários e já fará a instalação automaticamente.
$sudo apt-get install b43-fwcutter

Segundo passo: Desabilitar o driver nativo que já vem instalado com a distribuição.
Para desabilitar o driver, vá em
System -> Administration -> Hardware Drivers
Selecione "Broadcom STA Wireless Driver" e clique em "Deactivate". Feche a janela.
Pronto, o driver foi desativado.

Terceiro passo: Reiniciar os módulos.
Existem outras formas de reiniciar os módulos carregados, no entanto, a maneira mais simples de reiniciar os módulos é reiniciando o computador.
$sudo reboot

Quarto passo: Verificar instalação dos módulos.
Se tudo aconteceu como o planejado os novos módulos devem estar carregados e prontos para serem utilizados após a reinicialização.
$lsmod | grep b43
b43 131484 0
mac80211 217464 1 b43
led_class 12036 1 b43
input_polldev 11912 1 b43
ssb 41220 1 b43

Quinto passo: Colocando a interface no modo Monitor.
No meu caso, a interface wireless Broadcom foi mapeada para wlan0.
$sudo iwconfig wlan0 mode monitor

Agora você pode usar seu sniffer preferido seja kismet, airodump ou outro de sua preferência.

Sexto passo: Configurando o Kismet.
Para usar o Kismet é necessário configurar o arquivo /etc/kismet/kismet.conf. Usando seu editor de texto preferido, altere as linhas as seguintes linhas e salve o arquivo. Substitua seu_usuario pelo usuário que usa normalmente.
suiduser=seu_usuario
source=b43,wlan0,bcm43

Sétimo passo: Colocando a interface no modo Managed.
Após usar o seu sniffer, você irá notar que não está associado a nenhuma rede. Quando no modo Monitor, a placa não está e não pode ser associada a nenhum BSSID.
Provavelmente, após usar seu sniffer você terá problemas para associar-se novamente. Para isso, é necessário que a placa volte a ser configurada para seu modo Managed.
$sudo ifconfig wlan0 down
$sudo iwconfig wlano mode managed
$sudo ifconfig wlan0 up
$sudo dhclient

Pronto, agora você está pronto para usar um sniffer sempre que quiser.

Tuesday, June 9, 2009

Criando uma LAN com VirtualBox

Criando uma LAN com VirtualBox


Este post ensina a criar uma pequena LAN utilizando um único computador, rodando GNU/Linux, com três máquinas virtuais sobre o VirtualBox. Claro que para isso o computador deve ter um bom processador e uma quantidade aceitável de memória. Acredito que com 1GB ou 2GB já é possível criar essa LAN de máquinas virtuais.

Algumas considerações iniciais:
- Para esse experimento foi utilizado o VirtualBox 2.2.4 em Ubuntu Desktop 9.04 (Jaunty Jackalope) - Este é o Host.
- Esta versão de VirtualBox já possui suporte facilitado para bridges virtuais, o que torna prático o trabalho de criação de uma rede local interna.
- Admite-se o uso da distribuição Ubuntu em todo experimento, mas não deve ser difícil utilizar uma distribuição diferente para o mesmo experimento.
- Não são abordadas as instalações dos SOs das máquinas virtuais, apenas as configurações.
- Os comandos descritos devem ser digitados dentro de um terminal (gnome-terminal, por exemplo).
- Admite-se que se tenha conhecimentos básicos de SO, Redes, Linux e algumas ferramentas como VIM, por exemplo.

Configurando as máquinas virtuais.
No VirtualBox foram criadas 3 máquinas virtuais:
- Guest 1: Servidor, Ubuntu Server 9.04.
O guest 1 será um roteador (gateway para os demais guests) e servidor de alguns serviços básicos de rede.
Para o guest 1, foram configuradas duas placas de rede:
Adapter 1 ativada em NAT.

Adapter 2 ativada em Internal Network, name virtualNetwork.


- Guest 2: Cliente, Windows XP.
Adapter 1 ativada em Internal Network, name virtualNetwork.


- Guest 3: Cliente, Ubuntu Desktop 9.04.
Adapter 1 ativada em Internal Network, name virtualNetwork.


Depois de configuradas as máquinas virtuais, a rede ficará assim:


Configurando o Guest 1.
Depois do boot do guest 1 é possível observar que apenas a interface eth0 (externa) é configurada.
$ifconfig

Passo 1: Configurando a segunda interface para IP estático.
$sudo vim /etc/network/interfaces

Passo 1.1:Adicione as seguintes linhas no final do arquivo, salve e feche o arquivo.
# The second network interface
auto eth1
iface eth1 inet static
address 192.168.10.1
netmask 255.255.255.0

Passo 2: Reiniciando as configurações de rede.
$sudo /etc/init.d/networking restart

Passo 3: Ativando o roteamento (eth0 <-> eth1).
$sudo echo "1" > /proc/sys/net/ipv4/ip_forward

Passo 4: Configurando tradução de endereços para rede interna.
$sudo iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE

Os passos 3 e 4 alteram tabelas dinâmicas do sistema e devem ser executados toda vez que guest 1 for inicializado.
Dica: Criar um script que execute os passos 3 e 4 automaticamente. Crie um script chamado configRouter.sh e coloque-o em /etc/rc.* (* depende do seu modo de inicialização).
#! /bin/bash
# ativando roteamento
echo "1" > /proc/sys/net/ipv4/ip_forward
# configurando tradução de endereços para rede interna
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE

Alterando permissão de execução do script.
$sudo chmod 744 configRouter.sh

Executando o script.
$sudo ./configRouter.sh

Configurando o Guest 2.
Passo único: Configure a Conexão Local do Windows XP para
Endereço IP: 192.168.10.2
Máscara de sub-rede: 255.255.255.0
Gateway Padrão: 192.168.10.1
Servidor DNS preferencial: 208.67.222.222
Servidor DNS alternativo: 208.67.220.220

Observe que o gateway padrão é o Guest 1.
Os endereços de servidores DNS utilizados são os endereços do OpenDNS (www.opendns.com). Para mais informações visite o site.

Configuração o Guest 3.
Passo 1: Configurando a primeira interface para IP estático.
$sudo vim /etc/network/interfaces

Passo 1.1: Adicione as seguintes linhas no final do arquivo, salve e feche o arquivo.
# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.10.3
netmask 255.255.255.0
network 192.168.10.0
broadcast 192.168.10.255
gateway 192.168.10.1

Passo 2: Configurando os servidores DNS.
$sudo /etc/resolv.conf

Passo 2.1: Adicione as seguintes linhas no final do arquivo, salve e feche o arquivo.
nameserver 208.67.222.222
nameserver 208.67.220.220

Passo 3: Reiniciando as configurações de rede.
$sudo /etc/init.d/networking restart

Agora basta fazer alguns testes de conectividade. É isso!
Um abraço.

Monday, June 1, 2009

DDNS-client atrás de NAT

DDNS no Linux
O serviço DDNS, além de gratuito, é uma ótima alternativa para quem deseja ter um domínio, mas não dispõe de um IP fixo.
Grande parte dos usuários domésticos requisita um novo IP a cada nova conexão com seu ISP. Sendo assim, um serviço de DNS que permita ao cliente atualizar suas entradas no DNS sempre que uma nova conexão com a Internet é estabelecida é bastante legal. Eis que surge o DDNS.
O endereço do serviço no site do fabricante é http://www.winco.com.br/ddns/
Lá podem ser encontradas várias informações sobre o serviço, bem como os clientes para sistemas operacionais Windows e Linux.
Os clientes para Windows são ótimos e bem completos. No entanto, o mesmo não ocorre para os clientes em Linux.
Os clientes para Linux são textuais e bem pouco intuitivos. Além do mais, existem apenas 2 casos de uso no site que, ao meu ver, não cobrem o caso de grande parte dos usuários: Um computador com Linux (cliente) atrás de um NAT (realizado num router DSL, por exemplo).
Dessa forma, criei um tutorial, baseado naqueles disponíveis no site do fabricante, que ensina como modificar o cliente em Linux para o que eu chamo de caso 3.

Caso 3: Não possui endereço IP Fixo e ESTÁ atrás de um NAT.

Lembrando que o IP resolvido será o seu IP externo dinâmico, então, cuidado com as configurações do seu router DSL ;)
1) Os programas de DDNS devem ser instalados no diretório /usr/local/sbin. Se esse diretório não existir, ele deve ser criado. Após a criação do mesmo, execute o comando:

$cd /usr/local/sbin

$tar zxf ddns-linux-1.0.tgz

2) Edite o arquivo /usr/local/sbin/ddns.sh e configure as seguintes linhas:
DOMINIO="seudominio.winconnection.net" #Seu end. DDNS (ex.: meuendereco) ou "seudominio.ddns.com.br" #Seu end. DDNS
SENHA="xxxxxxxxxx" #A sua senha para o domínio
INTERFACE="ppp0" #Coloque aqui o endereco correto da interface de rede Ex.: ppp0, eth0, etc

ALTERAÇÃO SUGERIDA -> Procure as seguintes linhas no arquivo ddns.sh
#Vamos ver se o endereco mudou
${BINDIR}/getip $INTERFACE > ${TMPDIR}/ddns.ip.new

Apague ou comente a linha "${BINDIR}/getip $INTERFACE > ${TMPDIR}/ddns.ip.new". Para comentar a linha basta colocar um "#" antes do início da linha.

Adicione a seguinte linha no lugar da linha apagada ou abaixo da linha comentada.
html2text http://checkip.dyndns.org | cut -c21-35 | tail -1 > ${TMPDIR}/ddns.ip.new

O resultado deste trecho será algo assim:
#Vamos ver se o endereco mudou
#${BINDIR}/getip $INTERFACE > ${TMPDIR}/ddns.ip.new
html2text http://checkip.dyndns.org | cut -c21-35 | tail -1 > ${TMPDIR}/ddns.ip.new

Eu prefiro comentar as linhas que não usarei como forma de backup. Caso algo dê errado, é possível voltar ao estado anterior.

3) Crie as seguinte entradas no crontab do root (usando crontab -e ) da seguinte forma:

*/1 * * * * /usr/local/sbin/ddns.sh

0,30 * * * * /usr/local/sbin/ddns-refresh.sh

Pronto. O DDNS For Linux está pronto para ser usado.

Para verificar se tudo deu certo, execute em um terminal:
$ nslookup seudominio.ddns.com.br

Espero que seja útil.
Um abraço.

Thursday, May 7, 2009

Reativando

Depois de muito tempo sem postar nada. Estou reativando o blog para publicar tudo aquilo de interessante que chegar até mim sobre o mundo da computação. Espero publicar assuntos interessantes e sempre manter o blog atualizado. É isso.