domingo, 16 de dezembro de 2007

Hotspot - Portal de autenticação wireless (HotSpot)


Portal de autenticação wireless (HotSpot)

Autor: Marcos Antonio Rosa
Data: 30/11/2007

Introdução



Com este artigo mostrarei uma das possibilidades de se disponibilizar uma rede wireless de fácil acesso, ou seja, sem a intervenção do administrador para permitir que usuários se conectem a mesma, porém mantendo o controle sobre seu uso. Este é basicamente o conceito usado em HotSpot de aeroportos, terminais, etc.

Então em termos operacionais a rede teria a seguinte característica, rede aberta para a conexão de qualquer usuário, porém com todas as conexões controladas e filtradas de modo que nenhum acesso é garantido ao usuário, a menos que ele abra um navegador web, a partir do qual será redirecionado para uma página de autenticação, e a partir desta página o usuário poderá cadastrar-se ou usar suas credenciais caso já possua.

O uso desta estrutura é bem flexível e pode se adaptar a diversas situações.

Diagrama lógico




Instalação de pré-requisitos



Será necessário:
  • Fedora Core 6, instalado sem DNS;
  • Micro com 2 interfaces LAN;
  • 01 AP (access point);
  • 01 cartão de acesso wireless.

Instalação Nocat

O projeto NoCat (http://nocat.net) transforma um gateway de acesso em uma ferramenta de "Captive portal", esta tecnologia é baseada em um firewall (iptables) que bloqueia toda conexão TCP/UDP a partir da rede local, capturando toda sessão http e redirecionado para um portal de login, este portal é protegido por uma sessão SSL, a partir do login no portal o NoCat aplica regras ao firewall liberando acesso ao usuário conforme definições de uso.

Para o perfeito funcionamento de nosso gateway será necessário a instalação de alguns serviços e configurações adicionais, conforme segue:

OBS: No caso do Bind acho interessante remover qualquer instalação anterior para evitar complicações, mas se souber o que esta fazendo apenas o configure.

Configuração das placas de rede

Use o utilitário do FC6 ou "ifconfig":

# system-config-network
  • eth0 = internet (configure com ip dinâmico ou fixo de modo a ter acesso à internet);
  • eth1 = LAN (configure com ip fixo e sem gateway, no nosso caso ip = 10.34.122.1/24, se for alterado este endereço deve também ser alterado no dhcpd.conf)

Servidor DHCP

# yum install dhcp
# cp /usr/share/doc/dhcp-3.0.5/dhcpd.conf.sample /etc/

(sujeito a atualizações, caso não encontre este diretório verifique a ver)

# mv /etc/dhcp.conf.sample /etc/dhcpd.conf # vi /etc/dhcpd.conf (edite o arquivo conforme segue)

ddns-update-style interim;
ignore client-updates;

subnet 10.34.122.0 netmask 255.255.255.0 {
   # --- default gateway
   option routers            10.34.122.1;
   option subnet-mask        255.255.255.0;
   option nis-domain        "suarede.com.br";
   option domain-name        "suarede.com.br";
   option domain-name-servers    10.34.122.1;
   option time-offset        -18000;    # Eastern Standard Time
   range dynamic-bootp 10.34.122.10 10.34.122.20;
   default-lease-time 21600;
   max-lease-time 43200;
}

Iniciando o serviço, o mesmo pode ser feito com o script (rc.d"n") conforme comentado anteriormente:

# /etc/init.d/dhcpd start

OBS: A instalação do Bind proposta é basicamente para encaminhar as requisições para o servidor DNS1 / DNS2, de sua escolha.

Instalação servidor DNS (BIND)

# yum install bind-chroot
# yum install system-config-bind
# chmod 755 /var/named/
# chmod 775 /var/named/chroot/
# chmod 775 /var/named/chroot/var/
# chmod 775 /var/named/chroot/var/named/
# chmod 775 /var/named/chroot/var/run/
# chmod 777 /var/named/chroot/var/run/named/
# cd /var/named/chroot/var/named/
# ln -s ../../ chroot
# chkconfig --levels 235 named on
# system-config-bind
(só iniciar para criar as configurações padrões e depois fechar)

Edite o named.conf conforme segue:

# vi /var/named/chroot/etc/named.conf

Incluir as seguintes linhas:

options{
   //outras opções//
   forward only;
   forwarders{serverDNS1; serverDNS2;};
};

Inicie o servidor:

# /etc/init.d/named start

OBS: Para se tornar mais prático você pode criar um script de inicialização e colocar no runlevel adequado 3 ou 5, conforme sua definição.


Configuração do gateway



Configurar o gateway para encaminhar os pacotes para a interface eth0, de modo a se tornar uma ponte de rede, sendo possível o acesso à internet de qualquer máquina conectada a interface eth1 configurada para ip dinâmico.

OBS: ** comentários

# vi /etc/sysctl.conf

Alterar a linha:

"net.ipv4.ip_forward = 0"

Para:

net.ipv4.ip_forward = 1

Salve.

# vi /etc/rc.d/rc.local

Acrescentar a linha abaixo ao final do arquivo:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE"

Isso fará o nat para eth0.

Desabilite as funções de segurança, execute:

# system-config-securitylevel

Desabilite o firewall e o SELinux.

Remova as configurações do iptables:

# rm -r /etc/sysconfig/iptables*

Reinicie o iptables:

# /etc/init.d/iptables restart

# yum install gnupg2
(ferramenta usada para criptografar)

# perl -MCPAN -e 'install Digest::MD5'
(mecanismo de autenticação)

# perl -MCPAN -e 'install Net::Netmask'

Instalação de pacotes adicionais

É bem provável que o Digest-MD5 já esteja instalado, de qualquer forma será retornada a mensagem de que já está instalado "UP", caso seja a primeira vez que esteja executando o instalador "perl MCPAN", serão feitas várias perguntas, deixe todas como padrão, observando que quando for questionado sua localização responda de acordo, ainda que se utilizar Proxy para web e FTP, no momento em que for requisitado entre com o(s) Proxy.

Com as configurações realizadas até este momento já será possível acessar a internet tendo como gateway nosso servidor, para isso confira inicialmente se os serviços estão marcados para arranque automático:

# system-config-services

Verifique se estão marcados o http, bind (named) e dhcpd.

# ping localhost

Verifique se retorna ping, se não retornar configure o /etc/hosts acrescentando a linha:

127.0.0.1      localhost loopback

Reinicie o servidor, conecte um micro na interface eth1, configure para obter o endereço ip/dns dinâmico, teste se os clientes da interface LAN podem acessar a internet, só passe para os próximos passos depois de concluir esta etapa.


Instalação do NOCAT



# mkdir /home/root/src
(crie uma pasta para baixar as fontes, pode ser em qualquer lugar)

# cd /home/root/src
# wget
http://nocat.net/downloads/NoCatAuth/NoCatAuth-nightly.tgz
# tar zxvf NoCatAuth-nightly.tgz
# cd NoCatAuth-nightly


IMPORTANTE: O Nocat não vem configurado para detectar firewall para kernel 2.6, portanto é preciso alterar manualmente este parâmetro, conforme segue.

# cd bin/
# vi detect-fw.sh


Substitua:

test X"`uname -sr | cut -d. -f-2`" = X"Linux 2.4"; then

Por:

test X"`uname -sr | cut -d. -f-2`" = X"Linux 2.6"; then

Salve.

# cd .. (retorne para diretório principal dos fontes do Nocat)

Crie o diretório principal para o Nocat e execute a instalação conforme segue.

# mkdir /usr/local/nocat
(cria diretório padrão)

# make PREFIX=/usr/local/nocat/gw gateway
(instala o gateway)

# make PREFIX=/usr/local/nocat/authserv authserv
(instala o módulo autenticador)

O Nocat já vem por padrão com uma chave para assinatura digital, vamos apagar e criar uma nova:

# rm -rf /usr/local/nocat/gw/pgp/trustedkeys.pgp
# rm -rf /usr/local/nocat/authserv/pgp/trustedkeys.pgp


E agora criar uma chave nova:

# make PREFIX=/usr/local/nocat/authserv pgpkey

Algumas perguntas serão feitas, responda conforme segue.
  • Escolha DSA (opção 1);
  • Escolha chave com 1024;
  • Expira deixe com 0 , confirme nunca expira;
  • Responda as perguntas de nome, e-mail, conforme necessários;
  • Confirme suas opções.

Agora será solicitada uma senha, importante, não coloque nada, tecle apenas enter e novamente será solicitado para confirmar, tecle enter novamente.

Sua chave será gerada em alguns instantes, procure usar o micro normalmente, como por exemplo acessar alguma página e etc, para que sejam coletados dados aleatórios para a geração da chave.

Depois de concluído a geração da chave copie-a para:

# cp /usr/local/nocat/authserv/trustedkeys.pgp /usr/local/nocat/gw/pgp/
# cp /usr/local/nocat/authserv/trustedkeys.pgp /usr/local/nocat/authserv/pgp/


Para que o servidor Apache possa utilizar, altere o dono destes arquivos:

# chown -R apache:apache /usr/local/nocat/authserv/pgp
# chown -R apache:apache /usr/local/nocat/gw/pgp


Mude as permissões:

# chmod 755 /usr/local/nocat/authserv/pgp
# chmod 755 /usr/local/nocat/gw/pgp


Esta instalação do Nocat está utilizando o MySQL para armazenar os usuários e senhas, posteriormente pode-se utilizar outras bases para a autenticação, como servidor radius, ldap, arquivo texto e etc, para tanto iremos agora iniciar o MySQL, em services (system-config-services) marque para que o mysql seja iniciado no boot.

Inicie o mysql:

# /etc/init.d/mysqld start

Crie uma senha para o mysql:

# mysqladmin password senha

Criar o banco Nocat:

# mysqladmin create nocat -p

Ainda de dentro da pasta principal dos fontes do mysql, copie a base padrão do Nocat, conforme segue:

# mysql nocat < etc/nocat.schema -p

Entre com a senha definida anteriormente.

Entre no modo root no mysql:

# mysql -u root -p
(entre com a senha)

Dê privilégios para o usuário nocat, com senha nocatauth:

mysql> grant all on nocat.* to nocat@localhost identified by 'nocatauth';
mysql> flush privileges;
mysql> quit;

Acesse o mysql com o usuário nocat e senha nocatauth, configurados anteriormente para conferir se as tabelas foram criadas.

# mysql -u nocat -pnocatauth
mysql> use nocat
mysql> show tables;

Você deve ver as tabelas do nocat:

mysql> quit

Pronto, o nocat está instalado, vamos às configurações.


Configurações do NOCAT



O nocat possui dois arquivos de configuração, um em /usr/local/nocat/gw/ e outro em /usr/local/nocat/authserv/, ambos com o mesmo nome "nocat.conf", portanto cuidar para não confundí-los.

Em /usr/local/nocat/authserv/nocat.conf, altere as seguintes linhas:

HomePage  // coloque a sua pagina inicial
LocalGateway 10.34.122.1  // endereço da interface da rede interna eth1
LocalNetwork 10.34.122.0  // endereço de rede da interface da rede interna eth1, observe que LocalNetwork não aparece como opção você deve acrescentar.
DataSource  DBI // marca a fonte para banco de dados ... nosso caso mysql
DataBase         dbi:mysql:database=nocat  // conector para mysql base de dados nocat
DB_User         nocat          // usuário do banco nocat, você deve alterar a gosto
DB_Passwd     nocatauth   // senha do banco nocat, você deve alterar a gosto
PGPKeyPath    /usr/local/nocat/authserv/pgp    // retire o comentário desta linha e confira o endereço
DocumentRoot    /usr/local/nocat/authserv/htdocs

No final do arquivo existe uma série de mensagens, podem ser traduzidas conforme necessário:

Em /usr/local/nocat/gw/nocat.conf altere as seguintes linhas:

GatewayName  Nome Gateway   // entre com um nome para seu nocat
GatewayMode    Passive    // no nosso caso como precisamos de nat somente o modo Passive.
AuthServiceAddr         10.34.122.1
ExternalDevice    eth0  // pode ficar comentado, ele detecta sozinho
InternalDevice     eth1  // pode ficar comentado, ele detecta sozinho
LocalNetwork      10.34.122.0/24
DNSAddr             10.34.122.1    // importante é preciso utilizar o DNS no gateway , caso contrário poderá ter sites bloqueados na consulta de dns.
IncludePorts         22 80 443       // são as portas que ele aceitará serviços
#ExcludePorts      25                  // não use as duas opções simultaneamente, por isso comente esta linha
PGPKeyPath    /usr/local/nocat/gw/pgp
DocumentRoot    /usr/local/nocat/authserv/htdocs


Configurações do APACHE (web-server)



Primeiramente vamos criar um certificado e chave novos para o "Apache", evitando usar o certificado padrão. Para isso precisaremos do openSSL, que já deve ter sido instalado com o Fedora, de qualquer forma caso não tenha, instale via yum:

# yum -y install openssl

Crie uma pasta ssl, por exemplo. Vá até esta pasta e siga os procedimentos abaixo.

Criando uma nova chave:

# openssl genrsa -out nocat.key 1024

Criando assinatura para certificado:

# openssl req -new -key nocat.key -out nocat.csr

Criando um certificado assinado:

# openssl x509 -days 365 -req -in nocat.csr -signkey nocat.key -out nocat.crt

Vamos mover este certificado e chave para a pasta padrão do apache:

# mv nocat.crt /etc/pki/tls/certs/nocat.crt
# mv nocat.key /etc/pki/tls/private/nocat.key


Desta forma só precisamos alterar o nome do arquivo de certificado e chave no arquivo de configuração em /etc/http/conf.d/ssl.conf, conforme será mostrado abaixo.

Edite:

# vi /etc/httpd/conf/httpd.conf

Edite este arquivo conforme segue.

Include conf.d/*.conf
Include /usr/local/nocat/authserv/httpd.conf

ServerAdmin admin@admin.br
ServerName 10.34.122.1
DocumentRoot "/usr/local/nocat/authserv/htdocs"
ScriptAlias /cgi-bin/ /usr/local/nocat/authserv/cgi-bin/
               

SetEnv PERL5LIB  /usr/local/nocat/suthserv/lib
SetEnv NOCAT      /usr/local/nocat/authserv/nocat.conf
#    AllowOverride None
#    Options None
#    Order allow,deny
#    Allow from all

# vi /etc/httpd/conf.d/ssl.conf

Edite este arquivo conforme segue:

SSLPassPhraseDialog  builtin
SSLSessionCache         shmcb:/var/cache/mod_ssl/scache(512000)
SSLSessionCacheTimeout  300
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
SSLCryptoDevice builtin
#SSLCryptoDevice ubsec
SSLCertificateFile /etc/pki/tls/certs/nocat.crt
SSLCertificateKeyFile /etc/pki/tls/private/nocat.key
#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
    
                    SSLOptions +StdEnvVars
    

    
                    SSLOptions +StdEnvVars
    


Instalação do access point (AP)





A instalação do AP deve ser de modo a permitir acesso fácil à rede wireless, para tanto configure-o de forma abera, ou seja, sem restrição de acesso. Em geral é assim que todos os equipamentos vem de fábrica, mas de qualquer forma consulte a documentação do fabricante.

O gateway configurado até este ponto é bastante seguro quanto a liberação de acesso e controle de que tipo de serviços baseado em portas tcp/udp podem passar, porém não há nenhuma preocupação com a segurança entre os clientes desta rede, ou seja, controlar o que um cliente desta rede acesse ou tente acessar outros micros também no mesmo lado da lan. Para isso alguns cuidados básicos devem ser tomados :
  • Primeiramente na página inicial deveremos colocar um aviso orientando os usuários a utilizarem VPN caso acessem conteúdos críticos.
  • De um modo geral todos os bons AP´s oferecem o recurso de "lan isolation", que impede que um cliente wireless acesse outro (via acl). Caso você esteja usando um access point mais modesto, esse recurso pode ser implementado no NoCat, mostrarei mais adiante.
  • Colocar um endereço de IP no AP em rede diferente do que está sendo publicado no DHCP, não que isso irá impedir qualquer acesso mas dificulta bastante.
  • Em alguns equipamentos é possível restringir o acesso ao seu gerenciamento via rede wireless e também restringir o IP que pode acessar o gerenciamento.

Esta medidas visam basicamente a segurança do AP e do acesso indevido entre os clientes da rede.


Configurações finais



Para que o Nocat seja iniciado durante o boot na seqüência correta, vamos utilizar um "script" fornecido com ele.

Copie da pasta /etc que está dentro da pasta onde estão os fontes do nocat (NoCatAuth-nightly/etc) o arquivo "nocat.rc" para a pasta /etc/rc.d/, para ficar padrão com os demais arquivos. Mude seu nome para "rc.nocat", edite este arquivo e altere conforme segue.

# Edit the following line if you installed the
# NoCat software somewhere else.
#

NC=/usr/local/nocat/gw/

Edite agora o arquivo /etc/rc.d/rc.local, onde colocamos regra para gateway, vamos agora comentar esta regra e acrescentar uma linha para carregar o script do nocat, o objetivo de termos colocado inicialmente a linha para encaminhamento era para testarmos se a ponte de rede estava ok.

Edite então o arquivo /etc/rc.d/rc.local, conforme segue:

touch /var/lock/subsys/local
#iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
/etc/rc.d/rc.nocat start

Seu portal de acesso wireless está pronto! Este portal também pode ser usado para redes wired, caso encontre uma aplicação.

O NoCat permite várias configurações adicionais, tipo, caso você queira liberar alguns sites para navegação mesmo que os usuários não tenham sido logados. Tipo em aeroportos você tem acesso aos sites dos possíveis provedores para se cadastrar.


Login



Tela inicial de Login, nela você também terá um link para a página de cadastro, estas páginas podem e devem ser totalmente customizadas, onde você pode inserir links para as páginas que desejar liberar acesso (estas deverão ser cadastradas em nocat.conf), remover o link para cadastro, etc.



Após o login com sucesso você é direcionado a página que tentou acessar inicialmente e um popup será aberto informando que você terá acesso durante determinado tempo (este período você pode configurar em nocat.conf), caso feche este pop-up por descuido, nada acontecerá, seu login permanecerá pelo tempo estipulado, logo após será novamente redirecionado à tela de login (você pode definir tempo de validade de um login, assim quando tentar logar-se novamente não terá sucesso, se for o caso).



E tela de cadastro, fornece uma interface para os usuários se cadastrarem automaticamente.


Conclusão



O NoCat, como apresentado neste artigo, é direcionado para prover acesso a internet ou a uma rede especifica, normalmente para rede de convidados, HotSpot de acesso a internet ou algo do gênero, percebendo que a segurança ficará da seguinte forma:
  • Página de login protegida com certificado digital, ou seja, usa ssl criptografando toda a sessão de login, contudo após a autenticação a criptografia para e os dados passarão sem criptografia e como no AP também não é usado criptografia, por este motivo se indica que para acesso a conteúdo crítico deva se usar VPN (da mesma forma que na maioria dos HotSpot);
  • Não há criptografia de dados na rede wireless;
  • Controle de acesso por portas e por domínio rigoroso, ou seja, você pode restringir facilmente quais portas e quais domínios podem ser acessados através do gateway com NoCat.

Tenho certeza de que o NoCat pode se adequar as necessidades específicas de de cada projeto neste contexto.

Espero que minha contribuição seja útil e fico a disposição para ajudar.


fonte: https://www.vivaolinux.com.br/artigo/Portal-de-autenticacao-wireless-(HotSpot)/

nota: tem algo estranho: na tela de autenticação traz a tela de um mikrotik?

Reações:

0 comentários: