Usando o wpa_supplicant

Embora as versões mais recentes do WEP usadas nos pontos de acesso e placas atuais sejam mais seguras que as primeiras versões, elas ainda podem ser facilmente quebradas. Embora não seja infalível, o WPA é um padrão mais seguro, por isso é o preferido em redes onde a segurança é um fator importante.

No Linux, o suporte ao WPA e ao WAP2 é fornecido pelo wpa_supplicant. Não importa se você está configurando a rede wireless usando o networkmanager, através módulo de configuração de rede no Mandriva Control Center, ou através de qualquer outra ferramenta de configuração. Por baixo dos panos é o wpa_supplicant que está fazendo o trabalho pesado.

Como de praxe, é possível também configurá-lo manualmente, o que é útil em casos em que os utilitários de configuração não funcionam como deveriam, quando você está usando alguma distribuição onde eles não estão disponíveis ou se você simplesmente resolveu colocar a mão na massa e fazer as coisas manualmente.

Para usá-lo é necessário que a placa wireless tenha sido detectada pelo sistema e o pacote “wpa_supplicant” esteja instalado. As versões recentes de todas as principais distribuições trazem o wap_supplicant instalado por padrão, mas você pode precisar instalá-lo manualmente ao usar versões antigas.

Nas distribuições derivadas do Debian, você pode instalá-lo via apt-get:

# apt-get install wpasupplicant

Uma dica é que, ao usar o Ubuntu, você deve primeiro abrir o arquivo “/etc/apt/sources.list” e descomentar a linha referente ao repositório Universe, como em:

deb http://br.archive.ubuntu.com/ubuntu dapper universe

Depois de salvar o arquivo, rode o “apt-get update” e você poderá instalar o wpa_supplicant via apt-get, usando o mesmo comando do Debian. A partir do Ubuntu 6.6 ele já vem instalado por padrão, dispensando a instalação manual.

No Fedora, instale-o usando o yum:

# yum install wpa_supplicant

No Mandriva use o urpmi:

# urpmi wpa_supplicant

Com tudo instalado, o primeiro passo é criar o arquivo de configuração do wpa_supplicant, contendo o SSID e a passphrase da sua rede. É possível também criar uma configuração que permita conectar em várias redes diferentes, como veremos a seguir.

Rode o comando “wpa_passphrase” seguido do SSID da rede e a passphrase (a senha), como em:

$ wpa_passphrase minharede minhapassphrase

Ele retorna a configuração que deve ser incluída no arquivo, como em:

network={
ssid=”minharede”
#psk=”minhapassphrase”
psk=24b0d83ee1506019e87fcf1705525ca60abbd9b24ac5bedf183620d0a22ab924
}

Note que ele inclui duas linhas “psk”, onde vai a passphrase. A linha que está comentada contém sua passphrase real, enquanto a segunda contém um “hash” (verificador), que funciona da mesma forma, mas evita que você precise deixá-la disponível dentro do arquivo para qualquer um ver. Apague a linha comentada, deixando apenas a segunda linha, com o hash.

Agora edite (ou crie) o arquivo “/etc/wpa_supplicant.conf“, de forma que ele contenha apenas as linhas retornadas pelo comando. Se preferir, você pode usar também o comando abaixo (como root), que já modifica automaticamente o arquivo, matando os dois coelhos com uma cajadada só:

# wpa_passphrase minharede minhapassphrase > /etc/wpa_supplicant.conf

Agora vem o comando que ativa o wpa_supplicant, especificando a placa de rede que será usada, o arquivo de configuração que acabamos de criar e o driver que será usado:

# wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf -d -D wext

O “wlan0” no comando indica a interface de rede, e naturalmente deve ser alterado conforme necessário. O “wext” é o driver (interno do wpa_supplicant) que será usado.

Atualmente, o driver wext é usado em quase todos os casos, inclusive no caso de placas configuradas através do ndiswrapper (usando o driver do Windows) e no caso das placas com chipset Intel. A única exceção fica por conta das placas com chipset Atheros, onde você deve substituir o “wext” por “madwifi”.

De qualquer forma, aqui vai a lista de todos os drivers disponíveis, que você pode testar em casos de problemas. Tenha em mente que os drivers “ndiswrapper” e “ipw” contém versões obsoletas de funções já incluídas no driver “wext”.

ndiswrapper: Driver antigo para placas ativadas através do ndiswrapper, que são atualmente suportadas de forma mais completa através do wext. Note que muitas placas funcionam perfeitamente no Ndiswrapper em redes sem encriptação ou WEP, mas ficam instáveis ao usar o WPA, justamente porque ele utiliza mais camadas e por isso tem uma possibilidade maior de apresentar problemas diversos.

