Ubuntu Hotspot Wi-fi com autenticação da Web

6

Estou procurando uma solução para usar na minha empresa para hóspedes ou visitantes, um sistema de hotspot wi-fi, como os hotéis. Compartilharei conexão wi-fi com nome de usuário e senha. Quando os usuários se conectarem ao sistema wi-fi redirecionarão a eles a página de login baseada na web para conectar sites.

Eu procurei no Google e aqui, mas honestamente depois de tantos artigos como um novato sobre o Linux eu estou tendo um cérebro explodir :) A maioria dos povos recomendou um nome de CD ao vivo é ZoneCD mas eu não consegui encontrar na internet (A página eles forneceram é sobre a fixação do telhado - link - o artigo está aqui link ).

Também encontrei alguns outros artigos que dizem que você pode fazer com open radius, add-ons de hotspots abertos mas honestamente eu não consegui instalar no meu Ubuntu.

Eu fico muito confuso e decidi perguntar aqui, eu acho que é possível fazer isso no Ubuntu como podemos fazer isso? Alguém já fez isso antes e você pode compartilhar sobre informações ou um artigo sobre como podemos fazer isso?

    
por Sheshman 16.07.2014 / 12:23

1 resposta

5

Parte Um

Eu me deparei com um aplicativo hotspot Ubuntu que permite que você forneça wi-fi através do Ubuntu, então espero que isso ajude com esse aspecto do que você está procurando.

A fonte do artigo está aqui link

Para instalar o ppa, execute os seguintes comandos

sudo add-apt-repository ppa:nilarimogard/webupd8
sudo apt-get update
sudo apt-get install ap-hotspot

Agora, na versão 14.04, o hostapd não funciona corretamente, portanto os comandos a seguir farão o downgrade do hostapd e usarão o apt para manter o pacote, evitando atualizações automáticas.

Para 64 bits

cd /tmp
wget http://archive.ubuntu.com/ubuntu/pool/universe/w/wpa/hostapd_1.0-3ubuntu2.1_amd64.deb
sudo dpkg -i hostapd*.deb
sudo apt-mark hold hostapd

Ou, para 32 bits

cd /tmp
wget http://archive.ubuntu.com/ubuntu/pool/universe/w/wpa/hostapd_1.0-3ubuntu2.1_i386.deb
sudo dpkg -i hostapd*.deb
sudo apt-mark hold hostapd

Para inicializar e configurar. . .

sudo ap-hotspot start

Para reconfigurar após a instalação. . .

sudo ap-hotspot configure

Para parar o ponto de acesso. . .

sudo ap-hotspot stop

e para reiniciar. . .

sudo ap-hotspot restart

Para uma lista de comandos. . .

ap-hotspot

Parte Dois : Autenticação baseada na Web

adaptado de link

Atualizei alguns dos comandos para cumprir a prática mais atual de usar o sudo.

Primeiro instale os módulos de compilação

sudo apt-get install build-essential linux-headers-generic automake subversion libtool

Para baixar e criar o pacote fonte do pepperspot; execute os seguintes comandos:

svn co svn://svn.code.sf.net/p/pepperspot/code/trunk pepperspot
cd pepperspot
autoreconf -f -i
./configure
make
sudo make install
sudo modprobe ipv6
sudo apt-get install radvd iptables libc6-dev quagga apache2 libapache2-mod-php5 libssl-dev freeradius

1.) Ativar o IPv6

Antes de mais nada, certifique-se de que o IPv6 esteja ativado em seu kernel. Se o IPv6 é compilado como um módulo, digite:

sudo modprobe ipv6

1.1) Autoconfiguração sem estado

Este é um exemplo do arquivo de configuração /etc/radvd.conf :

interface ath0  
{
  AdvSendAdvert on;
  AdvIntervalOpt on;
  MinRtrAdvInterval 2;
  MaxRtrAdvInterval 6;
  prefix 2001:db8:1::/64
  {
    AdvOnLink on;
    AdvAutonomous on;
    AdvRouterAddr on;
    };

    RDNSS 2001:db8:2::1 
    {
        AdvRDNSSPreference 8;
    AdvRDNSSOpen off;
    AdvRDNSSLifetime 30;
    };
};

Substitua as linhas de interface, prefixo e RDNSS (informações do servidor DNS) por seus próprios valores e inicie o radvd com:

sudo radvd -C /etc/radvd.conf

1.2) Endereçamento e roteamento

Um portal cativo tem que rotear pacotes de um usuário autenticado para a Internet. Portanto, o sistema deve ter o encaminhamento IPv6 ativado. Você pode ativá-lo com:

echo "1" | sudo tee /proc/sys/net/ipv6/conf/all/forwarding

Para manter essa configuração persistente, você pode usar o seguinte comando:

echo 'net.ipv6.conf.all.forwarding=1' | sudo tee -a /etc/sysctl.conf

O encaminhamento de IPv6 desabilitará a autoconfiguração do IPv6, de modo que a configuração de rede (atribuição de endereços e rotas) pode ser definida estaticamente ou dinamicamente com daemons de roteamento. Para o último procedimento, veja a seção 2.

Se você quiser usar o procedimento de endereçamento e roteamento estático, supondo que eth0 seja a interface conectada à rede IPv6 à Internet, digite o seguinte comando e substitua por seu próprio valor.

Atribuir endereço na interface com fio:

sudo ip -6 addr add 2001:db8:1::1234/64 dev eth0

Adicione a configuração de rota padrão (substitua pelo seu valor de endereço de rota):

sudo route -A inet6 add default gw fe80::1:2:3:4 dev eth0

Você pode ativar esta configuração persistente para inserir a configuração de rede em seu / etc / network / intefaces como você pode ver neste exemplo:

auto eth0
iface eth0 inet6 static
        address 2001:db8:1::1234
        netmask 64
                gateway fe80::1:2:3:4
        pre-up modprobe ipv6      # to be sure that ipv6 is enabled before we turn up the interface 

Observe que você não precisa configurar o endereço na interface conectada à caixa Access Point (ou a interface sem fio, se você usar as).

1.3) IPv4

A configuração do IPv4 é mais ou menos a mesma do que o IPv6, exceto que você não precisa anunciar o cliente para a configuração da rede. O PepperSpot integra um módulo DHCP para atribuir um endereço IPv4 a clientes remotos. Você pode desativar este módulo na configuração do PepperSpot se o link sem fio já tiver um servidor DHCP ou se a configuração dos clientes estiver configurada estaticamente. Você precisa, no entanto, configurar a interface vinculada à rede IPv4.

Da mesma forma, ative o encaminhamento IPv4 usando os seguintes comandos:

echo "1" | sudo tee /proc/sys/net/ipv4/conf/all/forwarding
echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf

e configure o endereço e a rota da interface (substitua por seus parâmetros):

sudo ip addr add 192.168.0.1/24 dev eth1
sudo route add default gw 192.168.0.254 dev eth1

Você pode usar o seguinte comando de bloco para atualizar seu arquivo / etc / network / interfaces:

echo 'auto eth1
iface eth1 inet static
    address 192.168.0.1
    netmask 24
    gateway 192.168.0.254' | sudo tee /etc/network/interfaces

1.4) Suporte do Netfilter

O PepperSpot usará algumas regras do Netfilter para continuar a comunicação entre o cliente e a Internet. Portanto, o sistema deve suportar o Netfilter. Se não for o caso, modifique a configuração do seu kernel:

Para o IPv4, você precisa ativar o suporte Nat, Mangle e de rastreamento;

Para o IPv6, você precisa apenas do suporte básico.

1.5) Notas

Todos os serviços (Radius, servidor web, PepperSpot, ...) podem ser instalados em sistemas que fornecem acesso Wi-Fi (modo Master). Pode ser um dispositivo incorporado ou um sistema do zero configurado como um ponto de acesso.

Para este caso, o seu cartão Wi-Fi deve suportar o modo Mestre.

Por exemplo, se você usar a interface sem fio com o driver madwifi, veja um exemplo de script de inicialização:

#!/bin/bash

# Setting ath0 in Master mode
# Replace PepperSpot by your SSID

wlanconfig ath0 destroy
wlanconfig ath0 create wlandev wifi0 wlanmode ap
iwconfig ath0 essid "PepperSpot"    
ifconfig ath0 up

2) Configure o conjunto de roteamento Quagga

A suíte de roteamento Quagga implementa alguns protocolos de roteamento IPv4 e IPv6. Esta seção descreve a instalação do protocolo RIPng para permitir o roteamento IPv6.Assumimos que você tenha um prefixo IPv6 delegado e que você precise rotear a comunicação para esse prefixo. Se não for o caso, você pode pular esta seção.

A configuração do quagga é feita através da configuração de alguns arquivos de configuração no diretório / etc / quagga , mas o quagga suite integra algumas interfaces do tipo cisco para cada protocolo para permitir a configuração em tempo real. para visualizar algumas informações de roteamento, como a tabela de roteamento.

Você pode colocar as configurações de rede IPv6 e IPv4 descritas anteriormente, na configuração do protocolo de roteamento. Para cada protocolo desejado, ative-o em / etc / quagga / daemon .

Precisamos ativar o zebra, porque é o principal módulo de roteamento necessário para usar outro protocolo e configurar interfaces. No nosso caso, só precisamos adicionar o RIPng também:

# This file tells the quagga package which daemons to start.
#
# Entries are in the format: <daemon>=(yes|no|priority)
#   0, "no"  = disabled
#   1, "yes" = highest priority
#   2 .. 10  = lower priorities
# Read /usr/share/doc/quagga/README.Debian for details.
#
# Sample configurations for these daemons can be found in
# /usr/share/doc/quagga/examples/.
#
# ATTENTION:
#
# When activation a daemon at the first time, a config file, even if it is
# empty, has to be present *and* be owned by the user and group "quagga", else
# the daemon will not be started by /etc/init.d/quagga. The permissions should
# be u=rw,g=r,o=.
# When using "vtysh" such a config file is also needed. It should be owned by
# group "quaggavty" and set to ug=rw,o= though. Check /etc/pam.d/quagga, too.
#
zebra=yes
bgpd=no
ospfd=no
ospf6d=no
ripd=no
ripngd=yes
isisd=no

Agora temos que criar um arquivo de configuração para cada daemon lançado.

arquivo /etc/quagga/zebra.conf :

!
! Zebra configuration saved from vty
!   2008/04/10 12:18:58
!
hostname MobSpot
password ***********
enable password *************
!
interface ath0
 ipv6 nd suppress-ra
!
interface eth0
 ipv6 address 2001:db8:1::1234/64
 ipv6 nd suppress-ra
!
interface eth1
 ip address 192.168.0.1/24
 ipv6 nd suppress-ra
!
interface eth2
 ipv6 nd suppress-ra
!
interface eth3
 ipv6 nd suppress-ra
!
interface lo
!
interface tun0
 ipv6 nd suppress-ra
!
interface wifi0
 ipv6 nd suppress-ra
!
ipv6 forwarding
!
!
line vty
!

Neste arquivo, configuramos a configuração estática de cada interface vinculada à rede de serviços (eth0 e eth1).

Arquivo

/etc/quagga/ripngd.conf :

! -*- rip -*-
!
! RIPngd sample configuration file
!
! $Id: ripngd.conf.sample,v 1.1.1.1 2002/12/13 20:15:30 paul Exp $
!
hostname MobSpot
password ***********
enable password ************
!
! debug ripng events
! debug ripng packet
!
!
router ripng
network eth0
redistribute connected
redistribute static
route 2001:db8:1::/64
!
line vty
!

Neste arquivo, configuramos o protocolo RIPng, indicando que somos capazes de rotear o pacote para o prefixo 2001: db8: 1 :: / 64 na interface eth0.

Para os dois arquivos, a primeira seção definirá a senha para as interfaces de configuração (vty). A linha de ativação da senha indica que é necessária uma senha para obter o direito de reconfigurar o daemon. Não esqueça a linha line vty para habilitar esta interface de configuração.

Para o tipo de configuração zebra:

sudo telnet 127.0.0.1 zebra

Para configuração de RIPng:

sudo telnet 127.0.0.1 ripngd

Nota: Após a autenticação (com a linha de senha autenticada no arquivo de configuração), você obterá uma linha de comando para configurar o daemon. Tipo "?" para ver os comandos disponíveis.

Para concluir, reinicie os daemons quagga:

sudo /etc/init.d/quagga restart 

Nota: Se você precisar configurar o roteamento IPv4, adapte essa configuração ao daemon do RIP.

3) Configuração do Apache

O PepperSpot precisa se comunicar com um servidor da Web instalado na mesma máquina para permitir que os clientes prossigam a autenticação. O servidor web deve ser configurado para SSL, PHP e CGI.

Aqui está a configuração para o servidor web Apache2:

Gere um certificado SSL para garantir a identidade do servidor da Web:

sudo make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/key.pem

O segundo passo é carregar o módulo Apache2-SSL:

sudo a2enmod ssl

O servidor da web precisa de um host virtual para ser acessado. Crie o arquivo / etc / apache2 / sites-available / pepperspot com o seguinte conteúdo (Adapte-se à sua configuração necessária):

NameVirtualHost *:443

<VirtualHost *:443>
        ServerAdmin webmaster@pepperspot
        SSLEngine on
        SSLCertificateFile /etc/apache2/key.pem

        DocumentRoot /var/www/
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
                    # This directive allows us to have apache2s default start page
                    # in /apache2-default/, but still have / go to the right place
                RedirectMatch ^/$ /apache2-default/
        </Directory>

            # CGI - We need cgi support to communicate with PepperSpot
        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>
</VirtualHost>'

Se você quiser modificar o nome do host virtual, não se esqueça de que o Apache precisa ouvir o endereço IPv6 e IPv4 para o modo de pilha dupla e a interface IPv4 ou IPv6 com relação ao modo único que você escolherá.

Adicione /etc/apache2/ports.conf para permitir a escuta HTTPS (se ainda não estiver presente) com o seguinte código de bloco:

echo '<IfModule mod_ssl.c>
    Listen 443
</IfModule>' | sudo tee -a /etc/apache2/ports.conf

Finalmente, carregue o site:

sudo a2ensite pepperspot
sudo /etc/init.d/apache2 reload

4) Configuração do FreeRadius

O PepperSpot é capaz de se comunicar com um servidor Radius através do protocolo IPv4 ou IPv6, com relação à configuração do endereço do servidor radius em /etc/pepper.conf. Aqui está a configuração do FreeRadius Server. Para ter suporte a IPv6, você precisa de uma versão do FreeRadius & gt; = 2.0.

A configuração do FreeRadius é complexa, e o seguinte descreve apenas uma configuração elementar para habilitar o suporte a IPv6 no FreeRadius, e uma maneira fácil de adicionar algumas contas de usuário. Se você quer uma configuração melhor, veja a documentação do FreeRadius.

4.1) Configuração do IPv6

Modifique o arquivo /etc/freeradius/radiusd.conf para adicionar a seguinte seção:

# For authentication 
listen {
        type = auth
#       ipaddr = *
        ipv6addr = ::1
        port = 0
#       interface = eth0
#       clients = per_socket_clients
}

# For accounting                         
listen {
        type = acct
#       ipaddr = *
        ipv6addr = ::1
        port = 0
#       interface = eth0
#       clients = per_socket_clients
}

Com esta configuração, substitua :: 1 pelo campo ipv6addr pelo endereço no qual o FreeRadius deve ouvir. port = 0 significa que as portas padrão do Radius são usadas. Se você especificar * para ipv6addr, o FreeRadius escutará em cada endereço IPv6 configurado no sistema.

Agora, você precisa configurar um cliente FreeRadius (chamado de NAS), normalmente o NAS é o portal cativo.

Abra o arquivo /etc/freeradius/clients.conf e adicione as seguintes linhas:

client ::1 {      # here ::1 is the name of the client. Replace with your own value
    ipv6addr    = ::1
    secret  = testing123
    shortname   = localhost
    nastype     = other
}

Se o PepperSpot e o FreeRadius estiverem em uma caixa diferente, o ipv6addr deve ser substituído pelo endereço com o qual o PepperSpot e o FreeRadius se comunicam. Modifique o nome curto também.

Para reiniciar o FreeRadius:

sudo /etc/init.d/freeradius restart

4.2) Configuração do IPv4

Para a configuração IPv4 do FreeRadius, substitua o campo ipv6addr por ipaddr e preencha-o com o endereço IPv4 desejado.

4.3) Contas

Finalmente, precisamos criar contas em / etc / freeradius / users:

toto Cleartext-Password:="totoilsaitpas"

ping6 Cleartext-Password:="pong6"

Reiniciar o FreeRadius:

sudo /etc/init.d/freeradius restart

5) Configuração do PepperSpot

Copie alguns arquivos de configuração:

sudo cp doc/pepper.conf /etc/
sudo cp doc/hotspotlogin.cgi /usr/lib/cgi-bin/
sudo chmod +x /usr/lib/cgi-bin/hotspotlogin.cgi

Para o IPv4:

sudo cp doc/pepper.iptables /etc/
sudo chmod +x /etc/pepper.iptables

Para o IPv6:

sudo cp doc/pepper.ip6tables /etc/
sudo chmod +x /etc/pepper.ip6tables

5.2) iptables

Modifique os scripts /etc/pepper.iptables e / ou /etc/pepper.ip6tables e adapte $ INTIF (interface conectada ao ponto de acesso ou à interface sem fio), $ EXTIF4 (interface conectada à LAN IPv4) e $ EXTIF6 (interface conectada à rede IPv6) valores referentes à sua configuração. Note que para a configuração dual stack, $ EXTIF4 e $ EXTIF6 podem ter o mesmo valor.

Você pode seguir o restante da configuração a partir da documentação do usuário do pepperspot. link Existe apenas uma seção de configuração à esquerda.

    
por mchid 16.07.2014 / 13:47