LinuxAccessPoint
Criar um ponto de acesso sem fio (wireless) no Linux
Conteúdo |
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 ath0Note 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
eth0Antes 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.
LinuxAccessPoint (last edited 2011-09-19 23:22:49 by localhost)