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.063 ]

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

Sistema de arquivos criptografado

Docker: Uma abordagem didática para tempos obscuros

O que é ForceCommand

Access Point com cartão Atheros em Slackware 12.0

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

Leitura recomendada

Auditando senhas com John The Ripper

Um dia depois da inundação

Arpwatch - Detecte em sua rede ataques de Arp Spoofing/Arp Poisoning

VPN: IPSec vs SSL

O phishing e uma análise forense

  
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