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 https://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 há 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. 

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

Ver Mais

Postagem relacionada