Você está na página 1de 10

NoCatAuth - Construindo um firewall/gateway autenticado [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1338

NoCatAuth - Construindo um firewall/gateway autenticado


Autor: Patrick Brandao <contato at patrick.eti.br> Data: 30/08/2004 Introduo Por Patrick Brando http://www.patrick.eti.br contato@patrick.eti.br

Aviso
Este tutorial pode ser distribudo, impresso e copiado de todas as formas possveis desde que se mantenha o nome, a pgina web e o e-mail do autor no cabealho em local visvel, abaixo do ttulo e com a letra maior ou igual a usada no texto. O programa NoCatAuth, criado pela nocat.net tem o propsito de evitar que pessoas no autorizadas tenham acesso a internet em rede wireless. Para isso, esse programa em Perl captura o trfego na porta 80 e o desvia para um servidor HTTP, onde haver uma pgina solicitando usurio e senha, e opcionalmente, uma pgina para cadastro. O NoCat tambm pode ser usado para simplesmente obrigar o usurio a ler uma pgina de splash antes de navegar, onde se pode colocar um termo de uso, um aviso ou simplesmente a pgina do provedor de acesso. O NoCat pode ser configurado para rodar em trs modos: OPEN - O trfego na porta 80 capturado e redirecionado para uma pgina de splash, aps a pgina ter sido carregada, o acesso internet liberado para o host. PASSIVE - O trfego dos usurios no autenticados para a porta 80 ser capturado, aps a autenticao, uma regra de firewall (iptables ou ipchains) permitir o acesso internet por meio de NAT. CAPTIVE - Semelhante ao PASSIVE, porm, ao se identificar com sucesso, o acesso internet ser liberado, mas sem NAT. O NoCatAuth funciona com duas instncias nos modos PASSIVE e CAPTIVE, uma, NoCat Gateway, e outra NoCat Auth, o Gateway redirecionar o trfego HTTP para a porta 80 do servidor Auth que aps autenticar o usurio, se conectar na porta 5280 do Gateway para dar permisso de passagem ao host. A conexo do servidor Auth na porta 5280 do Gateway criptografada com PGP para dar suporte a casos em que o servidor Auth tem uma conexo no confivel com o servidor Gateway.

1 de 10

22/4/2013 18:01

NoCatAuth - Construindo um firewall/gateway autenticado [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1338

Tomei a iniciativa de escrever este tutorial ao ver que no encontrava, nem no Google, nem na prpria pgina no NoCat, um tutorial que me ensinasse com clareza como se usa este programa.

Objetivo

Permitir acesso internet somente a usurios autenticados; A autenticao ter que ser feita em uma pgina web e a base de dados dever ser armazenada em um banco de dados MySQL; Usar HTTPS na pgina de autenticao; Os hosts devem receber um endereo IP dinmico e invlido (no rotevel); Os usurios devem ter acesso por NAT, que ser feito no gateway; Os servidores NoCatAuth e NoCatGateway devero ser instalados no mesmo computador.

Tecnologias usadas e ambiente de laboratrio Linux 2.4.26 (distribuio Slackware 10.0 - instalao FULL) Apache 2.0.50/mod_ssl OpenSSL 0.9.7d GnuPG 1.2.2 NocatAuth 0.82 MySQL 4.0.20 Perl 5.8.4 DHCPD 1.3.0pl2 BIND 9.2.3 IPTABLES 1.2.10 Computador de laboratrio: Processador: K6-II 500MHz Memria: 128 MB HD: 15GB ( Particionamento: 1 - 512 MB Swap, 2 - 14200 MB EXT3) Placas de rede: 2 - 3COM (eth0 192.168.150.21, eth1 192.168.10.1) Sistema operacional: Linux Slackware 10.0 (instalao FULL).

2 de 10

22/4/2013 18:01

NoCatAuth - Construindo um firewall/gateway autenticado [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1338

CDROM 52x Material mnimo necessrio: Computador com 2 interfaces de rede e drive cdrom/dvdrom, cd de instalao do Slackware 10.0, acesso a internet no momento da instalao (downloads de pendncias).

Instalao dos programas O Slackware 10.0 vem com o Apache 1.3, mas eu particularmente prefiro o Apache 2.0.50, por isso vou us-lo nesta soluo. Se voc tem experincia como Apache 1.3.x, fique a vontade em us-lo, seno: Removendo Apache 1.3: # removepkg apache-1.3.31-i486-2 O OpenSSL verso 0.9.7.d, GnuPG 1.2.4, MySQL 4.0.20 e Perl 5.8.4 (e modulo perl Digest::MD5) j vem instalados por padro (instalao FULL) no Slack 10. Instalao do Apache 2.0.50 # cd /usr/local/src # wget http://apache.usp.br/httpd/httpd-2.0.50.tar.gz # tar xvzf httpd-2.0.50.tar.gz # cd httpd-2.0.50 # ./configure --enable-ssl --enable-cgi --enable-suexec --enable-so # make # make install O Apache ser instalado no diretrio /usr/local/apache2, os arquivos de configurao ficaro na pasta usr/local/apache2/conf. Mdulos Perl Os mdulos usados pelo NoCat para esta soluo so: Net::Netmask DBI DBD::mysql Digest::MD5 Se voc deseja usar outro tipo de autenticao, consulte a documentao do NoCat. Vrias tecnologias so suportadas: IMAP, LDAP, SAMBA, PAM, RADIUS, etc. A primeira vez que voc invocar o CPAN do Perl, ele solicitar algumas configuraes do sistema e da localidade, basta responder N que ele usar a configurao padro. Necessrio estar conectado. # perl -MCPAN -e shell

3 de 10

22/4/2013 18:01

NoCatAuth - Construindo um firewall/gateway autenticado [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1338

cpan> install Bundle::CPAN (ENTER para todas as perguntas) cpan> install DBI cpan> install DBD::mysql cpan> install Digest::MD5 cpan> install Net::Netmask cpan> exit Ateno, as linhas seguintes testam os mdulos e no podem retornar erros: # perl -MDBI # perl -MDBD::mysql # perl -MDigest::MD5 # perl -MNet::Netmask Agora o Perl est completo para o NoCat. Ativar MySQL Vamos ativar o MySQL, pois no Slackware 10.0 ele se encontra instalado, porm alguns ajustes so necessrios para coloc-lo rodando. Como ns iremos usar o MySQL apenas para armazenar algumas centenas de logins, no convm reservar recursos desnecessrios. Por isso ser usado o arquivo de configurao my-small.cnf (ver documentao do MySQL). Em seguida criaremos um banco de dados para o NoCatAuth e um login de acesso para ele. # cp /etc/my-small.cnf /etc/my.cnf # mysql_install_db # chown mysql.mysql /var/lib/mysql /var/run/mysql -R # chmod +x /etc/rc.d/rc.mysqld # /etc/rc.d/rc.mysqld start Conferindo se o servidor MySQL esta de p: # nmap localhost -p 3306 Starting nmap 3.50 ( http://www.insercure.org/nmap/ ) at 2004-07-26 16:02 Interesting ports on localhost (127.0.0.1): PORT STATE SERVICE 3306/tcp open mysql Nmap run completed - 1 IP address (1 host up) scanned in 0.331 seconds Ajustando a senha do root mysql: # mysqladmin password senhadorootmysqlaqui # mysql -u root -psenhadorootmysqlaqui mysql> CREATE DATABASE nocat; mysql> GRANT ALL PRIVILEGES ON nocat.* TO "senhadonocat" WITH GRANT OPTION; mysql> FLUSH PRIVILEGES; mysql> exit

nocat@localhost

IDENTIFIED BY

4 de 10

22/4/2013 18:01

NoCatAuth - Construindo um firewall/gateway autenticado [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1338

Substitua "senhadorootmysqlaqui" pela senha de root do MySQL, cuidado com esta senha. Faa o mesmo com "senhadonocat". NoCAT Todos os cdigos necessrios para construo do nosso servidor, tanto Auth como Gateway esto no mesmo pacote: # wget http://nocat.net/download/NoCatAuth/NoCatAuth-0.82.tar.gz # tar -xvzf NoCatAuth-0.82.tar.gz # cd NoCatAuth-0.82 NoCAT Gateway # make PREFIX=/usr/local/nocat/gw gateway NoCAT Auth # make PREFIX=/usr/local/nocat/authserv authserv Chave PGP A chave de PGP deve ser a mesma para ambas as instncias para que elas se comuniquem, portanto, vamos cri-la no authserv e copi-la para o gateway. No defina uma senha para esta chave. # make PREFIX=/usr/local/nocat/authserv pgpkey # cp /usr/local/nocat/authserv/trustedkeys.gpg /usr/local/nocat/gw/pgp Pronto, a instalao j est feita, agora vamos configurar tudo, comeando pelo Apache.

Configurao Apache Criando certificados: Como no temos dinheiro sobrando para comprar um certificado da VeriSign (pelo menos eu no), vamos ser nossa prpria entidade certificadora. Crie um diretrio na pasta raz do Apache com o nome ssl: # cd /usr/local/apache2 # mkdir ssl # cd ssl Vamos criar os certificados: # openssl genrsa -out nocat.key 1024 Criar assinatura do certificado digital:

5 de 10

22/4/2013 18:01

NoCatAuth - Construindo um firewall/gateway autenticado [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1338

# openssl req -new -key nocat.key -out nocat.csr Certificado auto-assinado: # openssl x509 -days 365 -req -in nocat.csr -signkey nocat.key -out nocat.crt Configurando HTTPS e CGI-BIN Edite o arquivo /usr/local/apache2/conf/httpd.conf e procure onde est a definio da pasta virtual cgi-bin: ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/ <Directory /usr/local/apache2/cgi-bin/> AllowOverride None Options None Order allow,deny Allow from all </Directory> Altere para o exemplo abaixo: ScriptAlias /cgi-bin/ /usr/local/nocat/authserv/cgi-bin/ <Directory /usr/local/nocat/authserv/cgi-bin/> SetEnv PERL5LIB /usr/local/nocat/suthserv/lib SetEnv NOCAT /usr/local/nocat/authserv/nocat.conf </Directory> Edite o arquivo /usr/local/apache2/conf/ssl.conf e preencha com o seguinte contedo: SSLRandomSeed startup builtin SSLRandomSeed connect builtin <IfDefine SSL> Listen 443 AddType application/x-x509-ca-cert .crt AddType application/x-pkcs7-crl .crl SSLPassPhraseDialog builtin SSLSessionCache dbm:/usr/local/apache2/logs/ssl_scache SSLSessionCacheTimeout 300 SSLMutex file:/usr/local/apache2/logs/ssl_mutex <VirtualHost _default_:443> DumentRoot /usr/local/apache2/htdocs ServerName authserv.dominio.com.br:443 ServerAdmin contato@patrick.eti.br ErrorLog /usr/local/apache2/logs/erros_log TransferLog /usr/local/apache2/logs/access_log SSLEngine on SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL SSLCertificateFile /usr/local/apache2/ssl/nocat.crt SSLCertificateKeyFile /usr/local/apache2/ssl/nocat.key

6 de 10

22/4/2013 18:01

NoCatAuth - Construindo um firewall/gateway autenticado [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1338

<Files ~ \.(cgi|shtml|phtml|php3?)$> SSLOptions +StdEnvVars </Files> <Directory /usr/local/nocat/authserv/cgi-bin> SSLOptions +StdEnvVars </Directory> SetEnvIf User-Agent .*MSIE.* \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 CustomLog /usr/local/apache2/logs/ssl_request_log \ %t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \%r\ %b </Virtualhost> </IfDefine> NoCatAuth V at o diretrio /usr/local/nocat/authserv, edite o arquivo nocat.conf e confira os parmetros: Verbosity 10 PGPKeyPath /usr/local/nocat/authserv/pgp HomePage http://www.dominio.com.br/ DocumentRoot /usr/local/nocat/authserv/htdocs # configuraao do banco de dados MySQL # reveja a ativao do mysql para conferir a senha que voc configurou DataSource DBI Database dbi:mysql:database=nocat DB_User nocat DB_Passwd senhadonocat Os demais parmetros devem permanecer inalterados, a menos que voc saiba o que esta fazendo. Na ativao do MySQL, ns apenas criamos o banco de dados nocat, agora vamos criar as tabelas. No pacote de instalao do NoCat h uma pasta etc e dentro dela um arquivo chamado nocat.schema. Execute o seguinte comando para criar a estrutura de tabelas: # mysql -u root -psenhadorootmysqlaqui nocat < /usr/local/src/NoCatAuth-0.82/etc/nocat.schema MUITO IMPORTANTE: J vi varias perguntas na internet sobre um erro: "INTERNAL SERVER ERROR" Quando se solicita a autenticao. Como o nocat auth roda por meio de cgi, o usuario que acessa os arquivos em /USR/LOCAL/NOCAT/AUTHSERV/* o usuario do Apache. Para que esse erro desaparea, d o domnio desses arquivos para o Apache, execute: # chown apacheuser.apachegroup /usr/local/nocat/authserv -R # chmod 700 /usr/local/nocat/authserv -R

7 de 10

22/4/2013 18:01

NoCatAuth - Construindo um firewall/gateway autenticado [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1338

LEMBRANDO QUE: apacheuser e apachegroup dever ser substitudo pelo usurio e grupo que roda o Apache. NoCatGateway Edite agora o arquivo nocat.conf do diretrio /usr/local/nocat/gw e confira os parmetros abaixo: Verbosity 10 GatewayName Domnio Gateway - Autenticao # se o gateway tambm faz NAT, voc deve usar Passive, seno, use Captive GatewayMode Passive LoginTimeout 86400 HomePage http://www.dominio.com.br/ DocumentRoot /usr/local/nocat/gw/htdocs # Coloque no parmetro abaixo, os logins que tem livre acesso separados de espao # ou comentar essa linha para que todos autentiquem Owners contato@patrick.eti.br tol83@bol.com.br # ip da interface em contato com rede wireless ou rede local AuthServiceAddr 192.168.10.1 AuthServiceURL https://$AuthServiceAddr/cgi-bin/login LogoutURL https://$AuthServiceAddr/logout.html # interface com ip rotevel na internet ExternalDevice eth0 # interface com usurios (192.168.10.1) InternalDevice eth1 # apenas este DNS poder ser usado na rede dos usurios, caso # este parmetro no seja definido, sero liberados os endereos # dos servidores no arquivo /etc/resolv.conf # lembre-se de colocar os mesmos servidores na configurao do DHCPD DNSAddr 192.168.10.1 192.168.150.56 Os demais parmetros devem permanecer inalterados, a menos, claro, que voc saiba o que est fazendo. Configurando DHCPD Para que os usurios no tenham que trocar nas configuraes de rede dos seus computadores, vamos configurar o gateway para servir isso para eles. Edite o arquivo /etc/dhcpd.conf e preencha com as linhas: ddns-update-style none; default-lease-time 600; max-lease-time 600000; option broadcast-address 192.168.10.255;

8 de 10

22/4/2013 18:01

NoCatAuth - Construindo um firewall/gateway autenticado [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1338

# desativar dhcpd para a interface 192.168.150.21 subnet 192.168.150.0 netmask 255.255.255.0 {} subnet 192.168.10.0 netmaks 255.255.255.0 { range 192.168.10.100 192.168.10.200; option routers 192.168.10.1; option domain-name "dominiowireless.com.br"; option domain-name-servers 192.168.10.1; } # mais informacoes: # man dhcpd.conf Opcional: Servidor DNS recomendvel que voc tenha um servidor DNS no gateway, portando adiciona o NAMED na inicializao do Slackware 10.0: # chmod +x /etc/rc.d/rc.bind

Iniciando o servidor Por motivos de segurana, j que o Apache 1.3 foi removido, desative o rc.httpd com o comando: # chmod -x /etc/rc.d/rc.httpd Crie o arquivo /etc/rc.d/rc.nocat com o seguinte contedo: #!/bin/sh NC=/usr/loca/nocat/gw export PERL5LIB=$NC/lib:$PERL5LIB export NOCAT=$NC/nocat.conf case "$1" in start) echo "Starting the NoCat gateway ..." $NC/bin/gateway ;; stop) echo "Stopping the NoCat gateway ..." killall gateway 2>/dev/null restart) $0 stop sleep 1 $0 start ;; *) echo "Usage: $0 {start|stop|restart}" exit 1 esac

9 de 10

22/4/2013 18:01

NoCatAuth - Construindo um firewall/gateway autenticado [Artigo]

http://www.vivaolinux.com.br/artigos/impressora.php?codigo=1338

E torne-o executvel: # chmod +x /etc/rc.d/rc.nocat Execute os comandos abaixo para rodar o DNS e o MySQL na inicializao do sistema: # chmod +x /etc/rc.d/rc.bind # chmod +x /etc/rc.d/rc.mysqld Vamos agora configurar o servidor para levantar os servios de forma organizada. Edite o arquivo /etc/rc.d /rc.local e certifique-se de que h as seguintes linhas (adicione as que faltarem): # iniciando servidor DHCPD dhcpd # iniciando apache com suporte a SSL If [ -x /usr/local/apache2/bin/apachectl ]; then /usr/local/apache2/bin/apachectl startssl fi # iniciando NoCatGateway /etc/rc.d/rc.nocat start Agora, reinicie o servidor. Seu gateway autenticado est pronto!

http://www.vivaolinux.com.br/artigo/NoCatAuth-Construindo-um-firewall-gateway-autenticado Voltar para o site

10 de 10

22/4/2013 18:01