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, como vimos no tutorial Entendendo (e quebrando) a segurança em redes Wireless, publicado dia 27/04.
Embora não seja infalível, o WPA é um padrão mais seguro, pois isso é preferivel em redes onde a segurança é um fator importante.
Nem todas as placas são compatíveis com o WPA e, no Linux, existe um complicador adicional, que é o fato de alguns dos drivers não oferecerem suporte a ele, ainda que a placa originalmente suporte. Para usar o WPA numa rede de médio ou grande porte, é preciso escolher com um certo cuidado quais placas e pontos de acesso usar.
Para conectar os clientes Linux à rede, usamos o wpasupplicant. Algumas distribuições já incluem ferramentas de configuração para ele, mas vou descrever aqui o processo manual de configuração, que você pode usar para corrigir problemas ou, quando não houver nenhuma ferramenta mais simples disponível.
Comece instalando o pacote “wpasupplicant”. Nas distribuições derivadas do Debian você pode instalá-lo via apt-get:
No Fedora, instale-o usando o yum:
O passo seguinte é criar o arquivo de configuração do wpasupplicant, contendo o SSID e a senha 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 passprase (a senha), como em:
Ele retorna a configuração que deve ser incluída no arquivo, como em:
ssid=”minharede”
#psk=”minhapassprase”
psk=24b0d83ee1506019e87fcf1705525ca60abbd9b24ac5bedf183620d0a22ab924
}
Note que ele inclui duas linhas “psk”, onde vai a passprase. A linha que está comentada contém sua passprase 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.
Você pode também usar o comando abaixo (como root), que já modifica automaticamente o arquivo:
Falta agora se conectar ao ponto de acesso. Uma ressalva importante é que, para usar o WPA em conjunto com o wpasupplicant, o ponto de acesso deve estar configurado com a opção “Broadcast SSID” ativada. Caso contrário, o wpasupplicant não consegue encontrar o ponto de acesso e não estabelece a conexão. Verifique e, caso necessário altere a configuração do AP:
Agora vem o comando que ativa o wpasupplicant, especificando a placa de rede que será usada, o arquivo de configuração que acabamos de criar e o driver que será usado:
O “ath0” indica a sua placa wireless. O mais comum é que ela seja a “wlan0”, mas isso varia de acordo com o driver usado. Sua placa pode ser vista como “eth0” ou “eth1”, caso seja uma placa Orinoco ou ADM, como “ath0”, se tiver uma placa com chip Atheros, ou mesmo “ra0”, caso tenha uma placa com chip ralink.
O “madwifi” por sua vez, indica o driver que será usado pelo wpasupplicant. As possibilidades aqui são as seguintes:
- ndiswrapper : Indique este driver ao ativar a placa de rede usando o Ndiswrapper, usando o driver do Windows. Note que muitas placas funcionam perfeitamente no Ndiswrapper em redes sem encriptação ou WEP, mas ficam instáveis ao usar o WPA, justamente por que ele é um algoritmo mais completo e difícil de emular.
- wext: Este é um driver genérico, que dá suporte a muitas das placas que possuem drivers nativos. Se a sua placa não possui um driver específico (cheque os abaixo), é bem provável que funcione com ele.
- madwifi: O driver para placas com chipset Atheros, como a que estou usando no exemplo.
- 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, cheque a forma como está configurada no seu micro.
- ipw: Placas com os chipsets Intel IPW2100 e IPW2200, usadas nos notebooks Intel Centrino.
- 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 e Hermes II (da Agere) e Atmel.
Se você estivesse usando uma placa Broadcom configurada através do Ndiswrapper e reconhecida pelo sistema como wlan0, por exemplo, o comando seria:
Por causa da opção “-d” que incluímos no comando, ele roda 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:
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.
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. No Kurumin e outras distribuições derivadas do Knoppix, você pode usar o “netcardconfig”, no Fedora pode usar o “system-config-network”, no Ubuntu pode usar o “network-admin” (o “Configurar rede no Menu”), no Slackware pode usar o “netconfig” e assim por diante.
Se, por outro lado, você receber mensagens como:
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:
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 ponto de acesso esteja configurado para não divulgar o SSID, que o seu notebook está muito longe do ponto de acesso, fora da área de alcance, ou mesmo que a antena do notebook está desativada.
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 onde você tenta usar o driver “wext” em uma placa que possui um driver específico, como as placas Atheros (madwifi) e Intel (ipw).
Depois de testar e ver 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 wpasupplicant rode em modo daemon, sem bloquear o terminal nem mostrar mensagens na tela:
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/bootmisc.sh”, ou “/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, Kurumin, ou qualquer outra distribuição derivada do Debian, abra o arquivo “/etc/network/interfaces“. Adicione as duas linhas abaixo, contendo os parâmetros do wpasupplicant, no final do arquivo. Note que agora adicionamos também a opção “w”, específica para uso em scripts de inicialização:
up wpa_supplicant -i ath0 -c /etc/wpa_supplicant.conf -wB -D madwifi
down killall wpa_supplicant
Lembre-se de substituir o “ath0” e “madwifi” 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 — configuration file for ifup(8), ifdown(8)
auto lo ath0
iface lo inet loopbackiface ath0 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.254up wpa_supplicant -i ath0 -c /etc/wpa_supplicant.conf -wB -D madwifi
down killall wpa_supplicant
Como de praxe, ao usar este exemplo como modelo, preste atenção para substituir todos os “ath0” pela interface correta no seu caso e ajustar os endereços de acordo com a configuração da sua rede.
Caso você use o Fedora, Mandriva, ou outra distribuição originária do Red Hat, abra o arquivo “/etc/sysconfig/network-scripts/ifup-wireless” e adicione a linha:
wpa_supplicant -i ath0 -c /etc/wpa_supplicant.conf -wB -D madwifi
Crie o arquivo “/etc/sysconfig/network-scripts/ifdown-wireless”, contendo a linha “killall wpa_supplicant” e transforme-o em executável:
# chmod +x /etc/sysconfig/network-scripts/ifdown-wireless
O arquivo ifup-wireless é executado pelo Fedora ao ativar a placa de rede, enquanto o ifdown-wireless é executado ao desativá-la. Ao editar os dois arquivos, estamos fazendo com que os comandos do wpasupplicant sejam executados corretamente nas duas situações.
Um dos recursos mais interessantes do wpasupplicant é a possibilidade de definir várias redes diferentes no arquivo de configuração. O wpasupplicant passa então a testar cada uma delas periodicamente, conectando-se à 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“, 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 peso 3 e as redes públicas peso 1, de forma que ele dá prioridade às duas redes, e tenta se conectar à 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”
key_mgmt=WPA-PSK
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.
Assim como existem dois padrões WEP (de 64 e 128 bits), existem dois padrões WPA, chamados “WPA Personal” e “WPA Enterprise”.
O WPA Personal (também chamado de WPA-PSK) é o padrão mais comum, que abordei até agora. Nele você define uma senha (pre-shared key) na configuração do ponto de acesso e a fornece na configuração de cada cliente. É um sistema relativamente simples, mas que garante uma boa segurança, desde que você não use uma senha fácil de adivinhar.
O WPA Enterprise por sua vez, utiliza uma estrutura muito mais complexa, onde o ponto de acesso é ligado num servidor Radius, que controla a autenticação. Além da senha de acesso, o cliente precisa possuir um certificado digital, que pode ser desde um arquivo no HD, até um smartcard.
Quando o cliente se conecta, é criado um túnel encriptado (uma espécie de VPN) entre ele e o servidor, garantindo a segurança dos dados.
Por ser bem mais trabalhoso, este é um sistema geralmente usado apenas em empresas e ambientes onde a segurança é essencial, mas mesmo assim é perfeitamente suportado pelo wpasupplicant. Este é um exemplo de configuração, que você usaria no arquivo “/etc/wpa_supplicant.conf”:
network={
ssid=”RedeSuperSegura”
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”
client_cert=”/etc/cert/user.pem”
private_key=”/etc/cert/user.prv”
private_key_passwd=”suasenha”
}
Note que neste caso é necessário indicar a localização dos certificados, que devem ser previamente instalados no HD, além de fornecer o login e senha.
Deixe seu comentário