LinuxAccessPoint

Criar um ponto de acesso sem fio (wireless) no Linux

Por: Manolis Tzanidakis Tradução: RodrigodaSilvaVaz e CarlosHenrique

Introdução

A versão 2 do Wi-Fi Protected Access (WPA2) está se tornando de fato o padrão para redes sem fio seguras, e esta é a característica principal para todos novos produtos Wi-Fi certificados pela Wi-Fi Alliance. Todos nós sabemos a fraqueza da segurança de sua versão anterior, WEP; dessa vez eles acertaram. Aqui mostrarei como implementar o protocolo WPA2 um host Linux e criar um ponto de acesso sem fio seguro (WAP) para a sua rede.

Muitos produtos WAP para a classe consumidora operam da mesma simples maneira: eles criam uma ponte entre a interface de rede com fio (Ethernet) e uma sem fio. Isso é exatamente o que vamos fazer também. A parte WAP estará aos cuidados do daemon hostapd, então você pode pegar uma interface sem fio que ele suporta. Entre as NICs suportadas são essas com chipsets Prism 2/2.5/3, Atheros ar521x e Prism GT/Duette/Indigo; uma lista está disponível no site hostapd, e ainda possui links com drivers para Linux para cada chipset. Eu tenho uma baseada na Atheros AR5212 PCI instalada no meu WAP, que funciona muito bem com a última versão estável dos drivers MADWifi e é suportada pela hostapd. Embora funcionem em qualquer Pentium (ou mais atual), algumas placas wireless PCI requerem PCI 2.2 para operar, então verifiquem as especificações de sua placa-mãe antes de comprar a placa. Você também precisará de uma interface Ethernet que seja suportada pelo Linux para conectar seu WAP na LAN; muitas interfaces on-board funcionarão bem.

Minha instalação é baseada no Debian Testing (Etch), mas funcionará em algumas distribuições GNU/Linux com o kernel 2.6. O kernel deve suportar 802.1d Ethernet Bridging (CONFIG_BRIDGE) e Wireless LAN (CONFIG_NET_RADIO). A maioria das versões do kernel possui esta opção habilitada por padrão, mas se você preferir compilar seu próprio kernel, certifique-se de incluir esta opção. Os únicos pacotes que você precisa instalar, além do hostapd, são bridge-utils e wireless-tools. As principais distribuições GNU/Linux oferecem pacotes binários para todos estes programas, mas se você preferir compilar a partir do código fonte, você pode buscar mais informações em suas homepages.

Antes de juntar a ponte das duas interfaces (Bridge), nós devemos pôr a interface wireless (em meu caso ath0; ajuste de acordo com sua instalação) em hostap ou Master mode. Normalmente isto é tão simples como rodar iwconfig ath0 mode Master, mas o suporte a wlan ainda não é padrão, alguns drivers talvez precisem de configuração adicional. Se você tiver uma interface Atheros-based você precisa também executar o seguinte: wlanconfig ath0 destroy; wlanconfig ath0 criará wlandev wifi0 wlanmode ap antes do comando iwconfig. Após isso, execute iwconfig ath0 irá retornar mode:Master, entre outros.

Configurando

Agora vamos criar a bridge. Nós assumiremos que a interface Ethernet é eth0:

ifconfig eth0 0.0.0.0 up
ifconfig ath0 0.0.0.0 up
brctl addbr br0
brctl addif br0 eth0
brctl addif br0 ath0

E para parar a bridge, você deve rodar:

ifconfig br0 down
ifconfig eth0 0.0.0.0 down
ifconfig ath0 0.0.0.0 down
brctl delif br0 eth0
brctl delif br0 ath0
brctl delbr br0

Você pode opcionalmente dar um endereço IP para a interface br0 se você quiser alcançar o host WAP da rede, usando por exemplo SSH. Cada distribuição oferece sua própria maneira de configurar a rede; Se você usa Debian (ou alguma distribuição baseada em Debian, tal como Ubuntu) você pode substituir todos os comandos acima adicionando no seu arquivo /etc/network/interfaces :

auto ath0 br0

iface ath0 inet manual
        pre-up wlanconfig ath0 destroy
        pre-up wlanconfig ath0 create wlandev wifi0 wlanmode ap
        post-down wlanconfig ath0 destroy
        wireless-mode master

iface br0 inet manual
        bridge_ports eth0 ath0

Note que ifupdown configura eth0 automaticamente, assim você não necessita uma estância em separado para ele em /etc/network/interfaces. Para verificar se a bridge está configurada corretamente, execute brctl show. Você deve ter alguma coisa parecida com isto:

bridge name     bridge id               STP enabled     interfaces
br0             8000.00032f2481f0       no              ath0
                                                        eth0

Antes de inicializar o hostapd nós precisamos de uma frase secreta para WPA2. Como toda senha, ela deve ser aleatória e difícil de adivinhar. Uma maneira agradável de gerar uma frase secreta é visitar Gibson Research Corp.'s Ultra High Security Password Generator e usar uma terceira senha para criá-la -- é intitulado 63 caracteres aleatórios alfa-numéricos (a-z, A-Z, 0-9). Tendo uma senha incluindo caracteres ASCII não-alfanuméricos (Ex. !, @, etc.) pode tentar, mas alguns clientes -- normalmente Windows XP -- não aceitam eles.

Agora crie um novo arquivo de texto com o nome /etc/hostapd/wpa_psk e cole sua senha:

00:00:00:00:00:00 PASSWORD

A primeira parte com os zeros significa 'todos os endereços MAC', e é exatamente isso. Você pode usar também diferentes senhas para cada cliente adicionando uma nova linha no arquivo, colocando o endereço MAC e sua respectiva senha. Tenha certeza que somente o root poderá acessar o arquivo:

chmod 600 /etc/hostapd/wpa_psk.

Agora crie um backup do arquivo de configuração do hostapd, /etc/hostapd/hostapd.conf, e guarde como uma referência que está funcionando mv /etc/hostapd/hostapd.conf /etc/hostapd/hostapd.conf.orig. Crie um novo arquivo hostapd.conf e cole as seguintes linhas abaixo:

interface=ath0
bridge=br0
driver=madwifi
logger_syslog=-1
logger_syslog_level=2
logger_stdout=-1
logger_stdout_level=2
debug=0
dump_file=/tmp/hostapd.dump
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
ssid=My_Secure_WLAN
#macaddr_acl=1
#accept_mac_file=/etc/hostapd/accept
auth_algs=3
eapol_key_index_workaround=0
eap_server=0
wpa=3
wpa_psk_file=/etc/hostapd/wpa_psk
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
stakey=0

Substitua as partes em itálico com informações de acordo com sua configuração.Se você quer especificar para aceitar somente clientes que vão conectar, remova o caracter # das duas linhas acima e copie o endereço MAC dos clientes para /etc/hostapd/accept, e faça este arquivo ser acessado somente pelo root (chmod 600). Para mais informações sobre as opções usadas, leia e comente no arquivo de backup que foi criado anteriormente (hostapd.conf.orig).

Inicie o hostapd daemon (/etc/init.d/hostapd start) e verifique em /var/log/daemon.log se está funcionando normalmente. Se o daemon não iniciar, incremente o level debug (option debug= em hostapd.conf) para 4 e tente novamente.

Agora se você fizer um scan com o cliente nas redes sem fio, você poderá ver seu ESSID. Para conectar com o WAP no Windows XP SP2, você precisará instalar o path Microsoft KB893357, que irá adicionar o suporte ao WPA2. No cliente Linux, instale o wpa_supplicant e crie um arquivo de configuração, wpa_supplicant.conf (no Debian, é instalado em /etc/wpa_supplicant/) de acordo com o que segue abaixo:

update_config=1
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
eapol_version=1
ap_scan=1
fast_reauth=1

network={
        ssid="My_Secure_WLAN"
        proto=RSN
        key_mgmt=WPA-PSK
        pairwise=CCMP
        group=CCMP
        psk="PASSPHRASE"
        priority=5
}

Outra vez sobrescreva as partes em itálico de acordo com o setup e execute wpa_supplicant -i eth1 -D wext -c /etc/wpa_supplicant/wpa_supplicant.conf (Substitua eth1 com o nome de sua interface wlan e depois com o drive de sua placa; execute wpa_supplicant sem nenhuma opção para maiores informações). Este comando inicia wpa_supplicant em primeiro plano e tenta conectar o WAP. Se a saída for de acordo com o que segue, você ajustou tudo corretamente:

Trying to associate with 00:11:22:33:44:55 (SSID='My_Secure_WLAN' freq=0 MHz)
Associated with 00:11:22:33:44:55
WPA: Key negotiation completed with 00:11:22:33:44:55 [PTK=CCMP GTK=CCMP]
CTRL-EVENT-CONNECTED - Connection to 00:11:22:33:44:55 completed (auth) [id=0 id_str=]

Configure um endereço IP estático para sua interface sem fio (ou execute um cliente DHCP) e tente executar o ping para um host dentro de sua LAN para testar se a conexão está funcionando.



CategoryRevisada

LinuxAccessPoint (last edited 2011-09-19 23:22:49 by localhost)