Gateway autenticado com Apache, Iptables e CGI em shell

Procurando uma solução que fosse ao mesmo tempo simples de ser implementada e de grande eficiência comparados aos gateways mais sofisticados que empregam bancos de dados e etc, cheguei a esta solução ideal para ser usada em provedores wireless ou a cabo. Ela ainda está em desenvolvimento e dada a sua enorme simplicidade de seu conceito pode servir de base para projetos mais elaborados.

[ Hits: 86.813 ]

Por: Carlos Affonso Henriques. em 27/07/2007


Configurando o SSL no Apache



Nosso gateway deve ficar abrigado sob um servidor seguro para que nenhum xereta capture os logins e senhas dos usuários e tenha acesso a net sem pagar.

Este pequeno how-to foi escrito por SiegeX e publicado originalmente em:
Traduzido e adaptado por mim.

1. Primeiramente editaremos o arquivo /etc/apache/httpd.conf e faremos as alterações abaixo.

Descomente a linha:

Include /etc/apache/mod_ssl.conf

2. Agora editaremos o arquivo /etc/apache/mod_ssl.conf e modificaremos a seguinte seção:

# General setup for the virtual host
DocumentRoot "/var/www/htdocs"
ServerName new.host.name
ServerAdmin you@your.address
ErrorLog /var/log/apache/error_log
TransferLog /var/log/apache/access_log

Alteramos as seguintes linhas:

DocumentRoot "/seu_diretório_html"
ServerName nomedoseuhost.seudominio.com.br
ServerAdmin seuemail@seudominio.com.br

3. Agora criaremos as chaves e certificados:

# cd /etc/apache
# openssl req -new > new.cert.csr


4. Agora removeremos a senha escolhida na criação do certificado:

# openssl rsa -in privkey.pem -out new.cert.key

5. Agora vamos converter a assinatura do certificado:

# openssl x509 -in new.cert.csr -out new.cert.cert -req -signkey new.cert.key -days 1825

6. Copiaremos o certificado e sua chave para os diretórios apropriados:

# cp new.cert.cert /etc/apache/ssl.crt/server.crt
# cp new.cert.key /etc/apache/ssl.key/server.key


7. Basta agora iniciar o Apache com o suporte a SSL.

# apachectl-mod_ssl startssl

Caso você use o script de inicialização do Apache em /etc/rc.d/rc.httpd, altere as linhas referentes ao apachectl pela linha mencionada acima.

Em meu sistema o DocumentRoot e o cgi-bin estão respectivamente em /mnt/sda6/httpd/ e /var/www/cgi-bin, altere os scripts para o seu path.

Dando privilégios de root ao apache

O Apache será o manipulador do iptables e uma série de outros elementos que só podem ser manipulados pelo root, portanto ele deve ter permissões para tal dada pelo /etc/sudoers como abaixo:

apache ALL=NOPASSWD:/usr/sbin/iptables,/usr/sbin/useradd,/usr/sbin/userdel,/usr/sbin/chpasswd, /usr/bin/smbpasswd,/usr/sbin/cbq,/sbin/ip,/sbin/tc,/usr/sbin/dhcpd,/sbin/arping,/usr/bin/rm, /bin/killall,/bin/chmod

Página anterior     Próxima página

Páginas do artigo
   1. Preparando o Apache
   2. Configurando o SSL no Apache
   3. A topologia da rede
   4. O firewall
   5. A página de autenticação
   6. O arquivo de contas
   7. O script CGI de autenticação
   8. O script para desfazer a autenticação
   9. A tabela ARP estática
   10. O controle de banda
   11. Notas e agradecimentos
Outros artigos deste autor

Obtendo TimeStamps da Blockchain com OpenTimestamps

Access Point com cartão Atheros em Slackware 12.0

L7-filter (funcionando) no Slackware 10.2

Filtro de conteúdo autenticado com níveis de privilégio

Reconhecimento de placas de veículos com OpenALPR

Leitura recomendada

SDI (IDS) com o SNORT, MySQL, PHP e BASE em 15 minutos

Biometria facial na autenticação do usuário root

Debian Sarge + Snort + MySQL + Acidlab + Apache

Como instalar o Avast antivírus no Linux

Slackware vs PAM

  
Comentários
[1] Comentário enviado por removido em 27/07/2007 - 15:57h

Olá Amigo,

Bom, para deixar seu artigo ainda mais rico eu gostaria de dar uma opinião! No caso de um hijack bem feito (roubo de seção), quando o cliente cai e em seguida entra o hijack seu arping vai consultar ele tranqüilamente! Concorda!? Espero que sim, pois eu já fiz testes com isso e infelizmente da certo! A solução é simples, ao invés de fazer o servidor consultar quem está de pé ou não, o que dependendo do número de estações tem um tempo elevado, eu sugiro mudar para o comando at. Como já uso o servidor Radius, foi fácil, no comando AT eu agendo uma verificação pra saber se o IP tal é do fulano de tal conectado no radius, aí sim, se não for a regra dele é derrubada! Pra substituir o uso do radius, pode-se pensar em cookie, por exemplo!

T+

[2] Comentário enviado por capitainkurn em 27/07/2007 - 17:50h

Boa! nem havia me ocorrido o at.

Quando elaborei aquele while de arping, pensei em coloca-los isoladamente rodando sob um shell filho do mac_accept4.cgi que seria chamado em background, mas esbarrei em um problema... não entendí ainda o por que de não conseguir rodar um loop em um shell filho a partir de um CGI, mas é uma coisa que estou bolando e a sua idéia do at foi grande.
Obrigado pela dica, e espero que tenha gostado do artigo.

[3] Comentário enviado por fabiorvs em 22/04/2008 - 19:07h

Ola tem como fazer a autenticação só por usuário, sem o MAC e ip, pois trabalho em uma faculdade e preciso cadastrar todos os alunos.

[4] Comentário enviado por capitainkurn em 23/04/2008 - 10:03h

É mais fácil ainda, a única razão para eu atrelar o ip ao mac address é o controle de banda, pois provedores em geral possuem planos de velocidade diferentes e se não houver vínculo entre o IP e o login e senha o usuário poderia configurar um IP manualmente e usar uma velocidade maior do que a contratada.

[5] Comentário enviado por cleibson em 03/05/2009 - 22:57h

Como o cliente será diretionado para autenticação, sendo que não há nenhuma regra redirecionando sua navegação para a porta 443 obrigando-o a autenticar antes de navegar

[6] Comentário enviado por removido em 06/05/2010 - 09:29h

òtima dica para o combate de ataques do TIPO MITM, originados por arpspoof.

[7] Comentário enviado por douglassironi em 28/06/2011 - 18:38h

Sobre a questão de atrelar MAC, podemos fazer isso com PHP, no momento que o cliente se cadastra e cria seu usuario e senha, podemos tranquilamente pegar o MAC dele com a função, abaixo tem um link explicando como fazer.

http://scriptbrasil.com.br/forum/index.php?showtopic=70543

No momento que o usuario/cliente se cadastrar, pode ser gerado o arquivo do DHCP atrelando um ip para o mac capturado.

Recomendo ultilizar um banco de dados para salvar as informações dos clientes/usuarios.
O freeradius tem as tabelas prontas em vários tipos de BD.

Qualquer duvida, estou a disposição.
contato@douglassironi.com


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts