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:
Instalação NocatO 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 redeUse o utilitário do FC6 ou “ifconfig”: # system-config-network
Servidor DHCP# yum install dhcp # 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 { 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 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 # perl -MCPAN -e ‘install Digest::MD5’ # 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 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/ 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 # make PREFIX=/usr/local/nocat/gw gateway # make PREFIX=/usr/local/nocat/authserv authserv 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 E agora criar uma chave nova: # make PREFIX=/usr/local/nocat/authserv pgpkey Algumas perguntas serão feitas, responda conforme segue.
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/ Para que o servidor Apache possa utilizar, altere o dono destes arquivos: # chown -R apache:apache /usr/local/nocat/authserv/pgp Mude as permissões: # chmod 755 /usr/local/nocat/authserv/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 Dê privilégios para o usuário nocat, com senha nocatauth: mysql> grant all on nocat.* to nocat@localhost identified by ‘nocatauth’; Acesse o mysql com o usuário nocat e senha nocatauth, configurados anteriormente para conferir se as tabelas foram criadas. # mysql -u nocat -pnocatauth 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 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 [email protected] <Directory “/usr/local/nocat/authserv/cgi-bin”> # 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 <Files ~ “\.(cgi|shtml|phtml|php3?)$”> SSLOptions +StdEnvVars </Files> <Directory “/usr/local/nocat/authserv/cgi-bin”> SSLOptions +StdEnvVars </Directory> |
|
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 :
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:
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. |