ipw: Driver antigo para as placas com os chipsets Intel IPW2100 e IPW2200, usadas nos notebooks Intel Centrino. Assim como no caso do ndiswrapper, o driver foi incorporado ao wext nas versões recentes do wpa_supplicant. De qualquer forma, o ipw continua disponível e você pode experimentar ambos caso esteja tendo problemas para ativar a placa.

madwifi: Este é o driver para placas com chipset Atheros que citei a pouco. Estas placas estão entre as poucas que não funcionam em conjunto com o driver wext. Elas são detectadas pelo sistema como “ath0”, de forma que o comando ficaria:
wpa_supplicant -i ath0 -c /etc/wpa_supplicant.conf -d -D madwifi.

broadcom: Este é o driver nativo para as placas com chipset Broadcom, desenvolvido via engenharia reversa. Estas placas podem ser configuradas também através do Ndiswrapper (nesse caso você usaria o driver “wext”). Cheque a forma como a placa está configurada no seu micro.

prism54, hermes e atmel: Estes três drivers são os mais incomuns, usados (respectivamente) pelas placas com chipset Prism (em suas várias versões), Hermes, Hermes II e Atmel.

Por causa da opção “-d” que incluímos no comando anterior, o wpa_supplicant é executado em modo verbose, onde são mostrados detalhes sobre a conexão com o ponto de acesso. Este modo é interessante para descobrir problemas. Se a conexão for bem-sucedida, você terá (depois de uma rápida sucessão de mensagens), algo como:

State: GROUP_HANDSHAKE -> COMPLETED
CTRL-EVENT-CONNECTED – Connection to 00:50:50:81:81:01 completed (auth)
EAPOL: External notification – portValid=1
EAPOL: External notification – EAP success=1
EAPOL: SUPP_PAE entering state AUTHENTICATING
EAPOL: SUPP_BE entering state SUCCESS
EAP: EAP entering state DISABLED
EAPOL: SUPP_PAE entering state AUTHENTICATED
EAPOL: SUPP_BE entering state IDLE
EAPOL: startWhen –> 0

Estas mensagens indicam que ele se conectou ao ponto de acesso com o endereço MAC “00:50:50:81:81:01” e que a conexão está disponível para transmitir dados.

Para confirmar, rode o comando “iwconfig” que mostrará algo como:

# iwconfig

lo no wireless extensions.
eth0 no wireless extensions.
eth1 IEEE 802.11g ESSID:”casa” Mode:Managed Frequency:2.447 GHz Access Point: 00:50:50:81:81:01
Bit Rate=54 Mb/s Tx-Power:32 dBm
RTS thr=2347 B Fragment thr=2346 B
Encryption key:
Security mode:restricted
Power Management:off
Link Quality:65/100 Signal level:-54 dBm Noise level:-96 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0

Isso significa que ele se conectou com sucesso ao ponto de acesso. A partir daí, você precisa apenas configurar os parâmetros da rede (IP, máscara, gateway e DNS) usando a ferramenta apropriada para que a conexão fique disponível.

Se, por outro lado, você receber mensagens como:

Scan results: 0
Selecting BSS from priority group 0
No suitable AP found.
Setting scan request: 5 sec 0 usec
Starting AP scan (broadcast SSID)
Wireless event: cmd=0x8b1a len=8

ou:

Setting scan request: 1 sec 0 usec
Starting AP scan (broadcast SSID)
Wireless event: cmd=0x8b19 len=8
ioctl[SIOCGIWSCAN]: Resource temporarily unavailable
Scan results: -1
Failed to get scan results
Failed to get scan results – try scanning again

… significa que a conexão não foi estabelecida. Pode ser que o seu notebook está muito longe do ponto de acesso, fora da área de alcance ou mesmo que o transmissor da placa wireless do notebook está desativado.

Caso o ponto de acesso tenha sido configurado para não divulgar o SSID, experimente encerrar o wpa_supplicant, definir o SSID da rede manualmente usando o iwconfig e em seguida iniciá-lo novamente, como em:

# killall wpa_supplicant
# iwconfig wlan0 essid casa
# wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf -d -D wext

Se a conexão passa a ser bem sucedida, lembre-se de adicionar o comando do iwconfig no script de conexão, de forma que ele passe a ser executado automaticamente antes do wpa_supplicant (mais detalhes a seguir).

Existem ainda casos de drivers com bugs diversos que realmente impedem a conexão, como é o caso de diversas versões antigas do driver madwifi (para placas com chipset Atheros). Nesses casos, o melhor é simplesmente ativar a divulgação do SSID na configuração do ponto de acesso.

index_html_m6e5dfc17

Esconder o SSID oferece um pequeno ganho de segurança, mas basta esperar que qualquer cliente transmita dados para capturar o SSID, junto com o endereço MAC do cliente e do ponto de acesso usando o Kismet ou o Airmon, de forma que não vale à pena sacrificar a funcionalidade para manter o SSID escondido.

Continuando, no caso da segunda mensagem, é provável que o driver indicado na linha de comando esteja incorreto ou que não suporte o WPA. Este é o caso de muitas placas configuradas através do Ndiswrapper (por exemplo) ou casos em que você tenta usar o driver “wext” em uma placa que possui um driver específico, como as placas Atheros (madwifi).

Depois de testar e ver que a conexão está funcionando corretamente, você pode passar a usar o comando abaixo, trocando o “-d” por “-B”. Isso faz com que o wpa_supplicant rode em modo daemon, sem bloquear o terminal nem mostrar mensagens na tela:

# wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf -B -D wext

Ativando o wpa_supplicant no boot

Falta agora automatizar as coisas, fazendo com que o comando seja executado automaticamente durante o boot. Existem várias formas de fazer isso. Você poderia desde criar um ícone no desktop até adicionar o comando no final do arquivo “/etc/init.d/rc.local”. Mas, a solução mais correta é fazer com que o sistema estabeleça a conexão ao ativar as interfaces de rede.

Se você usa o Ubuntu, Kubuntu ou qualquer outra distribuição derivada do Debian, abra o arquivo “/etc/network/interfaces“. Adicione as duas linhas abaixo, contendo os parâmetros do wpa_supplicant, no final do arquivo. Note que agora adicionamos também a opção “w”, específica para uso em scripts de inicialização:

pre-up wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf -wB -D wext
post-down killall -q wpa_supplicant

Lembre-se de substituir o “wlan0” e “wext” pelos parâmetros corretos no seu caso. Para que fique tudo certo, o arquivo deve conter também uma seção com os endereços usados pela placa. Veja um exemplo de arquivo completo:

# /etc/network/interfaces
auto lo wlan0
iface lo inet loopback
iface wlan0 inet static
address 192.168.1.56
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.254
pre-up wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf -wB -D wext
post-down killall -q wpa_supplicant

Como de praxe, ao usar esse exemplo como modelo, preste atenção para substituir todos os “wlan0” pela interface correta no seu caso e ajustar os endereços de acordo com a configuração da sua rede.

Como pode ver, a primeira linha indica a localização do arquivo de configuração do wpa_supplicant. Se você ainda não o criou, aproveite para fazê-lo usando o comando que vimos a pouco: wpa_passphrase minharede minhapassphrase > /etc/wpa_supplicant.conf.

Se o ponto de acesso foi configurado para esconder o SSID e você só consegue se conectar à rede usando o comando manual do iwconfig, adicione a linha “wireless-essid casa” (onde o “casa” é o SSID desejado) na seção com a configuração da interface de rede, como em:

iface wlan0 inet static
address 192.168.1.56
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.254
wireless-essid casa
pre-up wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf -wB -D wext
post-down killall -q wpa_supplicant

No Fedora, o wpa_supplicant roda como um serviço de rede, que é configurado através do arquivo “/etc/sysconfig/wpa_supplicant“. Ele é criado automaticamente quando o pacote é instalado, com o seguinte conteúdo:

# wlan0 and wifi0
# INTERFACES=”-iwlan0 -iwifi0″
INTERFACES=”-iwlan0″
# ndiswrapper and prism
# DRIVERS=”-Dndiswrapper -Dprism”
DRIVERS=”-Dndiswrapper”

Como pode ver, o arquivo contém a interface que deve ser monitorada e o driver que deve ser usado. Você precisa apenas editá-lo, de forma a incluir as informações corretas. Os comentários são apenas para informação e podem ser removidos, como em:

# /etc/sysconfig/wpa_supplicant<<br /> INTERFACES=”-iwlan0
DRIVERS=”-Dwext

Falta agora editar o arquivo “/etc/wpa_supplicant/wpa_supplicant.conf” que é usado pelo serviço para armazenar a configuração. Ele é também criado ao instalar o pacote, inicialmente com o seguinte conteúdo:

ctrl_inter>ctrl_interface_group=wheel
network={
ssid=”any”
key_mgmt=NONE
}

Use o comando “wpa_passphrase minharede minhapassphrase” para gerar a configuração apropriada para a sua rede e insira as linhas no arquivo, sem apagar as duas primeiras, como em:

# /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_inter>ctrl_interface_group=wheel
network={
ssid=”minharede”
psk=24b0d83ee1506019e87fcf1705525ca60abbd9b24ac5bedf183620d0a22ab924
}

Depois de feita a configuração, use o comando “service wpa_supplicant restart” para reiniciar o serviço, de forma que as alterações sejam aplicadas. Aproveite também para certificar-se de que ele será carregado durante o boot, usando o comando chkconfig:

# service wpa_supplicant restart
# chkconfig wpa_supplicant on


Concluindo, falta apenas editar o arquivo com a configuração da placa de rede, dentro da pasta “/etc/sysconfig/network-scripts”. Se a interface wireless é a “wlan0”, o arquivo será o “/etc/sysconfig/network-scripts/ifcfg-wlan0”.

Ele deve conter as linhas “ONBOOT=yes”, “Type=Wireless” e “MODE=Managed”, como em:

#/etc/sysconfig/network/network-scripts/ifcfg-wlan0
DEVICE=wlan0
IPADDR=192.168.1.21
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
BOOTPROTO=static
ONBOOT=yes
Type=Wireless
MODE=Managed

ou:

#/etc/sysconfig/network/network-scripts/ifcfg-wlan0
DEVICE=wlan0
BOOTPROTO=dhcp
ONBOOT=yes
Type=Wireless
MODE=Managed

Se você precisar indicar manualmente o SSID da rede, evitando o bug do wpa_supplicant ao se conectar em pontos de acesso que não divulgam o SSID, adicione também a linha “ESSID=xxxx”, como em:

#/etc/sysconfig/network/network-scripts/ifcfg-wlan0
DEVICE=wlan0
BOOTPROTO=dhcp
ONBOOT=yes
Type=Wireless
MODE=Managed
ESSID=minharede

Ao editar o arquivo, não se esqueça de reiniciar o serviço responsável pela configuração das interfaces para que a nova configuração seja carregada:

# /etc/rc.d/init.d/network restart

Uma observação importante é que, ao ser configurado para rodar em background, o wpa_supplicant ficará o tempo todo tentando se conectar às redes wireless configuradas. Se você quiser se conectar a uma rede cabeada, deverá (além de configurar a rede), desativar o wpa_supplicant, usando o comando:

# service wpa_supplicant stop

Opções avançadas

Um dos recursos mais interessantes do wpa_supplicant é a possibilidade de definir várias redes diferentes no arquivo de configuração. O wpa_supplicant passa, então, a testar cada uma delas periodicamente, conectando-se a que estiver disponível. Daí que surgiu o nome: supplicant significa, literalmente, “pedinte”.

Neste caso, você deve especificar cada uma das redes no arquivo “/etc/wpa_supplicant.conf” (ou /etc/wpa_supplicant/wpa_supplicant.conf), juntamente com um “peso” ou prioridade para cada uma. O arquivo poderia conter uma entrada para a rede da sua casa, que usa WPA, a rede do escritório, que usa WEP, e uma entrada para redes públicas, sem encriptação. O restante da configuração continua igual ao que já vimos.

A rede de casa pode ter peso 5, a do escritório ter peso 3 e as redes públicas terem peso 1, de forma que ele dá prioridade às duas redes e tenta se conectar a qualquer rede pública disponível caso nenhuma das duas seja encontrada.

Neste caso o arquivo ficaria:

# Rede de casa, com WPA (esta é a entrada gerada pelo wpa_passphrase)
network={
ssid=”casa”
psk=2ceaa0388fa863213f5f527055846101dc449c9a569c1e43ea535a3344d3dc32
priority=5
} # Rede do escritório, com WEP:
network={
ssid=”escritorio”
key_mgmt=NONE
wep_key0=ADADA54321
wep_tx_keyidx=0
priority=3
} # Redes públicas, sem encriptação
network={
ssid=””
key_mgmt=NONE
priority=1
}

Note que incluí a linha “priority”, dentro de cada uma das entradas, especificando a prioridade de cada uma. As redes com prioridade mais alta são testadas primeiro, deixando a entrada para redes públicas como último recurso.

No caso da entrada para redes WEP, você substituiria apenas o SSID e a chave de encriptação pelos valores corretos, mantendo as linhas “key_mgmt=NOME” e “wep_tx_keyidx=0”, que fazem parte da configuração.

Concluindo, o wpa_supplicant oferece também suporte ao WPA Enterprise, com o uso de um servidor de autenticação e certificados. Este é um exemplo de configuração que você usaria no arquivo “/etc/wpa_supplicant.conf”:

network={
ssid=”RedeSegura”
scan_ssid=1
key_mgmt=WPA-EAP
pairwise=CCMP TKIP
group=CCMP TKIP
eap=TLS
identity=”seunome@empresa.com”
ca_cert=”/etc/cert/ca.pem”
cl7ient_cert=”/etc/cert/user.pem”
private_key=”/etc/cert/user.prv”
private_key_passwd=”suasenha”
}

Note que nesse caso é necessário indicar a localização dos certificados, que devem ser previamente instalados no HD (do cliente), além de fornecer o login e senha.

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X